From 7ef0fd933c1aff98d6b7ffb8707dbe01e526e2b0 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 01:11:47 +0200 Subject: [PATCH 01/21] Present update info screen above everything else --- submodules/TelegramUI/TelegramUI/ApplicationContext.swift | 2 +- .../TelegramUI/TelegramUI/PresentationSurfaceLevels.swift | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift index c43b065bc2..f9a7928f99 100644 --- a/submodules/TelegramUI/TelegramUI/ApplicationContext.swift +++ b/submodules/TelegramUI/TelegramUI/ApplicationContext.swift @@ -522,7 +522,7 @@ final class AuthorizedApplicationContext { strongSelf.currentAppUpdateInfo = appUpdateInfo if let appUpdateInfo = appUpdateInfo { let controller = updateInfoController(context: strongSelf.context, appUpdateInfo: appUpdateInfo) - (strongSelf.rootController.viewControllers.last as? ViewController)?.present(controller, in: .window(.root)) + strongSelf.mainWindow.present(controller, on: .update) } })) diff --git a/submodules/TelegramUI/TelegramUI/PresentationSurfaceLevels.swift b/submodules/TelegramUI/TelegramUI/PresentationSurfaceLevels.swift index db5665f424..186255ed3e 100644 --- a/submodules/TelegramUI/TelegramUI/PresentationSurfaceLevels.swift +++ b/submodules/TelegramUI/TelegramUI/PresentationSurfaceLevels.swift @@ -7,4 +7,5 @@ public extension PresentationSurfaceLevel { static let overlayMedia = PresentationSurfaceLevel(rawValue: 2) static let notifications = PresentationSurfaceLevel(rawValue: 3) static let passcode = PresentationSurfaceLevel(rawValue: 4) + static let update = PresentationSurfaceLevel(rawValue: 5) } From 6a9cbb8be54cae9c7e8f38cb7041495b978c3dc2 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:38:41 +0200 Subject: [PATCH 02/21] Fixed blocking app update flag --- submodules/TelegramCore/TelegramCore/AppUpdate.swift | 4 ++-- submodules/TelegramUI/TelegramUI/UpdateInfoController.swift | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/submodules/TelegramCore/TelegramCore/AppUpdate.swift b/submodules/TelegramCore/TelegramCore/AppUpdate.swift index cba132e973..0806e9e602 100644 --- a/submodules/TelegramCore/TelegramCore/AppUpdate.swift +++ b/submodules/TelegramCore/TelegramCore/AppUpdate.swift @@ -16,7 +16,7 @@ import Foundation #endif public struct AppUpdateInfo: Equatable { - public let popup: Bool + public let blocking: Bool public let version: String public let text: String public let entities: [MessageTextEntity] @@ -26,7 +26,7 @@ extension AppUpdateInfo { init?(apiAppUpdate: Api.help.AppUpdate) { switch apiAppUpdate { case let .appUpdate(flags, _, version, text, entities, _, _): - self.popup = (flags & (1 << 0)) != 0 + self.blocking = (flags & (1 << 0)) != 0 self.version = version self.text = text self.entities = messageTextEntitiesFromApiEntities(entities) diff --git a/submodules/TelegramUI/TelegramUI/UpdateInfoController.swift b/submodules/TelegramUI/TelegramUI/UpdateInfoController.swift index 02bea114a0..04a1dd054c 100644 --- a/submodules/TelegramUI/TelegramUI/UpdateInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/UpdateInfoController.swift @@ -113,9 +113,9 @@ public func updateInfoController(context: AccountContext, appUpdateInfo: AppUpda appIcon = appIcons.filter { $0.isDefault }.first } - let leftNavigationButton = appUpdateInfo.popup ? ItemListNavigationButton(content: .text(presentationData.strings.Update_Skip), style: .regular, enabled: true, action: { + let leftNavigationButton = appUpdateInfo.blocking ? nil : ItemListNavigationButton(content: .text(presentationData.strings.Update_Skip), style: .regular, enabled: true, action: { dismissImpl?() - }) : nil + }) let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Update_Title), leftNavigationButton: leftNavigationButton, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) let listState = ItemListNodeState(entries: updateInfoControllerEntries(theme: presentationData.theme, strings: presentationData.strings, appIcon: appIcon, appUpdateInfo: appUpdateInfo), style: .blocks, animateChanges: false) From 18b0517ca0eb9bca734598e1a7c8b6cb1f9ae26f Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:39:52 +0200 Subject: [PATCH 03/21] Added Moovit to available Open In options --- Telegram-iOS/Info.plist | 3 +-- .../TelegramUI/TelegramUI/OpenInOptions.swift | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Telegram-iOS/Info.plist b/Telegram-iOS/Info.plist index 1c01c0b648..83072fc8ce 100644 --- a/Telegram-iOS/Info.plist +++ b/Telegram-iOS/Info.plist @@ -228,9 +228,7 @@ LSApplicationQueriesSchemes - dbapi-3 instagram - googledrive comgooglemaps-x-callback foursquare here-location @@ -257,6 +255,7 @@ opera-https firefox-focus ddgQuickLink + moovit LSRequiresIPhoneOS diff --git a/submodules/TelegramUI/TelegramUI/OpenInOptions.swift b/submodules/TelegramUI/TelegramUI/OpenInOptions.swift index 79e0902c47..1a5e612612 100644 --- a/submodules/TelegramUI/TelegramUI/OpenInOptions.swift +++ b/submodules/TelegramUI/TelegramUI/OpenInOptions.swift @@ -192,6 +192,20 @@ private func allOpenInOptions(context: AccountContext, item: OpenInItem) -> [Ope return .openUrl(url: "yandexnavi://build_route_on_map?lat_to=\(lat)&lon_to=\(lon)") })) } + + options.append(OpenInOption(application: .other(title: "Moovit", identifier: 498477945, scheme: "moovit", store: nil), action: { + if withDirections { + let destName: String + if let title = location.venue?.title.addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed), title.count > 0 { + destName = title + } else { + destName = "" + } + return .openUrl(url: "moovit://directions?dest_lat=\(lat)&dest_lon=\(lon)&dest_name=\(destName)&partner_id=Telegram") + } else { + return .openUrl(url: "moovit://nearby?lat=\(lat)&lon=\(lon)&partner_id=Telegram") + } + })) if !withDirections { options.append(OpenInOption(application: .other(title: "HERE Maps", identifier: 955837609, scheme: "here-location", store: nil), action: { From c5cb691f2bf81b81f5e61465846fe85ab71c023f Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:41:06 +0200 Subject: [PATCH 04/21] Fixed GIFs not respecting autoplay preference --- .../TelegramUI/ChatMessageMediaBubbleContentNode.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift index 83d69b04df..9f0b6b80f2 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift @@ -81,13 +81,13 @@ class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode { } if !item.message.containsSecretMedia { - if telegramFile.isAnimated { + if telegramFile.isAnimated && item.controllerInteraction.automaticMediaDownloadSettings.autoplayGifs { if case .full = automaticDownload { - automaticPlayback = item.controllerInteraction.automaticMediaDownloadSettings.autoplayGifs + automaticPlayback = true //item.controllerInteraction.automaticMediaDownloadSettings.autoplayGifs } else { automaticPlayback = item.context.account.postbox.mediaBox.completedResourcePath(telegramFile.resource) != nil } - } else if telegramFile.isVideo && item.controllerInteraction.automaticMediaDownloadSettings.autoplayVideos { + } else if (telegramFile.isVideo && !telegramFile.isAnimated) && item.controllerInteraction.automaticMediaDownloadSettings.autoplayVideos { if case .full = automaticDownload { automaticPlayback = true } else { From 1f84fce32cd62265ad58765a9f5a0788a3d987bd Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:42:38 +0200 Subject: [PATCH 05/21] Fixed trending stickers dot icon size --- .../TelegramUI/TelegramUI/ChatMediaInputTrendingItem.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputTrendingItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputTrendingItem.swift index 21cca6add2..c8fda5be13 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputTrendingItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputTrendingItem.swift @@ -108,14 +108,14 @@ final class ChatMediaInputTrendingItemNode: ListViewItemNode { self.highlightNode.image = PresentationResourcesChat.chatMediaInputPanelHighlightedIconImage(theme) self.imageNode.image = PresentationResourcesChat.chatInputMediaPanelTrendingIconImage(theme) - self.badgeBackground.image = generateFilledCircleImage(diameter: 16.0, color: theme.chat.inputPanel.mediaRecordingDotColor) + self.badgeBackground.image = generateFilledCircleImage(diameter: 10.0, color: theme.chat.inputPanel.mediaRecordingDotColor) let imageSize = CGSize(width: 26.0, height: 26.0) let imageFrame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0) + UIScreenPixel), size: imageSize) self.imageNode.frame = imageFrame if let image = self.badgeBackground.image { - self.badgeBackground.frame = CGRect(origin: CGPoint(x: imageFrame.maxX - image.size.width + 2.0, y: imageFrame.maxY - image.size.width + 3.0), size: image.size) + self.badgeBackground.frame = CGRect(origin: CGPoint(x: imageFrame.maxX - image.size.width - 1.0, y: imageFrame.maxY - image.size.width + 1.0), size: image.size) } } From 01057a495f1bf64818236f4f54e9b45b3ec7abfc Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:44:16 +0200 Subject: [PATCH 06/21] Disable scroll in blocked users & recent sessions screens when there's nothing to show --- submodules/Display/Display/ListView.swift | 6 ++++++ .../TelegramUI/BlockedPeersController.swift | 2 +- .../TelegramUI/ItemListControllerNode.swift | 12 ++++++------ .../TelegramUI/RecentSessionsController.swift | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift index a7772d76cb..202cbbce5a 100644 --- a/submodules/Display/Display/ListView.swift +++ b/submodules/Display/Display/ListView.swift @@ -149,6 +149,12 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture public final var rotated = false public final var experimentalSnapScrollToItem = false + public final var scrollEnabled: Bool = true { + didSet { + self.scroller.isScrollEnabled = self.scrollEnabled + } + } + private final var invisibleInset: CGFloat = 500.0 public var preloadPages: Bool = true { didSet { diff --git a/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift b/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift index 37032904d6..96679afd4d 100644 --- a/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift +++ b/submodules/TelegramUI/TelegramUI/BlockedPeersController.swift @@ -288,7 +288,7 @@ public func blockedPeersController(context: AccountContext, blockedPeersContext: previousState = blockedPeersState let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.BlockedUsers_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: blockedPeersControllerEntries(presentationData: presentationData, state: state, blockedPeersState: blockedPeersState), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: previousStateValue != nil && previousStateValue!.peers.count >= blockedPeersState.peers.count) + let listState = ItemListNodeState(entries: blockedPeersControllerEntries(presentationData: presentationData, state: state, blockedPeersState: blockedPeersState), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: previousStateValue != nil && previousStateValue!.peers.count >= blockedPeersState.peers.count, scrollEnabled: emptyStateItem == nil) return (controllerState, (listState, arguments)) } diff --git a/submodules/TelegramUI/TelegramUI/ItemListControllerNode.swift b/submodules/TelegramUI/TelegramUI/ItemListControllerNode.swift index c24b1601ee..6d0b25e53c 100644 --- a/submodules/TelegramUI/TelegramUI/ItemListControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ItemListControllerNode.swift @@ -56,7 +56,7 @@ private struct ItemListNodeTransition { let animateAlpha: Bool let crossfade: Bool let mergedEntries: [Entry] - let userInteractionEnabled: Bool + let scrollEnabled: Bool } struct ItemListNodeState { @@ -66,12 +66,12 @@ struct ItemListNodeState { let searchItem: ItemListControllerSearch? let animateChanges: Bool let crossfadeState: Bool - let userInteractionEnabled: Bool + let scrollEnabled: Bool let focusItemTag: ItemListItemTag? let ensureVisibleItemTag: ItemListItemTag? let initialScrollToItem: ListViewScrollToItem? - init(entries: [Entry], style: ItemListStyle, focusItemTag: ItemListItemTag? = nil, ensureVisibleItemTag: ItemListItemTag? = nil, emptyStateItem: ItemListControllerEmptyStateItem? = nil, searchItem: ItemListControllerSearch? = nil, initialScrollToItem: ListViewScrollToItem? = nil, crossfadeState: Bool = false, animateChanges: Bool = true, userInteractionEnabled: Bool = true) { + init(entries: [Entry], style: ItemListStyle, focusItemTag: ItemListItemTag? = nil, ensureVisibleItemTag: ItemListItemTag? = nil, emptyStateItem: ItemListControllerEmptyStateItem? = nil, searchItem: ItemListControllerSearch? = nil, initialScrollToItem: ListViewScrollToItem? = nil, crossfadeState: Bool = false, animateChanges: Bool = true, scrollEnabled: Bool = true) { self.entries = entries self.style = style self.emptyStateItem = emptyStateItem @@ -81,7 +81,7 @@ struct ItemListNodeState { self.focusItemTag = focusItemTag self.ensureVisibleItemTag = ensureVisibleItemTag self.initialScrollToItem = initialScrollToItem - self.userInteractionEnabled = userInteractionEnabled + self.scrollEnabled = scrollEnabled } } @@ -275,7 +275,7 @@ class ItemListControllerNode: ASDisplayNode, UIScrollV scrollToItem = state.initialScrollToItem } - return ItemListNodeTransition(theme: theme, entries: transition, updateStyle: updatedStyle, emptyStateItem: state.emptyStateItem, searchItem: state.searchItem, focusItemTag: state.focusItemTag, ensureVisibleItemTag: state.ensureVisibleItemTag, scrollToItem: scrollToItem, firstTime: previous == nil, animated: previous != nil && state.animateChanges, animateAlpha: previous != nil && state.animateChanges, crossfade: state.crossfadeState, mergedEntries: state.entries, userInteractionEnabled: state.userInteractionEnabled) + return ItemListNodeTransition(theme: theme, entries: transition, updateStyle: updatedStyle, emptyStateItem: state.emptyStateItem, searchItem: state.searchItem, focusItemTag: state.focusItemTag, ensureVisibleItemTag: state.ensureVisibleItemTag, scrollToItem: scrollToItem, firstTime: previous == nil, animated: previous != nil && state.animateChanges, animateAlpha: previous != nil && state.animateChanges, crossfade: state.crossfadeState, mergedEntries: state.entries, scrollEnabled: state.scrollEnabled) }) |> deliverOnMainQueue).start(next: { [weak self] transition in if let strongSelf = self { strongSelf.enqueueTransition(transition) @@ -593,7 +593,7 @@ class ItemListControllerNode: ASDisplayNode, UIScrollV self.emptyStateNode = nil } } - self.listNode.isUserInteractionEnabled = transition.userInteractionEnabled + self.listNode.scrollEnabled = transition.scrollEnabled if updateSearchItem { self.requestLayout?(.animated(duration: 0.3, curve: .spring)) diff --git a/submodules/TelegramUI/TelegramUI/RecentSessionsController.swift b/submodules/TelegramUI/TelegramUI/RecentSessionsController.swift index 3a7ab9a5af..05eec2b812 100644 --- a/submodules/TelegramUI/TelegramUI/RecentSessionsController.swift +++ b/submodules/TelegramUI/TelegramUI/RecentSessionsController.swift @@ -634,7 +634,7 @@ public func recentSessionsController(context: AccountContext, activeSessionsCont } let controllerState = ItemListControllerState(theme: presentationData.theme, title: title, leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: entries, style: .blocks, emptyStateItem: emptyStateItem, crossfadeState: crossfadeState, animateChanges: animateChanges, userInteractionEnabled: emptyStateItem == nil) + let listState = ItemListNodeState(entries: entries, style: .blocks, emptyStateItem: emptyStateItem, crossfadeState: crossfadeState, animateChanges: animateChanges, scrollEnabled: emptyStateItem == nil) return (controllerState, (listState, arguments)) } |> afterDisposed { From 29ecd7b8de35ebaec2f369a8be47e608ce398274 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 02:44:24 +0200 Subject: [PATCH 07/21] Cleanup --- .../TelegramUI/ChatMessageMediaBubbleContentNode.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift index 9f0b6b80f2..26e323799d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageMediaBubbleContentNode.swift @@ -83,7 +83,7 @@ class ChatMessageMediaBubbleContentNode: ChatMessageBubbleContentNode { if !item.message.containsSecretMedia { if telegramFile.isAnimated && item.controllerInteraction.automaticMediaDownloadSettings.autoplayGifs { if case .full = automaticDownload { - automaticPlayback = true //item.controllerInteraction.automaticMediaDownloadSettings.autoplayGifs + automaticPlayback = true } else { automaticPlayback = item.context.account.postbox.mediaBox.completedResourcePath(telegramFile.resource) != nil } From de0432d66a51b5bb087f7744fa1c3af810029fa1 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 17:29:07 +0200 Subject: [PATCH 08/21] Always open chat screen for t.me/username links --- submodules/TelegramUI/TelegramUI/UrlHandling.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/TelegramUI/TelegramUI/UrlHandling.swift b/submodules/TelegramUI/TelegramUI/UrlHandling.swift index 6647bf66ad..2523b28853 100644 --- a/submodules/TelegramUI/TelegramUI/UrlHandling.swift +++ b/submodules/TelegramUI/TelegramUI/UrlHandling.swift @@ -270,7 +270,7 @@ private func resolveInternalUrl(account: Account, url: ParsedInternalUrl) -> Sig } } else { if let peer = peer as? TelegramUser, peer.botInfo == nil { - return .peer(peer.id, .info) + return .peer(peer.id, .chat(textInputState: nil, messageId: nil)) } else { return .peer(peer.id, .chat(textInputState: nil, messageId: nil)) } From c0d2c663efe7b42bbc23cbb770204e6353c25452 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 11 Jul 2019 17:29:50 +0200 Subject: [PATCH 09/21] Fixed message editing key shortcut --- .../TelegramUI/ChatController.swift | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index edb362e90b..e054968c29 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -6843,23 +6843,22 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, } }) ] - - if let message = self.chatDisplayNode.historyNode.latestMessageInCurrentHistoryView(), !message.flags.contains(.Incoming) { - inputShortcuts.append(KeyShortcut(input: UIKeyInputUpArrow, action: { [weak self] in - if let strongSelf = self { - var canEdit = false - strongSelf.updateChatPresentationInterfaceState(animated: true, interactive: true, { state in - if state.interfaceState.effectiveInputState.inputText.length == 0 && state.interfaceState.editMessage == nil { - canEdit = true - } - return state - }) - if canEdit { - strongSelf.interfaceInteraction?.setupEditMessage(message.id) - } - } - })) + } + + var canEdit = false + self.updateChatPresentationInterfaceState(animated: false, interactive: false, { state in + if state.interfaceState.effectiveInputState.inputText.length == 0 && state.interfaceState.editMessage == nil { + canEdit = true } + return state + }) + + if canEdit, let message = self.chatDisplayNode.historyNode.firstMessageForEditInCurrentHistoryView() { + inputShortcuts.append(KeyShortcut(input: UIKeyInputUpArrow, action: { [weak self] in + if let strongSelf = self { + strongSelf.interfaceInteraction?.setupEditMessage(message.id) + } + })) } let otherShortcuts: [KeyShortcut] = [ From a94cce354b12b53746798947691048818f79fb58 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Sun, 14 Jul 2019 04:31:11 +0200 Subject: [PATCH 10/21] Fixed biometric unlock --- submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift b/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift index b656248e44..dcf47391ba 100644 --- a/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift +++ b/submodules/TelegramUI/TelegramUI/PasscodeEntryController.swift @@ -160,7 +160,7 @@ final public class PasscodeEntryController: ViewController { }).start() } - let isMainApp = !strongSelf.context.sharedContext.applicationBindings.isMainApp + let isMainApp = strongSelf.context.sharedContext.applicationBindings.isMainApp let _ = updatePresentationPasscodeSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager, { settings in if isMainApp { return settings.withUpdatedBiometricsDomainState(LocalAuth.evaluatedPolicyDomainState) From 0144957e828f511f433089f6ae91da7dc9d27f77 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 15 Jul 2019 18:12:44 +0200 Subject: [PATCH 11/21] Added support for thumbnails in standalone media file upload --- .../TelegramCore/EnqueueMessage.swift | 7 +- .../PendingMessageUploadedContent.swift | 20 +- .../StandaloneUploadedMedia.swift | 179 ++++++++++++------ 3 files changed, 133 insertions(+), 73 deletions(-) diff --git a/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift b/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift index f1725a95b1..45ede2460d 100644 --- a/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift +++ b/submodules/TelegramCore/TelegramCore/EnqueueMessage.swift @@ -42,7 +42,7 @@ func augmentMediaWithReference(_ mediaReference: AnyMediaReference) -> Media { if file.partialReference != nil { return file } else { - return file.withUpdatedPartialReference(mediaReference.partial) + return file.withUpdatedPartialReference(mediaReference.partial) } } else if let image = mediaReference.media as? TelegramMediaImage { if image.partialReference != nil { @@ -367,7 +367,7 @@ func enqueueMessages(transaction: Transaction, account: Account, peerId: PeerId, } let authorId: PeerId? - if let peer = peer as? TelegramChannel, case let .broadcast(info) = peer.info { + if let peer = peer as? TelegramChannel, case .broadcast = peer.info { authorId = peer.id } else { authorId = account.peerId @@ -388,12 +388,9 @@ func enqueueMessages(transaction: Transaction, account: Account, peerId: PeerId, if let sourceMessage = sourceMessage, let author = sourceMessage.author ?? sourceMessage.peers[sourceMessage.id.peerId] { if let peer = peer as? TelegramSecretChat { var isAction = false - var mediaDuration: Int32? for media in sourceMessage.media { if let _ = media as? TelegramMediaAction { isAction = true - } else if let file = media as? TelegramMediaFile, let duration = file.duration { - mediaDuration = duration } } if !disableAutoremove, let messageAutoremoveTimeout = peer.messageAutoremoveTimeout, !isAction { diff --git a/submodules/TelegramCore/TelegramCore/PendingMessageUploadedContent.swift b/submodules/TelegramCore/TelegramCore/PendingMessageUploadedContent.swift index c48005d56e..c2df28501e 100644 --- a/submodules/TelegramCore/TelegramCore/PendingMessageUploadedContent.swift +++ b/submodules/TelegramCore/TelegramCore/PendingMessageUploadedContent.swift @@ -476,17 +476,17 @@ private enum UploadedMediaFileAndThumbnail { private func uploadedThumbnail(network: Network, postbox: Postbox, resourceReference: MediaResourceReference) -> Signal { return multipartUpload(network: network, postbox: postbox, source: .resource(resourceReference), encrypt: false, tag: TelegramMediaResourceFetchTag(statsCategory: .image), hintFileSize: nil, hintFileIsLarge: false) - |> mapError { _ -> PendingMessageUploadError in return .generic } - |> mapToSignal { result -> Signal in - switch result { - case .progress: - return .complete() - case let .inputFile(inputFile): - return .single(inputFile) - case .inputSecretFile: - return .single(nil) - } + |> mapError { _ -> PendingMessageUploadError in return .generic } + |> mapToSignal { result -> Signal in + switch result { + case .progress: + return .complete() + case let .inputFile(inputFile): + return .single(inputFile) + case .inputSecretFile: + return .single(nil) } + } } public func statsCategoryForFileWithAttributes(_ attributes: [TelegramMediaFileAttribute]) -> MediaResourceStatsCategory { diff --git a/submodules/TelegramCore/TelegramCore/StandaloneUploadedMedia.swift b/submodules/TelegramCore/TelegramCore/StandaloneUploadedMedia.swift index 5b593a5645..955271f97e 100644 --- a/submodules/TelegramCore/TelegramCore/StandaloneUploadedMedia.swift +++ b/submodules/TelegramCore/TelegramCore/StandaloneUploadedMedia.swift @@ -21,6 +21,20 @@ public struct StandaloneUploadSecretFile { let key: SecretFileEncryptionKey } +public enum StandaloneUploadMediaThumbnailResult { + case pending + case file(Api.InputFile) + case none + + var file: Api.InputFile? { + if case let .file(file) = self { + return file + } else { + return nil + } + } +} + public enum StandaloneUploadMediaResult { case media(AnyMediaReference) } @@ -30,7 +44,22 @@ public enum StandaloneUploadMediaEvent { case result(StandaloneUploadMediaResult) } -public func standaloneUploadedImage(account: Account, peerId: PeerId, text: String, data: Data, dimensions: CGSize) -> Signal { +private func uploadedThumbnail(network: Network, postbox: Postbox, data: Data) -> Signal { + return multipartUpload(network: network, postbox: postbox, source: .data(data), encrypt: false, tag: TelegramMediaResourceFetchTag(statsCategory: .image), hintFileSize: nil, hintFileIsLarge: false) + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + |> mapToSignal { result -> Signal in + switch result { + case .progress: + return .complete() + case let .inputFile(inputFile): + return .single(inputFile) + case .inputSecretFile: + return .single(nil) + } + } +} + +public func standaloneUploadedImage(account: Account, peerId: PeerId, text: String, data: Data, thumbnailData: Data? = nil, dimensions: CGSize) -> 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 @@ -91,65 +120,99 @@ public func standaloneUploadedImage(account: Account, peerId: PeerId, text: Stri } } -public func standaloneUploadedFile(account: Account, peerId: PeerId, text: String, source: MultipartUploadSource, mimeType: String, attributes: [TelegramMediaFileAttribute], hintFileIsLarge: Bool) -> Signal { - return multipartUpload(network: account.network, postbox: account.postbox, source: source, encrypt: peerId.namespace == Namespaces.Peer.SecretChat, tag: TelegramMediaResourceFetchTag(statsCategory: statsCategoryForFileWithAttributes(attributes)), hintFileSize: nil, hintFileIsLarge: hintFileIsLarge) - |> mapError { _ -> StandaloneUploadMediaError in return .generic } - |> mapToSignal { next -> Signal in - switch next { - case let .inputFile(inputFile): - return account.postbox.transaction { transaction -> Api.InputPeer? in - return transaction.getPeer(peerId).flatMap(apiInputPeer) - } - |> mapError { _ -> StandaloneUploadMediaError in return .generic } - |> mapToSignal { inputPeer -> Signal in - if let inputPeer = inputPeer { - return account.network.request(Api.functions.messages.uploadMedia(peer: inputPeer, media: Api.InputMedia.inputMediaUploadedDocument(flags: 0, file: inputFile, thumb: nil, mimeType: mimeType, attributes: inputDocumentAttributesFromFileAttributes(attributes), stickers: nil, ttlSeconds: nil))) - |> mapError { _ -> StandaloneUploadMediaError in return .generic } - |> mapToSignal { media -> Signal in - switch media { - case let .messageMediaDocument(_, document, _): - if let document = document { - if let mediaFile = telegramMediaFileFromApiDocument(document) { - return .single(.result(.media(.standalone(media: mediaFile)))) - } - } - default: - break - } - return .fail(.generic) - } - } else { - return .fail(.generic) - } - } - case let .inputSecretFile(file, size, key): - return account.postbox.transaction { transaction -> Api.InputEncryptedChat? in - if let peer = transaction.getPeer(peerId) as? TelegramSecretChat { - return Api.InputEncryptedChat.inputEncryptedChat(chatId: peer.id.id, accessHash: peer.accessHash) - } - return nil - } - |> introduceError(StandaloneUploadMediaError.self) - |> mapToSignal { inputChat -> Signal in - guard let inputChat = inputChat else { - return .fail(.generic) - } - return account.network.request(Api.functions.messages.uploadEncryptedFile(peer: inputChat, file: file)) - |> mapError { _ -> StandaloneUploadMediaError in return .generic - } - |> mapToSignal { result -> Signal in - switch result { - case let .encryptedFile(id, accessHash, size, dcId, _): - let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: arc4random64()), partialReference: nil, resource: SecretFileMediaResource(fileId: id, accessHash: accessHash, containerSize: size, decryptedSize: size, datacenterId: Int(dcId), key: key), previewRepresentations: [], immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: attributes) - - return .single(.result(.media(.standalone(media: media)))) - case .encryptedFileEmpty: - return .fail(.generic) - } - } +public func standaloneUploadedFile(account: Account, peerId: PeerId, text: String, source: MultipartUploadSource, thumbnailData: Data? = nil, mimeType: String, attributes: [TelegramMediaFileAttribute], hintFileIsLarge: Bool) -> Signal { + let upload = multipartUpload(network: account.network, postbox: account.postbox, source: source, encrypt: peerId.namespace == Namespaces.Peer.SecretChat, tag: TelegramMediaResourceFetchTag(statsCategory: statsCategoryForFileWithAttributes(attributes)), hintFileSize: nil, hintFileIsLarge: hintFileIsLarge) + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + + let uploadThumbnail: Signal + if let thumbnailData = thumbnailData { + uploadThumbnail = .single(.pending) + |> then( + uploadedThumbnail(network: account.network, postbox: account.postbox, data: thumbnailData) + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + |> map { result in + if let result = result { + return .file(result) + } else { + return .none } + } + ) + } else { + uploadThumbnail = .single(.none) + } + + return combineLatest(upload, uploadThumbnail) + |> mapToSignal { result, thumbnail in + switch result { case let .progress(progress): return .single(.progress(progress)) - } + default: + switch thumbnail { + case .pending: + return .complete() + default: + switch result { + case let .inputFile(inputFile): + return account.postbox.transaction { transaction -> Api.InputPeer? in + return transaction.getPeer(peerId).flatMap(apiInputPeer) + } + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + |> mapToSignal { inputPeer -> Signal in + if let inputPeer = inputPeer { + var flags: Int32 = 0 + let thumbnailFile = thumbnail.file + if let _ = thumbnailFile { + flags |= 1 << 2 + } + return account.network.request(Api.functions.messages.uploadMedia(peer: inputPeer, media: Api.InputMedia.inputMediaUploadedDocument(flags: flags, file: inputFile, thumb: thumbnailFile, mimeType: mimeType, attributes: inputDocumentAttributesFromFileAttributes(attributes), stickers: nil, ttlSeconds: nil))) + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + |> mapToSignal { media -> Signal in + switch media { + case let .messageMediaDocument(_, document, _): + if let document = document { + if let mediaFile = telegramMediaFileFromApiDocument(document) { + return .single(.result(.media(.standalone(media: mediaFile)))) + } + } + default: + break + } + return .fail(.generic) + } + } else { + return .fail(.generic) + } + } + case let .inputSecretFile(file, _, key): + return account.postbox.transaction { transaction -> Api.InputEncryptedChat? in + if let peer = transaction.getPeer(peerId) as? TelegramSecretChat { + return Api.InputEncryptedChat.inputEncryptedChat(chatId: peer.id.id, accessHash: peer.accessHash) + } + return nil + } + |> introduceError(StandaloneUploadMediaError.self) + |> mapToSignal { inputChat -> Signal in + guard let inputChat = inputChat else { + return .fail(.generic) + } + return account.network.request(Api.functions.messages.uploadEncryptedFile(peer: inputChat, file: file)) + |> mapError { _ -> StandaloneUploadMediaError in return .generic } + |> mapToSignal { result -> Signal in + switch result { + case let .encryptedFile(id, accessHash, size, dcId, _): + let media = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: arc4random64()), partialReference: nil, resource: SecretFileMediaResource(fileId: id, accessHash: accessHash, containerSize: size, decryptedSize: size, datacenterId: Int(dcId), key: key), previewRepresentations: [], immediateThumbnailData: nil, mimeType: mimeType, size: Int(size), attributes: attributes) + + return .single(.result(.media(.standalone(media: media)))) + case .encryptedFileEmpty: + return .fail(.generic) + } + } + } + case .progress: + return .never() + } + } + } } } From 1293d565d0eded07b14cfec69d47fc041aa4eedb Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 15 Jul 2019 18:13:44 +0200 Subject: [PATCH 12/21] Generate thumbnails for PDFs sent via share extension --- .../TelegramUI/ICloudResources.swift | 2 +- submodules/TelegramUI/TelegramUI/PDF.swift | 8 ++- .../TelegramUI/ShareExtensionContext.swift | 56 +++++++++---------- .../TelegramUI/TelegramUI/ShareItems.swift | 7 ++- .../TelegramUI/TGItemProviderSignals.m | 3 +- 5 files changed, 42 insertions(+), 34 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ICloudResources.swift b/submodules/TelegramUI/TelegramUI/ICloudResources.swift index c69e5891a4..b9553f4e4c 100644 --- a/submodules/TelegramUI/TelegramUI/ICloudResources.swift +++ b/submodules/TelegramUI/TelegramUI/ICloudResources.swift @@ -209,7 +209,7 @@ func fetchICloudFileResource(resource: ICloudFileResource) -> Signal UIImage? { - guard let document = CGPDFDocument(url as CFURL) else { return nil } + guard let data = try? Data(contentsOf: url, options: .mappedIfSafe) else { return nil } + return generatePdfPreviewImage(data: data, size: size) +} + +func generatePdfPreviewImage(data: Data, size: CGSize) -> UIImage? { + guard let provider = CGDataProvider(data: data as CFData) else { return nil } + guard let document = CGPDFDocument(provider) else { return nil } guard let firstPage = document.page(at: 1) else { return nil } let context = DrawingContext(size: size) diff --git a/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift b/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift index 3d57e67baa..6ed084b7dc 100644 --- a/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift +++ b/submodules/TelegramUI/TelegramUI/ShareExtensionContext.swift @@ -222,27 +222,25 @@ public class ShareRootControllerImpl { let requestUserInteraction: ([UnpreparedShareItemContent]) -> Signal<[PreparedShareItemContent], NoError> = { content in return Signal { [weak self] subscriber in switch content[0] { - case let .contact(data): - let controller = deviceContactInfoController(context: context, subject: .filter(peer: nil, contactId: nil, contactData: data, completion: { peer, contactData in - let phone = contactData.basicData.phoneNumbers[0].value - if let vCardData = contactData.serializedVCard() { - subscriber.putNext([.media(.media(.standalone(media: TelegramMediaContact(firstName: contactData.basicData.firstName, lastName: contactData.basicData.lastName, phoneNumber: phone, peerId: nil, vCardData: vCardData))))]) + case let .contact(data): + let controller = deviceContactInfoController(context: context, subject: .filter(peer: nil, contactId: nil, contactData: data, completion: { peer, contactData in + let phone = contactData.basicData.phoneNumbers[0].value + if let vCardData = contactData.serializedVCard() { + subscriber.putNext([.media(.media(.standalone(media: TelegramMediaContact(firstName: contactData.basicData.firstName, lastName: contactData.basicData.lastName, phoneNumber: phone, peerId: nil, vCardData: vCardData))))]) + } + subscriber.putCompletion() + }), cancelled: { + cancelImpl?() + }) + + if let strongSelf = self, let window = strongSelf.mainWindow { + controller.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) + window.present(controller, on: .root) } - subscriber.putCompletion() - }), cancelled: { - cancelImpl?() - }) - - if let strongSelf = self, let window = strongSelf.mainWindow { - controller.presentationArguments = ViewControllerPresentationArguments(presentationAnimation: .modalSheet) - window.present(controller, on: .root) - } - break + break } - - return ActionDisposable { - } - } |> runOn(Queue.mainQueue()) + return EmptyDisposable + } |> runOn(Queue.mainQueue()) } let sentItems: ([PeerId], [PreparedShareItemContent], Account) -> Signal = { peerIds, contents, account in @@ -271,17 +269,17 @@ public class ShareRootControllerImpl { return .single(.done) } switch state { - case .preparing: - return .single(.preparing) - case let .progress(value): - return .single(.progress(value)) - case let .userInteractionRequired(value): - return requestUserInteraction(value) + case .preparing: + return .single(.preparing) + case let .progress(value): + return .single(.progress(value)) + case let .userInteractionRequired(value): + return requestUserInteraction(value) |> mapToSignal { contents -> Signal in return sentItems(peerIds, contents, account) - } - case let .done(contents): - return sentItems(peerIds, contents, account) + } + case let .done(contents): + return sentItems(peerIds, contents, account) } } } else { @@ -338,7 +336,7 @@ public class ShareRootControllerImpl { self?.getExtensionContext()?.completeRequest(returningItems: nil, completionHandler: nil) })]) strongSelf.mainWindow?.present(controller, on: .root) - }, completed: {})) + }, completed: {})) } } } diff --git a/submodules/TelegramUI/TelegramUI/ShareItems.swift b/submodules/TelegramUI/TelegramUI/ShareItems.swift index 7879f80f0c..da2c87cf6f 100644 --- a/submodules/TelegramUI/TelegramUI/ShareItems.swift +++ b/submodules/TelegramUI/TelegramUI/ShareItems.swift @@ -178,7 +178,12 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri } } } else { - return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(data), mimeType: mimeType, attributes: [.FileName(fileName: fileName ?? "file")], hintFileIsLarge: data.count > 5 * 1024 * 1024) + var thumbnailData: Data? + if mimeType == "application/pdf", let image = generatePdfPreviewImage(data: data, size: CGSize(width: 256.0, height: 256.0)), let jpegData = UIImageJPEGRepresentation(image, 0.5) { + thumbnailData = jpegData + } + + return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(data), thumbnailData: thumbnailData, mimeType: mimeType, attributes: [.FileName(fileName: fileName ?? "file")], hintFileIsLarge: data.count > 5 * 1024 * 1024) |> mapError { _ -> Void in return Void() } |> mapToSignal { event -> Signal in switch event { diff --git a/submodules/TelegramUI/TelegramUI/TGItemProviderSignals.m b/submodules/TelegramUI/TelegramUI/TGItemProviderSignals.m index 5901b34885..c3aa6b2d96 100644 --- a/submodules/TelegramUI/TelegramUI/TGItemProviderSignals.m +++ b/submodules/TelegramUI/TelegramUI/TGItemProviderSignals.m @@ -553,7 +553,7 @@ static void set_bits(uint8_t *bytes, int32_t bitOffset, int32_t numBits, int32_t // add output reader to reader [iPodAssetReader addOutput: readerOutput]; - if (! [iPodAssetReader startReading]) { + if (![iPodAssetReader startReading]) { NSLog(@"Unable to start reading!"); return nil; } @@ -563,7 +563,6 @@ static void set_bits(uint8_t *bytes, int32_t bitOffset, int32_t numBits, int32_t int _waveformPeakCount = 0; while (iPodAssetReader.status == AVAssetReaderStatusReading) { - // Check if the available buffer space is enough to hold at least one cycle of the sample data CMSampleBufferRef nextBuffer = [readerOutput copyNextSampleBuffer]; if (nextBuffer) { From 6ff5c91fa3d08274efe253b7ef0fe5b494131e65 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 15 Jul 2019 18:14:24 +0200 Subject: [PATCH 13/21] libtgvoip: disable packet reassembler initialization --- submodules/libtgvoip/VoIPController.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/submodules/libtgvoip/VoIPController.cpp b/submodules/libtgvoip/VoIPController.cpp index 66fb80e421..407cec4904 100755 --- a/submodules/libtgvoip/VoIPController.cpp +++ b/submodules/libtgvoip/VoIPController.cpp @@ -2388,10 +2388,10 @@ simpleAudioBlock random_id:long random_bytes:string raw_data:string = DecryptedA stm->jitterBuffer->SetMinPacketCount((uint32_t) ServerConfig::GetSharedInstance()->GetInt("jitter_initial_delay_20", 6)); stm->decoder=NULL; }else if(stm->type==STREAM_TYPE_VIDEO){ - if(!stm->packetReassembler){ - stm->packetReassembler=make_shared(); - stm->packetReassembler->SetCallback(bind(&VoIPController::ProcessIncomingVideoFrame, this, placeholders::_1, placeholders::_2, placeholders::_3)); - } +// if(!stm->packetReassembler){ +// stm->packetReassembler=make_shared(); +// stm->packetReassembler->SetCallback(bind(&VoIPController::ProcessIncomingVideoFrame, this, placeholders::_1, placeholders::_2, placeholders::_3)); +// } }else{ LOGW("Unknown incoming stream type: %d", stm->type); continue; From 0197abb08277584a377e0c47434357d10b92a158 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 15 Jul 2019 18:17:50 +0200 Subject: [PATCH 14/21] Added option to disable animated stickers looped playback across all the app --- .../ArchivedStickerPacksController.swift | 35 +++-- .../TelegramUI/ChatController.swift | 26 +++- .../ChatControllerInteraction.swift | 22 ++- .../TelegramUI/ChatControllerNode.swift | 8 + .../ChatMediaInputStickerGridItem.swift | 20 +-- .../ChatMediaInputStickerPackItem.swift | 50 +++---- .../ChatMessageAnimatedStickerItemNode.swift | 48 +++--- .../ChatMessageBubbleItemNode.swift | 1 - .../TelegramUI/ChatMessageItemView.swift | 3 + .../FeaturedStickerPacksController.swift | 37 +++-- .../GroupStickerPackSetupController.swift | 139 ++++++++++-------- .../InstalledStickerPacksController.swift | 105 ++++++++----- .../TelegramUI/ItemListStickerPackItem.swift | 8 +- .../OverlayPlayerControllerNode.swift | 2 +- .../PeerMediaCollectionController.swift | 2 +- .../StickerPackPreviewController.swift | 24 +-- .../StickerPackPreviewControllerNode.swift | 22 +-- .../StickerPackPreviewGridItem.swift | 32 +--- .../Sources/MediaAutoDownloadSettings.swift | 16 +- .../Sources/StickerSettings.swift | 16 +- 20 files changed, 361 insertions(+), 255 deletions(-) diff --git a/submodules/TelegramUI/TelegramUI/ArchivedStickerPacksController.swift b/submodules/TelegramUI/TelegramUI/ArchivedStickerPacksController.swift index c35840f84b..8f4d08b52c 100644 --- a/submodules/TelegramUI/TelegramUI/ArchivedStickerPacksController.swift +++ b/submodules/TelegramUI/TelegramUI/ArchivedStickerPacksController.swift @@ -5,6 +5,7 @@ import SwiftSignalKit import Postbox import TelegramCore import TelegramPresentationData +import TelegramUIPreferences public enum ArchivedStickerPacksControllerMode { case stickers @@ -65,7 +66,7 @@ private enum ArchivedStickerPacksEntryId: Hashable { private enum ArchivedStickerPacksEntry: ItemListNodeEntry { case info(PresentationTheme, String) - case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool, ItemListStickerPackItemEditing) + case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool, Bool, ItemListStickerPackItemEditing) var section: ItemListSectionId { switch self { @@ -78,7 +79,7 @@ private enum ArchivedStickerPacksEntry: ItemListNodeEntry { switch self { case .info: return .index(0) - case let .pack(_, _, _, info, _, _, _, _): + case let .pack(_, _, _, info, _, _, _, _, _): return .pack(info.id) } } @@ -91,8 +92,8 @@ private enum ArchivedStickerPacksEntry: ItemListNodeEntry { } else { return false } - case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsEnabled, lhsEditing): - if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsEnabled, rhsEditing) = rhs { + case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsPlayAnimatedStickers, lhsEnabled, lhsEditing): + if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsPlayAnimatedStickers, rhsEnabled, rhsEditing) = rhs { if lhsIndex != rhsIndex { return false } @@ -111,6 +112,9 @@ private enum ArchivedStickerPacksEntry: ItemListNodeEntry { if lhsCount != rhsCount { return false } + if lhsPlayAnimatedStickers != rhsPlayAnimatedStickers { + return false + } if lhsEnabled != rhsEnabled { return false } @@ -133,9 +137,9 @@ private enum ArchivedStickerPacksEntry: ItemListNodeEntry { default: return true } - case let .pack(lhsIndex, _, _, _, _, _, _, _): + case let .pack(lhsIndex, _, _, _, _, _, _, _, _): switch rhs { - case let .pack(rhsIndex, _, _, _, _, _, _, _): + case let .pack(rhsIndex, _, _, _, _, _, _, _, _): return lhsIndex < rhsIndex default: return false @@ -147,8 +151,8 @@ private enum ArchivedStickerPacksEntry: ItemListNodeEntry { switch self { case let .info(theme, text): return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) - case let .pack(_, theme, strings, info, topItem, count, enabled, editing): - return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: .installation(installed: false), editing: editing, enabled: enabled, sectionId: self.section, action: { + case let .pack(_, theme, strings, info, topItem, count, animatedStickers, enabled, editing): + return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: .installation(installed: false), editing: editing, enabled: enabled, playAnimatedStickers: animatedStickers, sectionId: self.section, action: { arguments.openStickerPack(info) }, setPackIdWithRevealedOptions: { current, previous in arguments.setPackIdWithRevealedOptions(current, previous) @@ -205,7 +209,7 @@ private struct ArchivedStickerPacksControllerState: Equatable { } } -private func archivedStickerPacksControllerEntries(presentationData: PresentationData, state: ArchivedStickerPacksControllerState, packs: [ArchivedStickerPackItem]?, installedView: CombinedView) -> [ArchivedStickerPacksEntry] { +private func archivedStickerPacksControllerEntries(presentationData: PresentationData, state: ArchivedStickerPacksControllerState, packs: [ArchivedStickerPackItem]?, installedView: CombinedView, stickerSettings: StickerSettings) -> [ArchivedStickerPacksEntry] { var entries: [ArchivedStickerPacksEntry] = [] if let packs = packs { @@ -219,7 +223,7 @@ private func archivedStickerPacksControllerEntries(presentationData: Presentatio var index: Int32 = 0 for item in packs { if !installedIds.contains(item.info.id) { - entries.append(.pack(index, presentationData.theme, presentationData.strings, item.info, item.topItems.first, presentationData.strings.StickerPack_StickerCount(item.info.count), !state.removingPackIds.contains(item.info.id), ItemListStickerPackItemEditing(editable: true, editing: state.editing, revealed: state.packIdWithRevealedOptions == item.info.id, reorderable: false))) + entries.append(.pack(index, presentationData.theme, presentationData.strings, item.info, item.topItems.first, presentationData.strings.StickerPack_StickerCount(item.info.count), stickerSettings.loopAnimatedStickers, !state.removingPackIds.contains(item.info.id), ItemListStickerPackItemEditing(editable: true, editing: state.editing, revealed: state.packIdWithRevealedOptions == item.info.id, reorderable: false))) index += 1 } } @@ -369,9 +373,14 @@ public func archivedStickerPacksController(context: AccountContext, mode: Archiv var previousPackCount: Int? - let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, installedStickerPacks.get() |> deliverOnMainQueue) + let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, installedStickerPacks.get() |> deliverOnMainQueue, context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> deliverOnMainQueue) |> deliverOnMainQueue - |> map { presentationData, state, packs, installedView -> (ItemListControllerState, (ItemListNodeState, ArchivedStickerPacksEntry.ItemGenerationArguments)) in + |> map { presentationData, state, packs, installedView, sharedData -> (ItemListControllerState, (ItemListNodeState, ArchivedStickerPacksEntry.ItemGenerationArguments)) in + var stickerSettings = StickerSettings.defaultSettings + if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { + stickerSettings = value + } + var rightNavigationButton: ItemListNavigationButton? if let packs = packs, packs.count != 0 { if state.editing { @@ -399,7 +408,7 @@ public func archivedStickerPacksController(context: AccountContext, mode: Archiv let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.StickerPacksSettings_ArchivedPacks), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: archivedStickerPacksControllerEntries(presentationData: presentationData, state: state, packs: packs, installedView: installedView), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: previous != nil && packs != nil && (previous! != 0 && previous! >= packs!.count - 10)) + let listState = ItemListNodeState(entries: archivedStickerPacksControllerEntries(presentationData: presentationData, state: state, packs: packs, installedView: installedView, stickerSettings: stickerSettings), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: previous != nil && packs != nil && (previous! != 0 && previous! >= packs!.count - 10)) return (controllerState, (listState, arguments)) } |> afterDisposed { actionsDisposable.dispose() diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index e054968c29..5fbedb19f0 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -208,6 +208,9 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, private var automaticMediaDownloadSettings: MediaAutoDownloadSettings private var automaticMediaDownloadSettingsDisposable: Disposable? + private var stickerSettings: ChatInterfaceStickerSettings + private var stickerSettingsDisposable: Disposable? + private var applicationInForegroundDisposable: Disposable? private var checkedPeerChatServiceActions = false @@ -264,6 +267,8 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, self.presentationData = context.sharedContext.currentPresentationData.with { $0 } self.automaticMediaDownloadSettings = context.sharedContext.currentAutomaticMediaDownloadSettings.with { $0 } + self.stickerSettings = ChatInterfaceStickerSettings(loopAnimatedStickers: false) + self.presentationInterfaceState = ChatPresentationInterfaceState(chatWallpaper: self.presentationData.chatWallpaper, theme: self.presentationData.theme, strings: self.presentationData.strings, dateTimeFormat: self.presentationData.dateTimeFormat, nameDisplayOrder: self.presentationData.nameDisplayOrder, limitsConfiguration: context.currentLimitsConfiguration.with { $0 }, fontSize: self.presentationData.fontSize, accountPeerId: context.account.peerId, mode: mode, chatLocation: chatLocation) var mediaAccessoryPanelVisibility = MediaAccessoryPanelVisibility.none @@ -1378,8 +1383,7 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, }, cancelInteractiveKeyboardGestures: { [weak self] in (self?.view.window as? WindowHost)?.cancelInteractiveKeyboardGestures() self?.chatDisplayNode.cancelInteractiveKeyboardGestures() - }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, - pollActionState: ChatInterfacePollActionState()) + }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: self.stickerSettings) self.controllerInteraction = controllerInteraction @@ -1884,6 +1888,24 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, } }) + self.stickerSettingsDisposable = (context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) + |> deliverOnMainQueue).start(next: { [weak self] sharedData in + var stickerSettings = StickerSettings.defaultSettings + if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { + stickerSettings = value + } + + let chatStickerSettings = ChatInterfaceStickerSettings(stickerSettings: stickerSettings) + + if let strongSelf = self, strongSelf.stickerSettings != chatStickerSettings { + strongSelf.stickerSettings = chatStickerSettings + strongSelf.controllerInteraction?.stickerSettings = chatStickerSettings + if strongSelf.isNodeLoaded { + strongSelf.chatDisplayNode.updateStickerSettings(chatStickerSettings) + } + } + }) + self.applicationInForegroundDisposable = (context.sharedContext.applicationBindings.applicationInForeground |> distinctUntilChanged |> deliverOn(Queue.mainQueue())).start(next: { [weak self] value in diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift index 8c522afb15..90e26ecfd3 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerInteraction.swift @@ -31,6 +31,22 @@ struct ChatInterfaceHighlightedState: Equatable { } } +struct ChatInterfaceStickerSettings: Equatable { + let loopAnimatedStickers: Bool + + public init(loopAnimatedStickers: Bool) { + self.loopAnimatedStickers = loopAnimatedStickers + } + + public init(stickerSettings: StickerSettings) { + self.loopAnimatedStickers = stickerSettings.loopAnimatedStickers + } + + static func ==(lhs: ChatInterfaceStickerSettings, rhs: ChatInterfaceStickerSettings) -> Bool { + return lhs.loopAnimatedStickers == rhs.loopAnimatedStickers + } +} + public enum ChatControllerInteractionLongTapAction { case url(String) case mention(String) @@ -104,9 +120,10 @@ public final class ChatControllerInteraction { var contextHighlightedState: ChatInterfaceHighlightedState? var automaticMediaDownloadSettings: MediaAutoDownloadSettings var pollActionState: ChatInterfacePollActionState + var stickerSettings: ChatInterfaceStickerSettings var searchTextHighightState: String? - init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState) { + init(openMessage: @escaping (Message, ChatControllerInteractionOpenMessageMode) -> Bool, openPeer: @escaping (PeerId?, ChatControllerInteractionNavigateToPeer, Message?) -> Void, openPeerMention: @escaping (String) -> Void, openMessageContextMenu: @escaping (Message, Bool, ASDisplayNode, CGRect) -> Void, navigateToMessage: @escaping (MessageId, MessageId) -> Void, clickThroughMessage: @escaping () -> Void, toggleMessagesSelection: @escaping ([MessageId], Bool) -> Void, sendMessage: @escaping (String) -> Void, sendSticker: @escaping (FileMediaReference, Bool) -> Void, sendGif: @escaping (FileMediaReference) -> Void, requestMessageActionCallback: @escaping (MessageId, MemoryBuffer?, Bool) -> Void, requestMessageActionUrlAuth: @escaping (String, MessageId, Int32) -> Void, activateSwitchInline: @escaping (PeerId?, String) -> Void, openUrl: @escaping (String, Bool, Bool?) -> Void, shareCurrentLocation: @escaping () -> Void, shareAccountContact: @escaping () -> Void, sendBotCommand: @escaping (MessageId?, String) -> Void, openInstantPage: @escaping (Message, ChatMessageItemAssociatedData?) -> Void, openWallpaper: @escaping (Message) -> Void, openHashtag: @escaping (String?, String) -> Void, updateInputState: @escaping ((ChatTextInputState) -> ChatTextInputState) -> Void, updateInputMode: @escaping ((ChatInputMode) -> ChatInputMode) -> Void, openMessageShareMenu: @escaping (MessageId) -> Void, presentController: @escaping (ViewController, Any?) -> Void, navigationController: @escaping () -> NavigationController?, presentGlobalOverlayController: @escaping (ViewController, Any?) -> Void, callPeer: @escaping (PeerId) -> Void, longTap: @escaping (ChatControllerInteractionLongTapAction, Message?) -> Void, openCheckoutOrReceipt: @escaping (MessageId) -> Void, openSearch: @escaping () -> Void, setupReply: @escaping (MessageId) -> Void, canSetupReply: @escaping (Message) -> Bool, navigateToFirstDateMessage: @escaping(Int32) ->Void, requestRedeliveryOfFailedMessages: @escaping (MessageId) -> Void, addContact: @escaping (String) -> Void, rateCall: @escaping (Message, CallId) -> Void, requestSelectMessagePollOption: @escaping (MessageId, Data) -> Void, openAppStorePage: @escaping () -> Void, displayMessageTooltip: @escaping (MessageId, String, ASDisplayNode?, CGRect?) -> Void, seekToTimecode: @escaping (Message, Double, Bool) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, pollActionState: ChatInterfacePollActionState, stickerSettings: ChatInterfaceStickerSettings) { self.openMessage = openMessage self.openPeer = openPeer self.openPeerMention = openPeerMention @@ -154,6 +171,7 @@ public final class ChatControllerInteraction { self.automaticMediaDownloadSettings = automaticMediaDownloadSettings self.pollActionState = pollActionState + self.stickerSettings = stickerSettings } static var `default`: ChatControllerInteraction { @@ -175,6 +193,6 @@ public final class ChatControllerInteraction { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, - pollActionState: ChatInterfacePollActionState()) + pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(loopAnimatedStickers: false)) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift index ad4510afe7..9be192a99a 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift @@ -1497,6 +1497,14 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.historyNode.prefetchManager.updateAutoDownloadSettings(settings) } + func updateStickerSettings(_ settings: ChatInterfaceStickerSettings) { + self.historyNode.forEachItemNode { itemNode in + if let itemNode = itemNode as? ChatMessageItemView { + itemNode.updateStickerSettings() + } + } + } + var isInputViewFocused: Bool { if let inputPanelNode = self.inputPanelNode as? ChatTextInputPanelNode { return inputPanelNode.isFocused diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift index 3cf1fd44d8..414e20455d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerGridItem.swift @@ -145,7 +145,6 @@ final class ChatMediaInputStickerGridItem: GridItem { let node = ChatMediaInputStickerGridItemNode() node.interfaceInteraction = self.interfaceInteraction node.inputNodeInteraction = self.inputNodeInteraction - node.setup(account: self.account, stickerItem: self.stickerItem) node.selected = self.selected return node } @@ -157,7 +156,6 @@ final class ChatMediaInputStickerGridItem: GridItem { } node.interfaceInteraction = self.interfaceInteraction node.inputNodeInteraction = self.inputNodeInteraction - node.setup(account: self.account, stickerItem: self.stickerItem) node.selected = self.selected } } @@ -209,11 +207,6 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { self.imageNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.imageNodeTap(_:)))) } - func setup(account: Account, stickerItem: StickerPackItem) { - //self.updateSelectionState(animated: false) - //self.updateHiddenMedia() - } - override func updateLayout(item: GridItem, size: CGSize, isVisible: Bool, synchronousLoads: Bool) { guard let item = item as? ChatMediaInputStickerGridItem else { return @@ -232,13 +225,7 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { self.addSubnode(animationNode) } self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.account.postbox, file: item.stickerItem.file, small: false, size: CGSize(width: 160.0, height: 160.0))) - if self.isPlaying { - self.didSetUpAnimationNode = true - self.animationNode?.setup(account: item.account, resource: item.stickerItem.file.resource, width: 160, height: 160, mode: .cached) - } else { - self.didSetUpAnimationNode = false - } - self.animationNode?.visibility = self.isPlaying + self.updateVisibility() self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: item.account, fileReference: stickerPackFileReference(item.stickerItem.file), resource: item.stickerItem.file.resource).start()) } else { if let animationNode = self.animationNode { @@ -297,7 +284,10 @@ final class ChatMediaInputStickerGridItemNode: GridItemNode { } func updateVisibility() { - let isPlaying = self.isPanelVisible && self.isVisibleInGrid + guard let item = self.item else { + return + } + let isPlaying = self.isPanelVisible && self.isVisibleInGrid && (item.interfaceInteraction?.stickerSettings.loopAnimatedStickers ?? true) if self.isPlaying != isPlaying { self.isPlaying = isPlaying self.animationNode?.visibility = isPlaying diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift index 26aeb93446..5212c983ce 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift @@ -103,7 +103,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode { override var visibility: ListViewItemNodeVisibility { didSet { - self.visibilityStatus = self.visibility != .none + self.visibilityStatus = self.visibility != .none && false } } @@ -171,30 +171,30 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode { self.currentThumbnailItem = thumbnailItem if let thumbnailItem = thumbnailItem { switch thumbnailItem { - case let .still(representation): - let imageSize = representation.dimensions.aspectFitted(boundingImageSize) - let imageApply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets())) - imageApply() - self.imageNode.setSignal(chatMessageStickerPackThumbnail(postbox: account.postbox, representation: representation)) - - self.imageNode.frame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0)), size: imageSize) - case let .animated(resource): - let imageSize = boundingImageSize - - let animatedStickerNode: AnimatedStickerNode - if let current = self.animatedStickerNode { - animatedStickerNode = current - } else { - animatedStickerNode = AnimatedStickerNode() - self.animatedStickerNode = animatedStickerNode - animatedStickerNode.transform = CATransform3DMakeRotation(CGFloat.pi / 2.0, 0.0, 0.0, 1.0) - self.addSubnode(animatedStickerNode) - animatedStickerNode.setup(account: account, resource: resource, width: 80, height: 80, mode: .cached) - animatedStickerNode.visibility = self.visibilityStatus - } - if let animatedStickerNode = self.animatedStickerNode { - animatedStickerNode.frame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0)), size: imageSize) - } + case let .still(representation): + let imageSize = representation.dimensions.aspectFitted(boundingImageSize) + let imageApply = self.imageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets())) + imageApply() + self.imageNode.setSignal(chatMessageStickerPackThumbnail(postbox: account.postbox, representation: representation)) + + self.imageNode.frame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0)), size: imageSize) + case let .animated(resource): + let imageSize = boundingImageSize + + let animatedStickerNode: AnimatedStickerNode + if let current = self.animatedStickerNode { + animatedStickerNode = current + } else { + animatedStickerNode = AnimatedStickerNode() + self.animatedStickerNode = animatedStickerNode + animatedStickerNode.transform = CATransform3DMakeRotation(CGFloat.pi / 2.0, 0.0, 0.0, 1.0) + self.addSubnode(animatedStickerNode) + animatedStickerNode.setup(account: account, resource: resource, width: 80, height: 80, mode: .cached) + animatedStickerNode.visibility = self.visibilityStatus && false + } + if let animatedStickerNode = self.animatedStickerNode { + animatedStickerNode.frame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0)), size: imageSize) + } } if let resourceReference = resourceReference { self.stickerFetchedDisposable.set(fetchedMediaResource(postbox: account.postbox, reference: resourceReference).start()) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift index 7ffe44291d..b1feb4f240 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageAnimatedStickerItemNode.swift @@ -17,6 +17,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let imageNode: TransformImageNode private let animationNode: AnimatedStickerNode private var didSetUpAnimationNode = false + private var isPlaying = false private var swipeToReplyNode: ChatMessageSwipeToReplyNode? private var swipeToReplyFeedback: HapticFeedback? @@ -90,8 +91,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } self.view.addGestureRecognizer(replyRecognizer) } - - private var visibilityPromise = ValuePromise(false, ignoreRepeated: true) + override var visibility: ListViewItemNodeVisibility { didSet { let wasVisible = oldValue != .none @@ -106,21 +106,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { private var visibilityStatus: Bool = false { didSet { if self.visibilityStatus != oldValue { - if self.visibilityStatus { - self.animationNode.visibility = true - self.visibilityPromise.set(true) - if let item = self.item, !self.didSetUpAnimationNode { - for media in item.message.media { - if let telegramFile = media as? TelegramMediaFile { - self.didSetUpAnimationNode = true - self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) - } - } - } - } else { - self.animationNode.visibility = false - self.visibilityPromise.set(false) - } + self.updateVisibility() } } } @@ -133,7 +119,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if self.telegramFile?.id != telegramFile.id { self.telegramFile = telegramFile self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: item.context.account.postbox, file: telegramFile, small: false, size: CGSize(width: 384.0, height: 384.0), thumbnail: false)) - if self.visibilityStatus { + self.updateVisibility() + if self.visibilityStatus && false { self.didSetUpAnimationNode = true self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) } @@ -144,6 +131,31 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } } + func updateVisibility() { + guard let item = self.item else { + return + } + + let isPlaying = self.visibilityStatus && item.controllerInteraction.stickerSettings.loopAnimatedStickers + if self.isPlaying != isPlaying { + self.isPlaying = isPlaying + self.animationNode.visibility = isPlaying + if let item = self.item, isPlaying, !self.didSetUpAnimationNode { + self.didSetUpAnimationNode = true + for media in item.message.media { + if let telegramFile = media as? TelegramMediaFile { + self.animationNode.setup(account: item.context.account, resource: telegramFile.resource, width: 384, height: 384, mode: .cached) + break + } + } + } + } + } + + override func updateStickerSettings() { + self.updateVisibility() + } + override func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, Bool) -> Void) { let displaySize = CGSize(width: 184.0, height: 184.0) let telegramFile = self.telegramFile diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 4403bf84c3..5459e75993 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -2191,7 +2191,6 @@ class ChatMessageBubbleItemNode: ChatMessageItemView { } } - override func playMediaWithSound() -> ((Double?) -> Void, Bool, Bool, Bool, ASDisplayNode?)? { for contentNode in self.contentNodes { if let playMediaWithSound = contentNode.playMediaWithSound() { diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift index 06bf3cd96a..a4f1d3fd33 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift @@ -698,6 +698,9 @@ public class ChatMessageItemView: ListViewItemNode { func updateAutomaticMediaDownloadSettings() { } + func updateStickerSettings() { + } + func playMediaWithSound() -> ((Double?) -> Void, Bool, Bool, Bool, ASDisplayNode?)? { return nil } diff --git a/submodules/TelegramUI/TelegramUI/FeaturedStickerPacksController.swift b/submodules/TelegramUI/TelegramUI/FeaturedStickerPacksController.swift index 51088e34d9..207189c093 100644 --- a/submodules/TelegramUI/TelegramUI/FeaturedStickerPacksController.swift +++ b/submodules/TelegramUI/TelegramUI/FeaturedStickerPacksController.swift @@ -5,6 +5,7 @@ import SwiftSignalKit import Postbox import TelegramCore import TelegramPresentationData +import TelegramUIPreferences private final class FeaturedStickerPacksControllerArguments { let account: Account @@ -46,7 +47,7 @@ private enum FeaturedStickerPacksEntryId: Hashable { } private enum FeaturedStickerPacksEntry: ItemListNodeEntry { - case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, Bool, StickerPackItem?, String, Bool) + case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, Bool, StickerPackItem?, String, Bool, Bool) var section: ItemListSectionId { switch self { @@ -57,15 +58,15 @@ private enum FeaturedStickerPacksEntry: ItemListNodeEntry { var stableId: FeaturedStickerPacksEntryId { switch self { - case let .pack(_, _, _, info, _, _, _, _): + case let .pack(_, _, _, info, _, _, _, _, _): return .pack(info.id) } } static func ==(lhs: FeaturedStickerPacksEntry, rhs: FeaturedStickerPacksEntry) -> Bool { switch lhs { - case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsUnread, lhsTopItem, lhsCount, lhsInstalled): - if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsUnread, rhsTopItem, rhsCount, rhsInstalled) = rhs { + case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsUnread, lhsTopItem, lhsCount, lhsPlayAnimatedStickers, lhsInstalled): + if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsUnread, rhsTopItem, rhsCount, rhsPlayAnimatedStickers, rhsInstalled) = rhs { if lhsIndex != rhsIndex { return false } @@ -87,6 +88,9 @@ private enum FeaturedStickerPacksEntry: ItemListNodeEntry { if lhsCount != rhsCount { return false } + if lhsPlayAnimatedStickers != rhsPlayAnimatedStickers { + return false + } if lhsInstalled != rhsInstalled { return false } @@ -99,9 +103,9 @@ private enum FeaturedStickerPacksEntry: ItemListNodeEntry { static func <(lhs: FeaturedStickerPacksEntry, rhs: FeaturedStickerPacksEntry) -> Bool { switch lhs { - case let .pack(lhsIndex, _, _, _, _, _, _, _): + case let .pack(lhsIndex, _, _, _, _, _, _, _, _): switch rhs { - case let .pack(rhsIndex, _, _, _, _, _, _, _): + case let .pack(rhsIndex, _, _, _, _, _, _, _, _): return lhsIndex < rhsIndex } } @@ -109,8 +113,8 @@ private enum FeaturedStickerPacksEntry: ItemListNodeEntry { func item(_ arguments: FeaturedStickerPacksControllerArguments) -> ListViewItem { switch self { - case let .pack(_, theme, strings, info, unread, topItem, count, installed): - return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: unread, control: .installation(installed: installed), editing: ItemListStickerPackItemEditing(editable: false, editing: false, revealed: false, reorderable: false), enabled: true, sectionId: self.section, action: { + case let .pack(_, theme, strings, info, unread, topItem, count, playAnimatedStickers, installed): + return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: unread, control: .installation(installed: installed), editing: ItemListStickerPackItemEditing(editable: false, editing: false, revealed: false, reorderable: false), enabled: true, playAnimatedStickers: playAnimatedStickers, sectionId: self.section, action: { arguments.openStickerPack(info) }, setPackIdWithRevealedOptions: { _, _ in }, addPack: { @@ -130,7 +134,7 @@ private struct FeaturedStickerPacksControllerState: Equatable { } } -private func featuredStickerPacksControllerEntries(presentationData: PresentationData, state: FeaturedStickerPacksControllerState, view: CombinedView, featured: [FeaturedStickerPackItem], unreadPacks: [ItemCollectionId: Bool]) -> [FeaturedStickerPacksEntry] { +private func featuredStickerPacksControllerEntries(presentationData: PresentationData, state: FeaturedStickerPacksControllerState, view: CombinedView, featured: [FeaturedStickerPackItem], unreadPacks: [ItemCollectionId: Bool], stickerSettings: StickerSettings) -> [FeaturedStickerPacksEntry] { var entries: [FeaturedStickerPacksEntry] = [] if let stickerPacksView = view.views[.itemCollectionInfos(namespaces: [Namespaces.ItemCollection.CloudStickerPacks])] as? ItemCollectionInfosView, !featured.isEmpty { @@ -145,7 +149,7 @@ private func featuredStickerPacksControllerEntries(presentationData: Presentatio if let value = unreadPacks[item.info.id] { unread = value } - entries.append(.pack(index, presentationData.theme, presentationData.strings, item.info, unread, item.topItems.first, presentationData.strings.StickerPack_StickerCount(item.info.count), installedPacks.contains(item.info.id))) + entries.append(.pack(index, presentationData.theme, presentationData.strings, item.info, unread, item.topItems.first, presentationData.strings.StickerPack_StickerCount(item.info.count), stickerSettings.loopAnimatedStickers, installedPacks.contains(item.info.id))) index += 1 } } @@ -195,9 +199,14 @@ public func featuredStickerPacksController(context: AccountContext) -> ViewContr var previousPackCount: Int? var initialUnreadPacks: [ItemCollectionId: Bool] = [:] - let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, featured.get() |> deliverOnMainQueue) + let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, featured.get() |> deliverOnMainQueue, context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> deliverOnMainQueue) |> deliverOnMainQueue - |> map { presentationData, state, view, featured -> (ItemListControllerState, (ItemListNodeState, FeaturedStickerPacksEntry.ItemGenerationArguments)) in + |> map { presentationData, state, view, featured, sharedData -> (ItemListControllerState, (ItemListNodeState, FeaturedStickerPacksEntry.ItemGenerationArguments)) in + var stickerSettings = StickerSettings.defaultSettings + if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { + stickerSettings = value + } + let packCount: Int? = featured.count for item in featured { @@ -212,7 +221,7 @@ public func featuredStickerPacksController(context: AccountContext) -> ViewContr let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.FeaturedStickerPacks_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - let listState = ItemListNodeState(entries: featuredStickerPacksControllerEntries(presentationData: presentationData, state: state, view: view, featured: featured, unreadPacks: initialUnreadPacks), style: .blocks, animateChanges: false) + let listState = ItemListNodeState(entries: featuredStickerPacksControllerEntries(presentationData: presentationData, state: state, view: view, featured: featured, unreadPacks: initialUnreadPacks, stickerSettings: stickerSettings), style: .blocks, animateChanges: false) return (controllerState, (listState, arguments)) } |> afterDisposed { actionsDisposable.dispose() @@ -226,7 +235,7 @@ public func featuredStickerPacksController(context: AccountContext) -> ViewContr var unreadIds: [ItemCollectionId] = [] for entry in entries { switch entry { - case let .pack(_, _, _, info, unread, _, _, _): + case let .pack(_, _, _, info, unread, _, _, _, _): if unread && !alreadyReadIds.contains(info.id) { unreadIds.append(info.id) } diff --git a/submodules/TelegramUI/TelegramUI/GroupStickerPackSetupController.swift b/submodules/TelegramUI/TelegramUI/GroupStickerPackSetupController.swift index 0cb5ec6d30..e37813635f 100644 --- a/submodules/TelegramUI/TelegramUI/GroupStickerPackSetupController.swift +++ b/submodules/TelegramUI/TelegramUI/GroupStickerPackSetupController.swift @@ -5,6 +5,7 @@ import SwiftSignalKit import Postbox import TelegramCore import TelegramPresentationData +import TelegramUIPreferences private final class GroupStickerPackSetupControllerArguments { let account: Account @@ -64,7 +65,7 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { case currentPack(Int32, PresentationTheme, PresentationStrings, GroupStickerPackCurrentItemContent) case searchInfo(PresentationTheme, String) case packsTitle(PresentationTheme, String) - case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool) + case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool, Bool) var section: ItemListSectionId { switch self { @@ -85,7 +86,7 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { return .index(2) case .packsTitle: return .index(3) - case let .pack(_, _, _, info, _, _, _): + case let .pack(_, _, _, info, _, _, _, _): return .pack(info.id) } } @@ -128,8 +129,8 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { } else { return false } - case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsSelected): - if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsSelected) = rhs { + case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsPlayAnimatedStickers, lhsSelected): + if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsPlayAnimatedStickers, rhsSelected) = rhs { if lhsIndex != rhsIndex { return false } @@ -148,6 +149,9 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { if lhsCount != rhsCount { return false } + if lhsPlayAnimatedStickers != rhsPlayAnimatedStickers { + return false + } if lhsSelected != rhsSelected { return false } @@ -188,9 +192,9 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { default: return true } - case let .pack(lhsIndex, _, _, _, _, _, _): + case let .pack(lhsIndex, _, _, _, _, _, _, _): switch rhs { - case let .pack(rhsIndex, _, _, _, _, _, _): + case let .pack(rhsIndex, _, _, _, _, _, _, _): return lhsIndex < rhsIndex default: return false @@ -216,8 +220,8 @@ private enum GroupStickerPackEntry: ItemListNodeEntry { return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section, linkAction: nil) case let .packsTitle(theme, text): return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) - case let .pack(_, theme, strings, info, topItem, count, selected): - return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: selected ? .selection : .none, editing: ItemListStickerPackItemEditing(editable: false, editing: false, revealed: false, reorderable: false), enabled: true, sectionId: self.section, action: { + case let .pack(_, theme, strings, info, topItem, count, playAnimatedStickers, selected): + return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: selected ? .selection : .none, editing: ItemListStickerPackItemEditing(editable: false, editing: false, revealed: false, reorderable: false), enabled: true, playAnimatedStickers: playAnimatedStickers, sectionId: self.section, action: { if selected { arguments.openStickerPack(info) } else { @@ -258,7 +262,7 @@ private struct GroupStickerPackSetupControllerState: Equatable { var isSaving: Bool } -private func groupStickerPackSetupControllerEntries(presentationData: PresentationData, searchText: String, view: CombinedView, initialData: InitialStickerPackData?, searchState: GroupStickerPackSearchState) -> [GroupStickerPackEntry] { +private func groupStickerPackSetupControllerEntries(presentationData: PresentationData, searchText: String, view: CombinedView, initialData: InitialStickerPackData?, searchState: GroupStickerPackSearchState, stickerSettings: StickerSettings) -> [GroupStickerPackEntry] { if initialData == nil { return [] } @@ -288,7 +292,7 @@ private func groupStickerPackSetupControllerEntries(presentationData: Presentati if case let .found(found) = searchState { selected = found.info.id == info.id } - entries.append(.pack(index, presentationData.theme, presentationData.strings, info, entry.firstItem as? StickerPackItem, presentationData.strings.StickerPack_StickerCount(info.count == 0 ? entry.count : info.count), selected)) + 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, selected)) index += 1 } } @@ -400,66 +404,71 @@ public func groupStickerPackSetupController(context: AccountContext, peerId: Pee let previousHadData = Atomic(value: false) - let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, initialData.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, searchState.get() |> deliverOnMainQueue) - |> map { presentationData, state, initialData, view, searchState -> (ItemListControllerState, (ItemListNodeState, GroupStickerPackEntry.ItemGenerationArguments)) in - let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: { - dismissImpl?() - }) - - var rightNavigationButton: ItemListNavigationButton? - if initialData != nil { - if state.isSaving { - rightNavigationButton = ItemListNavigationButton(content: .text(""), style: .activity, enabled: true, action: {}) - } else { - let enabled: Bool - var info: StickerPackCollectionInfo? - switch searchState.1 { - case .searching, .notFound: - enabled = false - case .none: - enabled = true - case let .found(data): - enabled = true - info = data.info - } - rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: enabled, action: { - if info?.id == currentPackInfo?.id { - dismissImpl?() - } else { + let signal = combineLatest(context.sharedContext.presentationData, statePromise.get() |> deliverOnMainQueue, initialData.get() |> deliverOnMainQueue, stickerPacks.get() |> deliverOnMainQueue, searchState.get() |> deliverOnMainQueue, context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> deliverOnMainQueue) + |> map { presentationData, state, initialData, view, searchState, sharedData -> (ItemListControllerState, (ItemListNodeState, GroupStickerPackEntry.ItemGenerationArguments)) in + var stickerSettings = StickerSettings.defaultSettings + if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { + stickerSettings = value + } + + let leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: { + dismissImpl?() + }) + + var rightNavigationButton: ItemListNavigationButton? + if initialData != nil { + if state.isSaving { + rightNavigationButton = ItemListNavigationButton(content: .text(""), style: .activity, enabled: true, action: {}) + } else { + let enabled: Bool + var info: StickerPackCollectionInfo? + switch searchState.1 { + case .searching, .notFound: + enabled = false + case .none: + enabled = true + case let .found(data): + enabled = true + info = data.info + } + rightNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Done), style: .bold, enabled: enabled, action: { + if info?.id == currentPackInfo?.id { + dismissImpl?() + } else { + updateState { state in + var state = state + state.isSaving = true + return state + } + saveDisposable.set((updateGroupSpecificStickerset(postbox: context.account.postbox, network: context.account.network, peerId: peerId, info: info) + |> deliverOnMainQueue).start(error: { _ in updateState { state in var state = state - state.isSaving = true + state.isSaving = false return state } - saveDisposable.set((updateGroupSpecificStickerset(postbox: context.account.postbox, network: context.account.network, peerId: peerId, info: info) - |> deliverOnMainQueue).start(error: { _ in - updateState { state in - var state = state - state.isSaving = false - return state - } - }, completed: { - dismissImpl?() - })) - } - }) - } + }, completed: { + dismissImpl?() + })) + } + }) } - - let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Channel_Info_Stickers), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) - - let hasData = initialData != nil - let hadData = previousHadData.swap(hasData) - - var emptyStateItem: ItemListLoadingIndicatorEmptyStateItem? - if !hasData { - emptyStateItem = ItemListLoadingIndicatorEmptyStateItem(theme: presentationData.theme) - } - - let listState = ItemListNodeState(entries: groupStickerPackSetupControllerEntries(presentationData: presentationData, searchText: searchState.0, view: view, initialData: initialData, searchState: searchState.1), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: hasData && hadData) - return (controllerState, (listState, arguments)) - } |> afterDisposed { - actionsDisposable.dispose() + } + + let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Channel_Info_Stickers), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back), animateChanges: true) + + let hasData = initialData != nil + let hadData = previousHadData.swap(hasData) + + var emptyStateItem: ItemListLoadingIndicatorEmptyStateItem? + if !hasData { + emptyStateItem = ItemListLoadingIndicatorEmptyStateItem(theme: presentationData.theme) + } + + let listState = ItemListNodeState(entries: groupStickerPackSetupControllerEntries(presentationData: presentationData, searchText: searchState.0, view: view, initialData: initialData, searchState: searchState.1, stickerSettings: stickerSettings), style: .blocks, emptyStateItem: emptyStateItem, animateChanges: hasData && hadData) + return (controllerState, (listState, arguments)) + } |> afterDisposed { + actionsDisposable.dispose() } let controller = ItemListController(context: context, state: signal) diff --git a/submodules/TelegramUI/TelegramUI/InstalledStickerPacksController.swift b/submodules/TelegramUI/TelegramUI/InstalledStickerPacksController.swift index c2f6745deb..1e8a02f9c1 100644 --- a/submodules/TelegramUI/TelegramUI/InstalledStickerPacksController.swift +++ b/submodules/TelegramUI/TelegramUI/InstalledStickerPacksController.swift @@ -18,8 +18,9 @@ private final class InstalledStickerPacksControllerArguments { let openFeatured: () -> Void let openArchived: ([ArchivedStickerPackItem]?) -> Void let openSuggestOptions: () -> Void + let toggleAnimatedStickers: (Bool) -> Void - init(account: Account, openStickerPack: @escaping (StickerPackCollectionInfo) -> Void, setPackIdWithRevealedOptions: @escaping (ItemCollectionId?, ItemCollectionId?) -> Void, removePack: @escaping (ArchivedStickerPackItem) -> Void, openStickersBot: @escaping () -> Void, openMasks: @escaping () -> Void, openFeatured: @escaping () -> Void, openArchived: @escaping ([ArchivedStickerPackItem]?) -> Void, openSuggestOptions: @escaping () -> Void) { + init(account: Account, openStickerPack: @escaping (StickerPackCollectionInfo) -> Void, setPackIdWithRevealedOptions: @escaping (ItemCollectionId?, ItemCollectionId?) -> Void, removePack: @escaping (ArchivedStickerPackItem) -> Void, openStickersBot: @escaping () -> Void, openMasks: @escaping () -> Void, openFeatured: @escaping () -> Void, openArchived: @escaping ([ArchivedStickerPackItem]?) -> Void, openSuggestOptions: @escaping () -> Void, toggleAnimatedStickers: @escaping (Bool) -> Void) { self.account = account self.openStickerPack = openStickerPack self.setPackIdWithRevealedOptions = setPackIdWithRevealedOptions @@ -29,6 +30,7 @@ private final class InstalledStickerPacksControllerArguments { self.openFeatured = openFeatured self.openArchived = openArchived self.openSuggestOptions = openSuggestOptions + self.toggleAnimatedStickers = toggleAnimatedStickers } } @@ -85,13 +87,15 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { case trending(PresentationTheme, String, Int32) case archived(PresentationTheme, String, Int32, [ArchivedStickerPackItem]?) case masks(PresentationTheme, String) + case animatedStickers(PresentationTheme, String, Bool) + case animatedStickersInfo(PresentationTheme, String) case packsTitle(PresentationTheme, String) - case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool, ItemListStickerPackItemEditing) + case pack(Int32, PresentationTheme, PresentationStrings, StickerPackCollectionInfo, StickerPackItem?, String, Bool, Bool, ItemListStickerPackItemEditing) case packsInfo(PresentationTheme, String) var section: ItemListSectionId { switch self { - case .suggestOptions, .trending, .masks, .archived: + case .suggestOptions, .trending, .masks, .archived, .animatedStickers, .animatedStickersInfo: return InstalledStickerPacksSection.service.rawValue case .packsTitle, .pack, .packsInfo: return InstalledStickerPacksSection.stickers.rawValue @@ -108,12 +112,16 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { return .index(2) case .masks: return .index(3) - case .packsTitle: + case .animatedStickers: return .index(4) - case let .pack(_, _, _, info, _, _, _, _): + case .animatedStickersInfo: + return .index(5) + case .packsTitle: + return .index(6) + case let .pack(_, _, _, info, _, _, _, _, _): return .pack(info.id) case .packsInfo: - return .index(5) + return .index(7) } } @@ -143,14 +151,26 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { } else { return false } + case let .animatedStickers(lhsTheme, lhsText, lhsValue): + if case let .animatedStickers(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { + return true + } else { + return false + } + case let .animatedStickersInfo(lhsTheme, lhsText): + if case let .animatedStickersInfo(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { + return true + } else { + return false + } case let .packsTitle(lhsTheme, lhsText): if case let .packsTitle(rhsTheme, rhsText) = rhs, lhsTheme === rhsTheme, lhsText == rhsText { return true } else { return false } - case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsEnabled, lhsEditing): - if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsEnabled, rhsEditing) = rhs { + case let .pack(lhsIndex, lhsTheme, lhsStrings, lhsInfo, lhsTopItem, lhsCount, lhsAnimatedStickers, lhsEnabled, lhsEditing): + if case let .pack(rhsIndex, rhsTheme, rhsStrings, rhsInfo, rhsTopItem, rhsCount, rhsAnimatedStickers, rhsEnabled, rhsEditing) = rhs { if lhsIndex != rhsIndex { return false } @@ -169,6 +189,9 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { if lhsCount != rhsCount { return false } + if lhsAnimatedStickers != rhsAnimatedStickers { + return false + } if lhsEnabled != rhsEnabled { return false } @@ -218,16 +241,30 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { default: return true } - case .packsTitle: + case .animatedStickers: switch rhs { - case .suggestOptions, .trending, .masks, .archived, .packsTitle: + case .suggestOptions, .trending, .archived, .masks, .animatedStickers: return false default: return true } - case let .pack(lhsIndex, _, _, _, _, _, _, _): + case .animatedStickersInfo: switch rhs { - case let .pack(rhsIndex, _, _, _, _, _, _, _): + case .suggestOptions, .trending, .archived, .masks, .animatedStickers, .animatedStickersInfo: + return false + default: + return true + } + case .packsTitle: + switch rhs { + case .suggestOptions, .trending, .masks, .archived, .animatedStickers, .animatedStickersInfo, .packsTitle: + return false + default: + return true + } + case let .pack(lhsIndex, _, _, _, _, _, _, _, _): + switch rhs { + case let .pack(rhsIndex, _, _, _, _, _, _, _, _): return lhsIndex < rhsIndex case .packsInfo: return true @@ -262,10 +299,16 @@ private enum InstalledStickerPacksEntry: ItemListNodeEntry { return ItemListDisclosureItem(theme: theme, title: text, label: count == 0 ? "" : "\(count)", sectionId: self.section, style: .blocks, action: { arguments.openArchived(archived) }) + case let .animatedStickers(theme, text, value): + return ItemListSwitchItem(theme: theme, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + arguments.toggleAnimatedStickers(value) + }) + case let .animatedStickersInfo(theme, text): + return ItemListTextItem(theme: theme, text: .plain(text), sectionId: self.section) case let .packsTitle(theme, text): return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) - case let .pack(_, theme, strings, info, topItem, count, enabled, editing): - return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: .none, editing: editing, enabled: enabled, sectionId: self.section, action: { + case let .pack(_, theme, strings, info, topItem, count, animatedStickers, enabled, editing): + return ItemListStickerPackItem(theme: theme, strings: strings, account: arguments.account, packInfo: info, itemCount: count, topItem: topItem, unread: false, control: .none, editing: editing, enabled: enabled, playAnimatedStickers: animatedStickers, sectionId: self.section, action: { arguments.openStickerPack(info) }, setPackIdWithRevealedOptions: { current, previous in arguments.setPackIdWithRevealedOptions(current, previous) @@ -353,6 +396,10 @@ private func installedStickerPacksControllerEntries(presentationData: Presentati 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 { @@ -365,7 +412,7 @@ private func installedStickerPacksControllerEntries(presentationData: Presentati var index: Int32 = 0 for entry in packsEntries { 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), true, ItemListStickerPackItemEditing(editable: true, editing: state.editing, revealed: state.packIdWithRevealedOptions == entry.id, reorderable: true))) + 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 } } @@ -505,18 +552,10 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta ActionSheetItemGroup(items: [ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, action: { dismissAction() })]) ]) presentControllerImpl?(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) - /* - let suggestString: String - switch stickerSettings.emojiStickerSuggestionMode { - case .none: - suggestString = presentationData.strings.Stickers_SuggestNone - case .all: - - case .installed: - suggestString = presentationData.strings.Stickers_SuggestAdded - } - */ - + }, toggleAnimatedStickers: { value in + let _ = updateStickerSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in + return current.withUpdatedLoopAnimatedStickers(value) + }).start() }) let stickerPacks = Promise() stickerPacks.set(context.account.postbox.combinedView(keys: [.itemCollectionInfos(namespaces: [namespaceForMode(mode)])])) @@ -531,10 +570,8 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta featured.set(.single([])) archivedPromise.set(.single(nil) |> then(archivedStickerPacks(account: context.account, namespace: .masks) |> map(Optional.init))) } - 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])) |> deliverOnMainQueue |> map { presentationData, state, view, featuredAndArchived, sharedData -> (ItemListControllerState, (ItemListNodeState, InstalledStickerPacksEntry.ItemGenerationArguments)) in @@ -549,12 +586,6 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta } let leftNavigationButton: ItemListNavigationButton? = nil - /*if case .modal = mode { - leftNavigationButton = ItemListNavigationButton(content: .text(presentationData.strings.Common_Cancel), style: .regular, enabled: true, action: { - dismissImpl?() - }) - }*/ - var rightNavigationButton: ItemListNavigationButton? if let packCount = packCount, packCount != 0 { if case .modal = mode { @@ -603,7 +634,7 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta controller.reorderEntry = { fromIndex, toIndex, entries in let fromEntry = entries[fromIndex] - guard case let .pack(_, _, _, fromPackInfo, _, _, _, _) = fromEntry else { + guard case let .pack(_, _, _, fromPackInfo, _, _, _, _, _) = fromEntry else { return } var referenceId: ItemCollectionId? @@ -611,7 +642,7 @@ public func installedStickerPacksController(context: AccountContext, mode: Insta var afterAll = false if toIndex < entries.count { switch entries[toIndex] { - case let .pack(_, _, _, toPackInfo, _, _, _, _): + case let .pack(_, _, _, toPackInfo, _, _, _, _, _): referenceId = toPackInfo.id default: if entries[toIndex] < fromEntry { diff --git a/submodules/TelegramUI/TelegramUI/ItemListStickerPackItem.swift b/submodules/TelegramUI/TelegramUI/ItemListStickerPackItem.swift index b49c7c0f15..879f756a5e 100644 --- a/submodules/TelegramUI/TelegramUI/ItemListStickerPackItem.swift +++ b/submodules/TelegramUI/TelegramUI/ItemListStickerPackItem.swift @@ -47,13 +47,14 @@ final class ItemListStickerPackItem: ListViewItem, ItemListItem { let control: ItemListStickerPackItemControl let editing: ItemListStickerPackItemEditing let enabled: Bool + let playAnimatedStickers: Bool let sectionId: ItemListSectionId let action: (() -> Void)? let setPackIdWithRevealedOptions: (ItemCollectionId?, ItemCollectionId?) -> Void let addPack: () -> Void let removePack: () -> Void - init(theme: PresentationTheme, strings: PresentationStrings, account: Account, packInfo: StickerPackCollectionInfo, itemCount: String, topItem: StickerPackItem?, unread: Bool, control: ItemListStickerPackItemControl, editing: ItemListStickerPackItemEditing, enabled: Bool, sectionId: ItemListSectionId, action: (() -> Void)?, setPackIdWithRevealedOptions: @escaping (ItemCollectionId?, ItemCollectionId?) -> Void, addPack: @escaping () -> Void, removePack: @escaping () -> Void) { + init(theme: PresentationTheme, strings: PresentationStrings, account: Account, packInfo: StickerPackCollectionInfo, itemCount: String, topItem: StickerPackItem?, unread: Bool, control: ItemListStickerPackItemControl, editing: ItemListStickerPackItemEditing, enabled: Bool, playAnimatedStickers: Bool, sectionId: ItemListSectionId, action: (() -> Void)?, setPackIdWithRevealedOptions: @escaping (ItemCollectionId?, ItemCollectionId?) -> Void, addPack: @escaping () -> Void, removePack: @escaping () -> Void) { self.theme = theme self.strings = strings self.account = account @@ -64,6 +65,7 @@ final class ItemListStickerPackItem: ListViewItem, ItemListItem { self.control = control self.editing = editing self.enabled = enabled + self.playAnimatedStickers = playAnimatedStickers self.sectionId = sectionId self.action = action self.setPackIdWithRevealedOptions = setPackIdWithRevealedOptions @@ -162,7 +164,7 @@ class ItemListStickerPackItemNode: ItemListRevealOptionsItemNode { let isVisible = self.visibility != .none if wasVisible != isVisible { - self.animationNode?.visibility = isVisible + self.animationNode?.visibility = isVisible && (self.layoutParams?.0.playAnimatedStickers ?? true) } } } @@ -558,8 +560,8 @@ class ItemListStickerPackItemNode: ItemListRevealOptionsItemNode { strongSelf.animationNode = animationNode strongSelf.addSubnode(animationNode) animationNode.setup(account: item.account, resource: resource, width: 80, height: 80, mode: .cached) - animationNode.visibility = strongSelf.visibility != .none } + animationNode.visibility = strongSelf.visibility != .none && item.playAnimatedStickers if let animationNode = strongSelf.animationNode { transition.updateFrame(node: animationNode, frame: imageFrame) } diff --git a/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift b/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift index 8417e760dd..790162a1fc 100644 --- a/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/OverlayPlayerControllerNode.swift @@ -101,7 +101,7 @@ final class OverlayPlayerControllerNode: ViewControllerTracingNode, UIGestureRec }, seekToTimecode: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { - }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState()) + }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(loopAnimatedStickers: false)) self.dimNode = ASDisplayNode() self.dimNode.backgroundColor = UIColor(white: 0.0, alpha: 0.5) diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift index dee56a9619..43997090c3 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionController.swift @@ -272,7 +272,7 @@ public class PeerMediaCollectionController: TelegramController { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, - pollActionState: ChatInterfacePollActionState()) + pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(loopAnimatedStickers: false)) self.controllerInteraction = controllerInteraction diff --git a/submodules/TelegramUI/TelegramUI/StickerPackPreviewController.swift b/submodules/TelegramUI/TelegramUI/StickerPackPreviewController.swift index c8c0c3b355..cce3af5d24 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPackPreviewController.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPackPreviewController.swift @@ -5,6 +5,7 @@ import AsyncDisplayKit import Postbox import TelegramCore import SwiftSignalKit +import TelegramUIPreferences enum StickerPackPreviewControllerMode { case `default` @@ -140,8 +141,13 @@ final class StickerPackPreviewController: ViewController { } let account = self.context.account self.displayNodeDidLoad() - self.stickerPackDisposable.set((self.stickerPackContents.get() - |> mapToSignal { next -> Signal in + self.stickerPackDisposable.set((combineLatest(self.stickerPackContents.get(), self.context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.stickerSettings]) |> take(1)) + |> mapToSignal { next, sharedData -> Signal<(LoadedStickerPack, StickerSettings), NoError> in + var stickerSettings = StickerSettings.defaultSettings + if let value = sharedData.entries[ApplicationSpecificSharedDataKeys.stickerSettings] as? StickerSettings { + stickerSettings = value + } + switch next { case let .result(_, items, _): var preloadSignals: [Signal] = [] @@ -172,26 +178,26 @@ final class StickerPackPreviewController: ViewController { return !values.contains(false) } |> distinctUntilChanged - |> mapToSignal { loaded -> Signal in + |> mapToSignal { loaded -> Signal<(LoadedStickerPack, StickerSettings), NoError> in if !loaded { - return .single(.fetching) + return .single((.fetching, stickerSettings)) } else { - return .single(next) + return .single((next, stickerSettings)) } } default: - return .single(next) + return .single((next, stickerSettings)) } } |> deliverOnMainQueue).start(next: { [weak self] next in if let strongSelf = self { - if case .none = next { + if case .none = next.0 { let presentationData = strongSelf.context.sharedContext.currentPresentationData.with { $0 } strongSelf.present(textAlertController(context: strongSelf.context, title: nil, text: presentationData.strings.StickerPack_ErrorNotFound, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root)) strongSelf.dismiss() } else { - strongSelf.controllerNode.updateStickerPack(next) - strongSelf.stickerPackContentsValue = next + strongSelf.controllerNode.updateStickerPack(next.0, stickerSettings: next.1) + strongSelf.stickerPackContentsValue = next.0 } } })) diff --git a/submodules/TelegramUI/TelegramUI/StickerPackPreviewControllerNode.swift b/submodules/TelegramUI/TelegramUI/StickerPackPreviewControllerNode.swift index 870c783b78..03c62c1ed6 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPackPreviewControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPackPreviewControllerNode.swift @@ -6,6 +6,7 @@ import SwiftSignalKit import Postbox import TelegramCore import TelegramPresentationData +import TelegramUIPreferences private struct StickerPackPreviewGridEntry: Comparable, Identifiable { let index: Int @@ -75,6 +76,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol private var stickerPack: LoadedStickerPack? private var stickerPackUpdated = false private var stickerPackInitiallyInstalled : Bool? + private var stickerSettings: StickerSettings? private var currentItems: [StickerPackPreviewGridEntry] = [] @@ -131,13 +133,7 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol super.init() - self.interaction = StickerPackPreviewInteraction(sendSticker: { [weak self] item in - if let strongSelf = self, let sendSticker = strongSelf.sendSticker { - /*if sendSticker(item.file) { - strongSelf.cancel?() - }*/ - } - }) + self.interaction = StickerPackPreviewInteraction(playAnimatedStickers: false) self.backgroundColor = nil self.isOpaque = false @@ -510,16 +506,16 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol } else { dismissOnAction = true } - if let stickerPack = self.stickerPack { + if let stickerPack = self.stickerPack, let stickerSettings = self.stickerSettings { switch stickerPack { case let .result(info, items, installed): if installed { let _ = removeStickerPackInteractively(postbox: self.context.account.postbox, id: info.id, option: .delete).start() - updateStickerPack(.result(info: info, items: items, installed: false)) + self.updateStickerPack(.result(info: info, items: items, installed: false), stickerSettings: stickerSettings) } else { let _ = addStickerPackInteractively(postbox: self.context.account.postbox, info: info, items: items).start() if !dismissOnAction { - updateStickerPack(.result(info: info, items: items, installed: true)) + self.updateStickerPack(.result(info: info, items: items, installed: true), stickerSettings: stickerSettings) } } if dismissOnAction { @@ -566,9 +562,13 @@ final class StickerPackPreviewControllerNode: ViewControllerTracingNode, UIScrol }) } - func updateStickerPack(_ stickerPack: LoadedStickerPack) { + func updateStickerPack(_ stickerPack: LoadedStickerPack, stickerSettings: StickerSettings) { self.stickerPack = stickerPack + self.stickerSettings = stickerSettings self.stickerPackUpdated = true + + self.interaction.playAnimatedStickers = stickerSettings.loopAnimatedStickers + if let _ = self.containerLayout { self.dequeueUpdateStickerPack() } diff --git a/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift b/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift index 412ed8e834..06b0bdc2b1 100644 --- a/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift +++ b/submodules/TelegramUI/TelegramUI/StickerPackPreviewGridItem.swift @@ -8,11 +8,10 @@ import Postbox final class StickerPackPreviewInteraction { var previewedItem: StickerPreviewPeekItem? + var playAnimatedStickers: Bool - let sendSticker: (StickerPackItem) -> Void - - init(sendSticker: @escaping (StickerPackItem) -> Void) { - self.sendSticker = sendSticker + init(playAnimatedStickers: Bool) { + self.playAnimatedStickers = playAnimatedStickers } } @@ -53,12 +52,10 @@ final class StickerPackPreviewGridItemNode: GridItemNode { override var isVisibleInGrid: Bool { didSet { - self.animationNode?.visibility = self.isVisibleInGrid + self.animationNode?.visibility = self.isVisibleInGrid && self.interaction?.playAnimatedStickers ?? true } } - private let textNode: ASTextNode - private var currentIsPreviewing = false private let stickerFetchedDisposable = MetaDisposable() @@ -74,16 +71,10 @@ final class StickerPackPreviewGridItemNode: GridItemNode { override init() { self.imageNode = TransformImageNode() self.imageNode.isLayerBacked = !smartInvertColorsEnabled() - //self.imageNode.alphaTransitionOnFirstUpdate = true - - self.textNode = ASTextNode() - self.textNode.isUserInteractionEnabled = false - self.textNode.displaysAsynchronously = true super.init() self.addSubnode(self.imageNode) - //self.addSubnode(self.textNode) } deinit { @@ -100,14 +91,6 @@ final class StickerPackPreviewGridItemNode: GridItemNode { self.interaction = interaction if self.currentState == nil || self.currentState!.0 !== account || self.currentState!.1 != stickerItem { - var text = "" - for attribute in stickerItem.file.attributes { - if case let .Sticker(displayText, _, _) = attribute { - text = displayText - break - } - } - self.textNode.attributedText = NSAttributedString(string: text, font: textFont, textColor: .black, paragraphAlignment: .right) if let dimensions = stickerItem.file.dimensions { if stickerItem.file.isAnimatedSticker { self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: account.postbox, file: stickerItem.file, small: false, size: CGSize(width: 160.0, height: 160.0))) @@ -121,7 +104,7 @@ final class StickerPackPreviewGridItemNode: GridItemNode { } } self.animationNode?.setup(account: account, resource: stickerItem.file.resource, width: 160, height: 160, mode: .cached) - self.animationNode?.visibility = self.isVisibleInGrid + self.animationNode?.visibility = self.isVisibleInGrid && self.interaction?.playAnimatedStickers ?? true self.stickerFetchedDisposable.set(freeMediaFileResourceInteractiveFetched(account: account, fileReference: stickerPackFileReference(stickerItem.file), resource: stickerItem.file.resource).start()) } else { if let animationNode = self.animationNode { @@ -157,9 +140,6 @@ final class StickerPackPreviewGridItemNode: GridItemNode { animationNode.frame = CGRect(origin: CGPoint(x: floor((bounds.size.width - imageSize.width) / 2.0), y: (bounds.size.height - imageSize.height) / 2.0), size: imageSize) animationNode.updateLayout(size: imageSize) } - let boundingFrame = CGRect(origin: CGPoint(x: floor((bounds.size.width - boundingSize.width) / 2.0), y: (bounds.size.height - boundingSize.height) / 2.0), size: boundingSize) - let textSize = CGSize(width: 32.0, height: 24.0) - self.textNode.frame = CGRect(origin: CGPoint(x: boundingFrame.maxX - 1.0 - textSize.width, y: boundingFrame.height + 10.0 - textSize.height), size: textSize) } } @@ -169,7 +149,7 @@ final class StickerPackPreviewGridItemNode: GridItemNode { @objc func imageNodeTap(_ recognizer: UITapGestureRecognizer) { if let interaction = self.interaction, let (_, item, _) = self.currentState, case .ended = recognizer.state { - interaction.sendSticker(item) + //interaction.sendSticker(item) } } diff --git a/submodules/TelegramUIPreferences/Sources/MediaAutoDownloadSettings.swift b/submodules/TelegramUIPreferences/Sources/MediaAutoDownloadSettings.swift index dd1e6abf7a..4240e5768f 100644 --- a/submodules/TelegramUIPreferences/Sources/MediaAutoDownloadSettings.swift +++ b/submodules/TelegramUIPreferences/Sources/MediaAutoDownloadSettings.swift @@ -151,14 +151,14 @@ public struct MediaAutoDownloadSettings: PreferencesEntry, Equatable { public static var defaultSettings: MediaAutoDownloadSettings { let mb: Int32 = 1024 * 1024 let presets = MediaAutoDownloadPresets(low: MediaAutoDownloadCategories(basePreset: .low, photo: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false), - video: MediaAutoDownloadCategory(contacts: false, otherPrivate: false, groups: false, channels: false, sizeLimit: 1 * mb, predownload: false), - file: MediaAutoDownloadCategory(contacts: false, otherPrivate: false, groups: false, channels: false, sizeLimit: 1 * mb, predownload: false)), - medium: MediaAutoDownloadCategories(basePreset: .medium, photo: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false), - video: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: Int32(2.5 * CGFloat(mb)), predownload: false), - file: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false)), - high: MediaAutoDownloadCategories(basePreset: .high, photo: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false), - video: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 10 * mb, predownload: true), - file: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 3 * mb, predownload: false))) + video: MediaAutoDownloadCategory(contacts: false, otherPrivate: false, groups: false, channels: false, sizeLimit: 1 * mb, predownload: false), + file: MediaAutoDownloadCategory(contacts: false, otherPrivate: false, groups: false, channels: false, sizeLimit: 1 * mb, predownload: false)), + medium: MediaAutoDownloadCategories(basePreset: .medium, photo: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false), + video: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: Int32(2.5 * CGFloat(mb)), predownload: false), + file: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false)), + high: MediaAutoDownloadCategories(basePreset: .high, photo: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 1 * mb, predownload: false), + video: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 10 * mb, predownload: true), + file: MediaAutoDownloadCategory(contacts: true, otherPrivate: true, groups: true, channels: true, sizeLimit: 3 * mb, predownload: false))) let saveDownloadedPhotos = MediaAutoDownloadCategory(contacts: false, otherPrivate: false, groups: false, channels: false, sizeLimit: 0, predownload: false) return MediaAutoDownloadSettings(presets: presets, cellular: MediaAutoDownloadConnection(enabled: true, preset: .medium, custom: nil), wifi: MediaAutoDownloadConnection(enabled: true, preset: .high, custom: nil), saveDownloadedPhotos: saveDownloadedPhotos, autoplayGifs: true, autoplayVideos: true, downloadInBackground: true) diff --git a/submodules/TelegramUIPreferences/Sources/StickerSettings.swift b/submodules/TelegramUIPreferences/Sources/StickerSettings.swift index 79244f2e03..4eea5be1da 100644 --- a/submodules/TelegramUIPreferences/Sources/StickerSettings.swift +++ b/submodules/TelegramUIPreferences/Sources/StickerSettings.swift @@ -10,21 +10,25 @@ public enum EmojiStickerSuggestionMode: Int32 { public struct StickerSettings: PreferencesEntry, Equatable { public var emojiStickerSuggestionMode: EmojiStickerSuggestionMode + public var loopAnimatedStickers: Bool public static var defaultSettings: StickerSettings { - return StickerSettings(emojiStickerSuggestionMode: .all) + return StickerSettings(emojiStickerSuggestionMode: .all, loopAnimatedStickers: true) } - init(emojiStickerSuggestionMode: EmojiStickerSuggestionMode) { + init(emojiStickerSuggestionMode: EmojiStickerSuggestionMode, loopAnimatedStickers: Bool) { self.emojiStickerSuggestionMode = emojiStickerSuggestionMode + self.loopAnimatedStickers = loopAnimatedStickers } public init(decoder: PostboxDecoder) { self.emojiStickerSuggestionMode = EmojiStickerSuggestionMode(rawValue: decoder.decodeInt32ForKey("emojiStickerSuggestionMode", orElse: 0))! + self.loopAnimatedStickers = decoder.decodeBoolForKey("loopAnimatedStickers", orElse: true) } public func encode(_ encoder: PostboxEncoder) { encoder.encodeInt32(self.emojiStickerSuggestionMode.rawValue, forKey: "emojiStickerSuggestionMode") + encoder.encodeBool(self.loopAnimatedStickers, forKey: "loopAnimatedStickers") } public func isEqual(to: PreferencesEntry) -> Bool { @@ -36,11 +40,15 @@ public struct StickerSettings: PreferencesEntry, Equatable { } public static func ==(lhs: StickerSettings, rhs: StickerSettings) -> Bool { - return lhs.emojiStickerSuggestionMode == rhs.emojiStickerSuggestionMode + return lhs.emojiStickerSuggestionMode == rhs.emojiStickerSuggestionMode && lhs.loopAnimatedStickers == rhs.loopAnimatedStickers } public func withUpdatedEmojiStickerSuggestionMode(_ emojiStickerSuggestionMode: EmojiStickerSuggestionMode) -> StickerSettings { - return StickerSettings(emojiStickerSuggestionMode: emojiStickerSuggestionMode) + return StickerSettings(emojiStickerSuggestionMode: emojiStickerSuggestionMode, loopAnimatedStickers: self.loopAnimatedStickers) + } + + public func withUpdatedLoopAnimatedStickers(_ loopAnimatedStickers: Bool) -> StickerSettings { + return StickerSettings(emojiStickerSuggestionMode: self.emojiStickerSuggestionMode, loopAnimatedStickers: loopAnimatedStickers) } } From 5bca73598bdd3a1f0ac511b09df3557f3f87dbc4 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 15 Jul 2019 18:21:01 +0200 Subject: [PATCH 15/21] Fixed bot payload handover when opening the bot's start url with the bot's chat already opened --- .../TelegramUI/NavigateToChatController.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift index 42883c4ec2..0fcb9c3d46 100644 --- a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift +++ b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift @@ -38,6 +38,11 @@ public func navigateToChatController(navigationController: NavigationController, if activateInput { controller.activateInput() } + if let botStart = botStart { + controller.updateChatPresentationInterfaceState(interactive: false) { state -> ChatPresentationInterfaceState in + return state.updatedBotStartPayload(botStart.payload) + } + } found = true break } @@ -48,6 +53,11 @@ public func navigateToChatController(navigationController: NavigationController, let controller: ChatController if let chatController = chatController { controller = chatController + if let botStart = botStart { + controller.updateChatPresentationInterfaceState(interactive: false) { state -> ChatPresentationInterfaceState in + return state.updatedBotStartPayload(botStart.payload) + } + } } else { controller = ChatController(context: context, chatLocation: chatLocation, messageId: messageId, botStart: botStart) } From b84119b5d4bab6e67092752a88ca4c19617bf457 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Wed, 17 Jul 2019 00:24:16 +0200 Subject: [PATCH 16/21] Custom UI theme improvements --- Telegram-iOS/en.lproj/Localizable.strings | 3 + submodules/Display/Display/UIKitUtils.swift | 10 +- .../DefaultDarkAccentPresentationTheme.swift | 71 +- .../DefaultDarkPresentationTheme.swift | 96 +- .../Sources/DefaultPresentationTheme.swift | 21 +- .../Sources/PresentationData.swift | 12 +- .../Sources/PresentationStrings.swift | 6452 +++++++++-------- .../Sources/PresentationTheme.swift | 68 +- .../Sources/PresentationThemeCodable.swift | 1423 ++++ .../Sources/PresentationThemeDecodable.swift | 881 --- .../Sources/PresentationThemeDecoder.swift | 550 ++ .../Sources/PresentationThemeEncoder.swift | 274 + .../project.pbxproj | 16 +- .../TelegramUI/TelegramUI/AppDelegate.swift | 47 +- ...uthorizationSequenceSplashController.swift | 2 +- .../TelegramUI/ChatControllerNode.swift | 4 +- .../ChatMediaInputStickerPackItem.swift | 4 +- .../ChatMessageForwardInfoNode.swift | 1 - .../TelegramUI/ChatOverlayNavigationBar.swift | 2 +- .../ChatRecentActionsControllerNode.swift | 6 +- .../ChatTextLinkEditController.swift | 5 +- .../TelegramUI/DebugController.swift | 57 +- .../GroupStickerPackCurrentItem.swift | 1 - .../LegacyICloudFileController.swift | 24 +- .../LegacyInstantVideoController.swift | 2 +- .../TelegramUI/NotificationsAndSounds.swift | 33 +- .../TelegramUI/OpenChatMessage.swift | 43 +- .../TelegramUI/PasscodeBackground.swift | 4 +- .../PeerMediaCollectionControllerNode.swift | 2 +- .../Resources/PresentationStrings.mapping | Bin 118146 -> 118248 bytes .../TelegramUI/ShareController.swift | 2 +- .../TelegramUI/ThemeGridControllerNode.swift | 2 +- .../TelegramUI/ThemePreviewController.swift | 89 + .../ThemePreviewControllerNode.swift | 51 + .../ThemeSettingsAccentColorItem.swift | 6 + .../TelegramUI/ThemeSettingsAppIconItem.swift | 6 +- .../ThemeSettingsColorSliderNode.swift | 23 +- .../TelegramUI/ThemeSettingsController.swift | 7 +- .../TelegramUI/ThemeSettingsThemeItem.swift | 13 +- .../TelegramUI/TelegramUI/UrlEscaping.swift | 8 + .../TelegramUI/WallpaperColorPanelNode.swift | 4 +- .../WallpaperGalleryController.swift | 4 +- .../WallpaperPatternPanelNode.swift | 2 +- .../project.pbxproj | 8 + .../Sources/PresentationThemeSettings.swift | 3 + 45 files changed, 5987 insertions(+), 4355 deletions(-) create mode 100644 submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift delete mode 100644 submodules/TelegramPresentationData/Sources/PresentationThemeDecodable.swift create mode 100644 submodules/TelegramPresentationData/Sources/PresentationThemeDecoder.swift create mode 100644 submodules/TelegramPresentationData/Sources/PresentationThemeEncoder.swift create mode 100644 submodules/TelegramUI/TelegramUI/ThemePreviewController.swift create mode 100644 submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index 50ae3aa51e..309387a67b 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -4471,3 +4471,6 @@ Any member of this group will be able to see messages in the channel."; "Channel.TooMuchBots" = "Sorry, there are already too many bots in this group. Please remove some of the bots you're not using first."; "Channel.BotDoesntSupportGroups" = "Sorry, this bot is telling us it doesn't want to be added to groups. You can't add this bot unless its developers change their mind."; + +"StickerPacksSettings.AnimatedStickers" = "Loop Animated Stickers"; +"StickerPacksSettings.AnimatedStickersInfo" = "Animated stickers in a chat will play continuously."; diff --git a/submodules/Display/Display/UIKitUtils.swift b/submodules/Display/Display/UIKitUtils.swift index 82997a9820..13cd3dafe9 100644 --- a/submodules/Display/Display/UIKitUtils.swift +++ b/submodules/Display/Display/UIKitUtils.swift @@ -56,9 +56,13 @@ public extension UIColor { if hexString.hasPrefix("#") { scanner.scanLocation = 1 } - var num: UInt32 = 0 - if scanner.scanHexInt32(&num) { - self.init(rgb: num) + var value: UInt32 = 0 + if scanner.scanHexInt32(&value) { + if hexString.count > 7 { + self.init(argb: value) + } else { + self.init(rgb: value) + } } else { return nil } diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkAccentPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkAccentPresentationTheme.swift index f5b3bac02c..7a60a156f9 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkAccentPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkAccentPresentationTheme.swift @@ -9,8 +9,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem let mainBackgroundColor = accentColor.withMultiplied(hue: 1.024, saturation: 0.585, brightness: 0.25) let mainSelectionColor = accentColor.withMultiplied(hue: 1.03, saturation: 0.585, brightness: 0.12) let additionalBackgroundColor = accentColor.withMultiplied(hue: 1.024, saturation: 0.573, brightness: 0.18) - - let mainSeparatorColor = accentColor.withMultiplied(hue: 1.039, saturation: 0.560, brightness: 0.14) + + let mainSeparatorColor = accentColor.withMultiplied(hue: 1.033, saturation: 0.426, brightness: 0.34) let mainForegroundColor = accentColor.withMultiplied(hue: 0.99, saturation: 0.256, brightness: 0.62) let mainSecondaryColor = accentColor.withMultiplied(hue: 1.019, saturation: 0.109, brightness: 0.59) @@ -32,8 +32,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem selectedIconColor: accentColor, textColor: mainForegroundColor, selectedTextColor: accentColor, - badgeBackgroundColor: UIColor(rgb: 0xEF5B5B), - badgeStrokeColor: UIColor(rgb: 0xEF5B5B), + badgeBackgroundColor: UIColor(rgb: 0xef5b5b), + badgeStrokeColor: UIColor(rgb: 0xef5b5b), badgeTextColor: UIColor(rgb: 0xffffff) ) @@ -46,8 +46,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem accentTextColor: accentColor, backgroundColor: mainBackgroundColor, separatorColor: mainSeparatorColor, - badgeBackgroundColor: UIColor(rgb: 0xEF5B5B), - badgeStrokeColor: UIColor(rgb: 0xEF5B5B), + badgeBackgroundColor: UIColor(rgb: 0xef5b5b), + badgeStrokeColor: UIColor(rgb: 0xef5b5b), badgeTextColor: UIColor(rgb: 0xffffff) ) @@ -62,9 +62,9 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem separatorColor: additionalBackgroundColor ) - let auth = PresentationThemeAuth( - introStartButtonColor: accentColor, - introDotColor: mainSecondaryColor + let intro = PresentationThemeIntro( + startButtonColor: accentColor, + dotColor: mainSecondaryColor ) let passcode = PresentationThemePasscode( @@ -125,16 +125,17 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem controlSecondaryColor: mainSecondaryTextColor.withAlphaComponent(0.5), freeInputField: PresentationInputFieldTheme( backgroundColor: mainSecondaryTextColor.withAlphaComponent(0.5), + strokeColor: mainSecondaryTextColor.withAlphaComponent(0.5), placeholderColor: UIColor(rgb: 0x4d4d4d), primaryColor: .white, controlColor: UIColor(rgb: 0x4d4d4d) ), - mediaPlaceholderColor: UIColor(rgb: 0x1e2c3a), + mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), scrollIndicatorColor: UIColor(white: 1.0, alpha: 0.3), pageIndicatorInactiveColor: mainSecondaryTextColor.withAlphaComponent(0.4), inputClearButtonColor: mainSecondaryColor ) - + let chatList = PresentationThemeChatList( backgroundColor: additionalBackgroundColor, itemSeparatorColor: mainSeparatorColor, @@ -167,13 +168,15 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem verifiedIconForegroundColor: .white, secretIconColor: secretColor, pinnedArchiveAvatarColor: PresentationThemeArchiveAvatarColors(backgroundColors: PresentationThemeGradientColors(topColor: UIColor(rgb: 0x72d5fd), bottomColor: UIColor(rgb: 0x2a9ef1)), foregroundColor: .white), - unpinnedArchiveAvatarColor: PresentationThemeArchiveAvatarColors(backgroundColors: PresentationThemeGradientColors(topColor: UIColor(rgb: 0x5d6d77), bottomColor: UIColor(rgb: 0x4e5c64)), foregroundColor: additionalBackgroundColor), + unpinnedArchiveAvatarColor: PresentationThemeArchiveAvatarColors(backgroundColors: PresentationThemeGradientColors(topColor: accentColor.withMultiplied(hue: 0.985, saturation: 0.268, brightness: 0.47), bottomColor: accentColor.withMultiplied(hue: 0.98, saturation: 0.268, brightness: 0.39)), foregroundColor: additionalBackgroundColor), onlineDotColor: UIColor(rgb: 0x4cc91f) ) + let buttonStrokeColor = accentColor.withMultiplied(hue: 1.014, saturation: 0.56, brightness: 0.64).withAlphaComponent(0.15) + let message = PresentationThemeChatMessage( - incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.6), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: .white, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: UIColor(rgb: 0x1e2c3a), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x617583), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), actionButtonsTextColor: PresentationThemeVariableColor(color: .white)), - outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.6), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: .white, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: UIColor(rgb: 0x2d5883), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x8eaac0), radioProgress: UIColor(rgb: 0x89d0ff), highlight: UIColor(rgb: 0x89d0ff).withAlphaComponent(0.12), separator: UIColor(rgb: 0x264b70), bar: UIColor(rgb: 0x89d0ff)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), actionButtonsTextColor: PresentationThemeVariableColor(color: .white)), + incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white)), + outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.5), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: .white, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white)), freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), infoPrimaryTextColor: UIColor(rgb: 0xffffff), infoLinkTextColor: accentColor, @@ -181,7 +184,7 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem mediaDateAndStatusFillColor: UIColor(white: 0.0, alpha: 0.5), mediaDateAndStatusTextColor: .white, shareButtonFillColor: PresentationThemeVariableColor(color: additionalBackgroundColor.withAlphaComponent(0.5)), - shareButtonStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), + shareButtonStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), shareButtonForegroundColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2)), mediaOverlayControlColors: PresentationThemeFillForeground(fillColor: UIColor(rgb: 0x000000, alpha: 0.6), foregroundColor: .white), selectionControlColors: PresentationThemeFillStrokeForeground(fillColor: accentColor, strokeColor: .white, foregroundColor: .white), @@ -193,29 +196,25 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem components: PresentationThemeServiceMessageColor(withDefaultWallpaper: PresentationThemeServiceMessageColorComponents(fill: additionalBackgroundColor, primaryText: .white, linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: destructiveColor, dateFillStatic: additionalBackgroundColor, dateFillFloating: additionalBackgroundColor.withAlphaComponent(0.2)), withCustomWallpaper: PresentationThemeServiceMessageColorComponents(fill: additionalBackgroundColor, primaryText: .white, linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: destructiveColor, dateFillStatic: additionalBackgroundColor, dateFillFloating: additionalBackgroundColor.withAlphaComponent(0.2))), unreadBarFillColor: mainBackgroundColor, unreadBarStrokeColor: mainBackgroundColor, - unreadBarTextColor: UIColor(rgb: 0xffffff), - dateTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)) + unreadBarTextColor: .white, + dateTextColor: PresentationThemeVariableColor(color: .white) ) let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( buttonColor: accentColor, micLevelColor: accentColor.withAlphaComponent(0.2), - activeIconColor: .white, - panelControlFillColor: mainBackgroundColor, - panelControlStrokeColor: mainBackgroundColor, - panelControlContentPrimaryColor: mainSecondaryTextColor.withAlphaComponent(0.5), - panelControlContentAccentColor: accentColor + activeIconColor: .white ) - + let inputPanel = PresentationThemeChatInputPanel( panelBackgroundColor: mainBackgroundColor, - panelStrokeColor: mainSeparatorColor, + panelSeparatorColor: mainSeparatorColor, panelControlAccentColor: accentColor, panelControlColor: mainSecondaryTextColor.withAlphaComponent(0.5), panelControlDisabledColor: UIColor(rgb: 0x90979F, alpha: 0.5), panelControlDestructiveColor: destructiveColor, inputBackgroundColor: inputBackgroundColor, - inputStrokeColor: inputBackgroundColor, + inputStrokeColor: accentColor.withMultiplied(hue: 1.038, saturation: 0.463, brightness: 0.26), inputPlaceholderColor: mainSecondaryTextColor.withAlphaComponent(0.4), inputTextColor: UIColor(rgb: 0xffffff), inputControlColor: mainSecondaryTextColor.withAlphaComponent(0.4), @@ -234,20 +233,20 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem panelHighlightedIconBackgroundColor: inputBackgroundColor, stickersBackgroundColor: additionalBackgroundColor, stickersSectionTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), - stickersSearchBackgroundColor: UIColor(rgb: 0x121c25), - stickersSearchPlaceholderColor: UIColor(rgb: 0x788a96), + stickersSearchBackgroundColor: accentColor.withMultiplied(hue: 1.009, saturation: 0.621, brightness: 0.15), + stickersSearchPlaceholderColor: accentColor.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59), stickersSearchPrimaryColor: .white, - stickersSearchControlColor: UIColor(rgb: 0x788a96), + stickersSearchControlColor: accentColor.withMultiplied(hue: 0.99, saturation: 0.243, brightness: 0.59), gifsBackgroundColor: additionalBackgroundColor ) let inputButtonPanel = PresentationThemeInputButtonPanel( panelSeparatorColor: mainBackgroundColor, - panelBackgroundColor: UIColor(rgb: 0x161A20), - buttonFillColor: UIColor(rgb: 0x5B5F62), - buttonStrokeColor: UIColor(rgb: 0x0D1013), - buttonHighlightedFillColor: UIColor(rgb: 0x5B5F62, alpha: 0.7), - buttonHighlightedStrokeColor: UIColor(rgb: 0x0D1013), + panelBackgroundColor: accentColor.withMultiplied(hue: 1.048, saturation: 0.378, brightness: 0.13), + buttonFillColor: accentColor.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38), + buttonStrokeColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07), + buttonHighlightedFillColor: accentColor.withMultiplied(hue: 1.0, saturation: 0.085, brightness: 0.38).withAlphaComponent(0.7), + buttonHighlightedStrokeColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.39, brightness: 0.07), buttonTextColor: UIColor(rgb: 0xffffff) ) @@ -308,9 +307,9 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem return PresentationTheme( name: .builtin(.nightAccent), - author: nil, + author: "Telegram", overallDarkAppearance: true, - auth: auth, + intro: intro, passcode: passcode, rootController: rootController, list: list, @@ -321,7 +320,7 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem ) } -public let defaultDarkAccentPresentationTheme = makeDarkAccentPresentationTheme(accentColor: 0x2EA6FF) +public let defaultDarkAccentPresentationTheme = makeDarkAccentPresentationTheme(accentColor: 0x2ea6ff) public func makeDarkAccentPresentationTheme(accentColor: Int32?) -> PresentationTheme { let color: UIColor diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift index be1bc7d431..cb9a2440ea 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift @@ -36,16 +36,16 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem backgroundColor: UIColor(rgb: 0x1c1c1d), accentColor: accentColor, inputFillColor: UIColor(rgb: 0x0f0f0f), - inputTextColor: accentColor, + inputTextColor: .white, inputPlaceholderTextColor: UIColor(rgb: 0x8f8f8f), inputIconColor: UIColor(rgb: 0x8f8f8f), inputClearButtonColor: UIColor(rgb: 0x8f8f8f), separatorColor: UIColor(rgb: 0x3d3d40) ) - let auth = PresentationThemeAuth( - introStartButtonColor: accentColor, - introDotColor: UIColor(rgb: 0x5e5e5e) + let intro = PresentationThemeIntro( + startButtonColor: accentColor, + dotColor: UIColor(rgb: 0x5e5e5e) ) let passcode = PresentationThemePasscode( @@ -83,7 +83,7 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem itemBlocksSeparatorColor: UIColor(rgb: 0x3d3d40), itemPlainSeparatorColor: UIColor(rgb: 0x3d3d40), disclosureArrowColor: UIColor(rgb: 0x5a5a5e), - sectionHeaderTextColor: UIColor(rgb: 0xffffff), + sectionHeaderTextColor: UIColor(rgb: 0x8d8e93), freeTextColor: UIColor(rgb: 0x8d8e93), freeTextErrorColor: UIColor(rgb: 0xcf3030), freeTextSuccessColor: UIColor(rgb: 0x30cf30), @@ -101,11 +101,12 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem itemCheckColors: PresentationThemeFillStrokeForeground( fillColor: accentColor, strokeColor: UIColor(rgb: 0xffffff, alpha: 0.5), - foregroundColor: UIColor(rgb: 0x000000) + foregroundColor: .white ), controlSecondaryColor: UIColor(rgb: 0xffffff, alpha: 0.5), freeInputField: PresentationInputFieldTheme( backgroundColor: UIColor(rgb: 0xffffff, alpha: 0.5), + strokeColor: UIColor(rgb: 0xffffff, alpha: 0.5), placeholderColor: UIColor(rgb: 0x4d4d4d), primaryColor: .white, controlColor: UIColor(rgb: 0x4d4d4d) @@ -113,7 +114,7 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem mediaPlaceholderColor: UIColor(rgb: 0x1c1c1d), scrollIndicatorColor: UIColor(white: 1.0, alpha: 0.3), pageIndicatorInactiveColor: UIColor(white: 1.0, alpha: 0.3), - inputClearButtonColor: UIColor(rgb: 0x8B9197) + inputClearButtonColor: UIColor(rgb: 0x8b9197) ) let chatList = PresentationThemeChatList( @@ -134,8 +135,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem failedFillColor: destructiveColor, failedForegroundColor: .white, muteIconColor: UIColor(rgb: 0x8e8e92), - unreadBadgeActiveBackgroundColor: UIColor(rgb: 0xffffff), - unreadBadgeActiveTextColor: UIColor(rgb: 0x000000), + unreadBadgeActiveBackgroundColor: accentColor, + unreadBadgeActiveTextColor: .white, unreadBadgeInactiveBackgroundColor: UIColor(rgb: 0x666666), unreadBadgeInactiveTextColor:UIColor(rgb: 0x000000), pinnedBadgeColor: UIColor(rgb: 0x767677), @@ -152,9 +153,20 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem onlineDotColor: UIColor(rgb: 0x4cc91f) ) + let outgoingBubbleFillColor: UIColor + let outgoingBubbleHighlightedFillColor: UIColor + + if accentColor.rgb == UIColor.white.rgb { + outgoingBubbleFillColor = UIColor(rgb: 0x313131) + outgoingBubbleHighlightedFillColor = UIColor(rgb: 0x464646) + } else { + outgoingBubbleFillColor = accentColor + outgoingBubbleHighlightedFillColor = accentColor.withMultipliedBrightnessBy(1.421) + } + let message = PresentationThemeChatMessage( - incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.6), mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: .white, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0x000000), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), - outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: accentColor, highlightedFill: accentColor.withMultipliedBrightnessBy(1.421), stroke: accentColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: accentColor, highlightedFill: accentColor.withMultipliedBrightnessBy(1.421), stroke: accentColor)), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: .white, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: .white, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x838383), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(white: 0.3, alpha: 1.0), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), + incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.4), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0x000000), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), + outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor)), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: .white, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: .white, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: .white, highlight: UIColor(white: 1.0, alpha: 0.12), separator: UIColor(white: 1.0, alpha: 0.3), bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f))), infoPrimaryTextColor: .white, infoLinkTextColor: accentColor, @@ -173,38 +185,34 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem let serviceMessage = PresentationThemeServiceMessage( components: PresentationThemeServiceMessageColor(withDefaultWallpaper: PresentationThemeServiceMessageColorComponents(fill: UIColor(rgb: 0x1f1f1f, alpha: 1.0), primaryText: UIColor(rgb: 0xffffff), linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: destructiveColor, dateFillStatic: UIColor(rgb: 0x1f1f1f, alpha: 1.0), dateFillFloating: UIColor(rgb: 0xffffff, alpha: 0.2)), withCustomWallpaper: PresentationThemeServiceMessageColorComponents(fill: UIColor(rgb: 0x1f1f1f, alpha: 1.0), primaryText: .white, linkHighlight: UIColor(rgb: 0xffffff, alpha: 0.12), scam: destructiveColor, dateFillStatic: UIColor(rgb: 0x1f1f1f, alpha: 1.0), dateFillFloating: UIColor(rgb: 0xffffff, alpha: 0.2))), unreadBarFillColor: UIColor(rgb: 0x1b1b1b), - unreadBarStrokeColor: UIColor(rgb: 0x000000), - unreadBarTextColor: UIColor(rgb: 0xb2b2b2), - dateTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)) + unreadBarStrokeColor: UIColor(rgb: 0x1b1b1b), + unreadBarTextColor: .white, + dateTextColor: PresentationThemeVariableColor(color: .white) ) let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( buttonColor: accentColor, micLevelColor: accentColor.withAlphaComponent(0.2), - activeIconColor: .black, - panelControlFillColor: UIColor(rgb: 0x1C1C1D), - panelControlStrokeColor: UIColor(rgb: 0x1C1C1D), - panelControlContentPrimaryColor: UIColor(rgb: 0x9597a0), - panelControlContentAccentColor: accentColor + activeIconColor: .white ) let inputPanel = PresentationThemeChatInputPanel( panelBackgroundColor: UIColor(rgb: 0x1c1c1d), - panelStrokeColor: UIColor(rgb: 0x000000), + panelSeparatorColor: UIColor(rgb: 0x3d3d40), panelControlAccentColor: accentColor, panelControlColor: UIColor(rgb: 0x808080), panelControlDisabledColor: UIColor(rgb: 0x808080, alpha: 0.5), panelControlDestructiveColor: UIColor(rgb: 0xff3b30), inputBackgroundColor: UIColor(rgb: 0x060606), - inputStrokeColor: UIColor(rgb: 0x060606), + inputStrokeColor: UIColor(rgb: 0x353537), inputPlaceholderColor: UIColor(rgb: 0x7b7b7b), - inputTextColor: UIColor(rgb: 0xffffff), + inputTextColor: .white, inputControlColor: UIColor(rgb: 0x7b7b7b), actionControlFillColor: accentColor, actionControlForegroundColor: .white, - primaryTextColor: UIColor(rgb: 0xffffff), + primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), - mediaRecordingDotColor: .white, + mediaRecordingDotColor: destructiveColor, keyboardColor: .dark, mediaRecordingControl: inputPanelMediaRecordingControl ) @@ -225,20 +233,20 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem let inputButtonPanel = PresentationThemeInputButtonPanel( panelSeparatorColor: UIColor(rgb: 0x3d3d40), panelBackgroundColor: UIColor(rgb: 0x141414), - buttonFillColor: UIColor(rgb: 0x5A5A5A), - buttonStrokeColor: UIColor(rgb: 0x0C0C0C), - buttonHighlightedFillColor: UIColor(rgb: 0x5A5A5A, alpha: 0.7), - buttonHighlightedStrokeColor: UIColor(rgb: 0x0C0C0C), - buttonTextColor: UIColor(rgb: 0xffffff) + buttonFillColor: UIColor(rgb: 0x5a5a5a), + buttonStrokeColor: UIColor(rgb: 0x0c0c0c), + buttonHighlightedFillColor: UIColor(rgb: 0x5a5a5a, alpha: 0.7), + buttonHighlightedStrokeColor: UIColor(rgb: 0x0c0c0c), + buttonTextColor: .white ) let historyNavigation = PresentationThemeChatHistoryNavigation( - fillColor: UIColor(rgb: 0x1C1C1D), - strokeColor: UIColor(rgb: 0x000000), - foregroundColor: UIColor(rgb: 0xffffff), + fillColor: UIColor(rgb: 0x1c1c1d), + strokeColor: UIColor(rgb: 0x3d3d40), + foregroundColor: .white, badgeBackgroundColor: accentColor, - badgeStrokeColor: .black, - badgeTextColor: .black + badgeStrokeColor: accentColor, + badgeTextColor: .white ) let chat = PresentationThemeChat( @@ -264,13 +272,13 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0x5e5e5e), controlAccentColor: accentColor, - inputBackgroundColor: UIColor(rgb: 0x5a5a5e), - inputHollowBackgroundColor: UIColor(rgb: 0x5a5a5e), - inputBorderColor: UIColor(rgb: 0x5a5a5e), - inputPlaceholderColor: UIColor(rgb: 0xaaaaaa), + inputBackgroundColor: UIColor(rgb: 0x0f0f0f), + inputHollowBackgroundColor: UIColor(rgb: 0x0f0f0f), + inputBorderColor: UIColor(rgb: 0x0f0f0f), + inputPlaceholderColor: UIColor(rgb: 0x8f8f8f), inputTextColor: .white, - inputClearButtonColor: UIColor(rgb: 0xaaaaaa), - checkContentColor: .black + inputClearButtonColor: UIColor(rgb: 0x8f8f8f), + checkContentColor: .white ) let inAppNotification = PresentationThemeInAppNotification( @@ -280,8 +288,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem backgroundType: .dark, navigationBar: PresentationThemeExpandedNotificationNavigationBar( backgroundColor: UIColor(rgb: 0x1c1c1d), - primaryTextColor: accentColor, - controlColor: accentColor, + primaryTextColor: .white, + controlColor: .white, separatorColor: UIColor(rgb: 0x000000) ) ) @@ -289,9 +297,9 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem return PresentationTheme( name: .builtin(.nightGrayscale), - author: nil, + author: "Telegram", overallDarkAppearance: true, - auth: auth, + intro: intro, passcode: passcode, rootController: rootController, list: list, diff --git a/submodules/TelegramPresentationData/Sources/DefaultPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultPresentationTheme.swift index b7e9ec9142..a19c06c646 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultPresentationTheme.swift @@ -43,14 +43,14 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun separatorColor: UIColor(red: 0.6953125, green: 0.6953125, blue: 0.6953125, alpha: 1.0) ) - let auth = PresentationThemeAuth( - introStartButtonColor: UIColor(rgb: 0x2ca5e0), - introDotColor: UIColor(rgb: 0xd9d9d9) + let intro = PresentationThemeIntro( + startButtonColor: UIColor(rgb: 0x2ca5e0), + dotColor: UIColor(rgb: 0xd9d9d9) ) let passcode = PresentationThemePasscode( backgroundColors: PresentationThemeGradientColors(topColor: UIColor(rgb: 0x46739e), bottomColor: UIColor(rgb: 0x2a5982)), - buttonColor: nil + buttonColor: .clear ) let rootController = PresentationThemeRootController( @@ -106,6 +106,7 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun controlSecondaryColor: UIColor(rgb: 0xdedede), freeInputField: PresentationInputFieldTheme( backgroundColor: UIColor(rgb: 0xd6d6dc), + strokeColor: UIColor(rgb: 0xd6d6dc), placeholderColor: UIColor(rgb: 0x96979d), primaryColor: .black, controlColor: UIColor(rgb: 0x96979d) @@ -207,16 +208,12 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( buttonColor: accentColor, micLevelColor: accentColor.withAlphaComponent(0.2), - activeIconColor: .white, - panelControlFillColor: UIColor(rgb: 0xf7f7f7), - panelControlStrokeColor: UIColor(rgb: 0xb2b2b2), - panelControlContentPrimaryColor: UIColor(rgb: 0x9597a0), - panelControlContentAccentColor: accentColor + activeIconColor: .white ) let inputPanel = PresentationThemeChatInputPanel( panelBackgroundColor: UIColor(rgb: 0xf7f7f7), - panelStrokeColor: UIColor(rgb: 0xb2b2b2), + panelSeparatorColor: UIColor(rgb: 0xb2b2b2), panelControlAccentColor: accentColor, panelControlColor: UIColor(rgb: 0x858e99), panelControlDisabledColor: UIColor(rgb: 0x727b87, alpha: 0.5), @@ -315,9 +312,9 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun return PresentationTheme( name: .builtin(day ? .day : .dayClassic), - author: nil, + author: "Telegram", overallDarkAppearance: false, - auth: auth, + intro: intro, passcode: passcode, rootController: rootController, list: list, diff --git a/submodules/TelegramPresentationData/Sources/PresentationData.swift b/submodules/TelegramPresentationData/Sources/PresentationData.swift index 51b5557562..b11974299d 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationData.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationData.swift @@ -536,12 +536,12 @@ public func updatedPresentationData(accountManager: AccountManager, applicationI switch effectiveChatWallpaper { case .builtin, .color: switch themeSettings.automaticThemeSwitchSetting.theme { - case .nightAccent: - effectiveChatWallpaper = .color(0x18222d) - case .nightGrayscale: - effectiveChatWallpaper = .color(0x000000) - default: - break + case .nightAccent: + effectiveChatWallpaper = .color(0x18222d) + case .nightGrayscale: + effectiveChatWallpaper = .color(0x000000) + default: + break } default: break diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 0fdc0bf414..07c62cdc40 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -213,3845 +213,3853 @@ public final class PresentationStrings { public var Passport_Address_ScansHelp: String { return self._s[23]! } public var FastTwoStepSetup_PasswordHelp: String { return self._s[24]! } public var SettingsSearch_Synonyms_Notifications_Title: String { return self._s[25]! } - public var AutoDownloadSettings_Files: String { return self._s[26]! } - public var TextFormat_AddLinkPlaceholder: String { return self._s[27]! } - public var LastSeen_Lately: String { return self._s[32]! } + public var StickerPacksSettings_AnimatedStickers: String { return self._s[26]! } + public var AutoDownloadSettings_Files: String { return self._s[27]! } + public var TextFormat_AddLinkPlaceholder: String { return self._s[28]! } + public var LastSeen_Lately: String { return self._s[33]! } public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[33]!, self._r[33]!, [_1, _2]) + return formatWithArgumentRanges(self._s[34]!, self._r[34]!, [_1, _2]) } - public var Camera_Discard: String { return self._s[34]! } - public var Channel_EditAdmin_PermissinAddAdminOff: String { return self._s[35]! } - public var Login_InvalidPhoneError: String { return self._s[37]! } - public var SettingsSearch_Synonyms_Privacy_AuthSessions: String { return self._s[38]! } - public var GroupInfo_LabelOwner: String { return self._s[39]! } - public var Conversation_Moderate_Delete: String { return self._s[40]! } - public var Conversation_DeleteMessagesForEveryone: String { return self._s[41]! } - public var WatchRemote_AlertOpen: String { return self._s[42]! } + public var Camera_Discard: String { return self._s[35]! } + public var Channel_EditAdmin_PermissinAddAdminOff: String { return self._s[36]! } + public var Login_InvalidPhoneError: String { return self._s[38]! } + public var SettingsSearch_Synonyms_Privacy_AuthSessions: String { return self._s[39]! } + public var GroupInfo_LabelOwner: String { return self._s[40]! } + public var Conversation_Moderate_Delete: String { return self._s[41]! } + public var Conversation_DeleteMessagesForEveryone: String { return self._s[42]! } + public var WatchRemote_AlertOpen: String { return self._s[43]! } public func MediaPicker_Nof(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[43]!, self._r[43]!, [_0]) + return formatWithArgumentRanges(self._s[44]!, self._r[44]!, [_0]) } - public var AutoDownloadSettings_MediaTypes: String { return self._s[45]! } - public var Watch_GroupInfo_Title: String { return self._s[46]! } - public var Passport_Identity_AddPersonalDetails: String { return self._s[47]! } - public var Channel_Info_Members: String { return self._s[48]! } - public var LoginPassword_InvalidPasswordError: String { return self._s[50]! } - public var Conversation_LiveLocation: String { return self._s[51]! } - public var PrivacyLastSeenSettings_CustomShareSettingsHelp: String { return self._s[52]! } - public var NetworkUsageSettings_BytesReceived: String { return self._s[54]! } - public var Stickers_Search: String { return self._s[56]! } - public var NotificationsSound_Synth: String { return self._s[57]! } - public var LogoutOptions_LogOutInfo: String { return self._s[58]! } - public var NetworkUsageSettings_MediaAudioDataSection: String { return self._s[60]! } - public var AutoNightTheme_UseSunsetSunrise: String { return self._s[62]! } - public var FastTwoStepSetup_Title: String { return self._s[63]! } - public var Channel_Info_BlackList: String { return self._s[64]! } - public var Channel_AdminLog_InfoPanelTitle: String { return self._s[65]! } - public var Conversation_OpenFile: String { return self._s[66]! } - public var SecretTimer_ImageDescription: String { return self._s[67]! } - public var StickerSettings_ContextInfo: String { return self._s[68]! } - public var TwoStepAuth_GenericHelp: String { return self._s[70]! } - public var AutoDownloadSettings_Unlimited: String { return self._s[71]! } - public var PrivacyLastSeenSettings_NeverShareWith_Title: String { return self._s[72]! } - public var AutoDownloadSettings_DataUsageHigh: String { return self._s[73]! } + public var AutoDownloadSettings_MediaTypes: String { return self._s[46]! } + public var Watch_GroupInfo_Title: String { return self._s[47]! } + public var Passport_Identity_AddPersonalDetails: String { return self._s[48]! } + public var Channel_Info_Members: String { return self._s[49]! } + public var LoginPassword_InvalidPasswordError: String { return self._s[51]! } + public var Conversation_LiveLocation: String { return self._s[52]! } + public var PrivacyLastSeenSettings_CustomShareSettingsHelp: String { return self._s[53]! } + public var NetworkUsageSettings_BytesReceived: String { return self._s[55]! } + public var Stickers_Search: String { return self._s[57]! } + public var NotificationsSound_Synth: String { return self._s[58]! } + public var LogoutOptions_LogOutInfo: String { return self._s[59]! } + public var NetworkUsageSettings_MediaAudioDataSection: String { return self._s[61]! } + public var AutoNightTheme_UseSunsetSunrise: String { return self._s[63]! } + public var FastTwoStepSetup_Title: String { return self._s[64]! } + public var Channel_Info_BlackList: String { return self._s[65]! } + public var Channel_AdminLog_InfoPanelTitle: String { return self._s[66]! } + public var Conversation_OpenFile: String { return self._s[67]! } + public var SecretTimer_ImageDescription: String { return self._s[68]! } + public var StickerSettings_ContextInfo: String { return self._s[69]! } + public var TwoStepAuth_GenericHelp: String { return self._s[71]! } + public var AutoDownloadSettings_Unlimited: String { return self._s[72]! } + public var PrivacyLastSeenSettings_NeverShareWith_Title: String { return self._s[73]! } + public var AutoDownloadSettings_DataUsageHigh: String { return self._s[74]! } public func PUSH_CHAT_MESSAGE_VIDEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[74]!, self._r[74]!, [_1, _2]) + return formatWithArgumentRanges(self._s[75]!, self._r[75]!, [_1, _2]) } - public var Notifications_AddExceptionTitle: String { return self._s[75]! } - public var Watch_MessageView_Reply: String { return self._s[76]! } - public var Tour_Text6: String { return self._s[77]! } - public var TwoStepAuth_SetupPasswordEnterPasswordChange: String { return self._s[78]! } + public var Notifications_AddExceptionTitle: String { return self._s[76]! } + public var Watch_MessageView_Reply: String { return self._s[77]! } + public var Tour_Text6: String { return self._s[78]! } + public var TwoStepAuth_SetupPasswordEnterPasswordChange: String { return self._s[79]! } public func Notification_PinnedAnimationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[79]!, self._r[79]!, [_0]) - } - public func ShareFileTip_Text(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[80]!, self._r[80]!, [_0]) } - public var AccessDenied_LocationDenied: String { return self._s[81]! } - public var CallSettings_RecentCalls: String { return self._s[82]! } - public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[83]! } - public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[84]! } - public var Passport_Authorize: String { return self._s[85]! } - public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[86]! } - public var AutoDownloadSettings_Videos: String { return self._s[87]! } - public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[88]! } - public var Tour_StartButton: String { return self._s[89]! } - public var Watch_AppName: String { return self._s[91]! } - public var StickerPack_ErrorNotFound: String { return self._s[92]! } - public var Channel_Info_Subscribers: String { return self._s[93]! } - public func Channel_AdminLog_MessageGroupPreHistoryVisible(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[94]!, self._r[94]!, [_0]) + public func ShareFileTip_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[81]!, self._r[81]!, [_0]) } - public func DialogList_PinLimitError(_ _0: String) -> (String, [(Int, NSRange)]) { + public var AccessDenied_LocationDenied: String { return self._s[82]! } + public var CallSettings_RecentCalls: String { return self._s[83]! } + public var ConversationProfile_LeaveDeleteAndExit: String { return self._s[84]! } + public var Channel_Members_AddAdminErrorBlacklisted: String { return self._s[85]! } + public var Passport_Authorize: String { return self._s[86]! } + public var StickerPacksSettings_ArchivedMasks_Info: String { return self._s[87]! } + public var AutoDownloadSettings_Videos: String { return self._s[88]! } + public var TwoStepAuth_ReEnterPasswordTitle: String { return self._s[89]! } + public var Tour_StartButton: String { return self._s[90]! } + public var Watch_AppName: String { return self._s[92]! } + public var StickerPack_ErrorNotFound: String { return self._s[93]! } + public var Channel_Info_Subscribers: String { return self._s[94]! } + public func Channel_AdminLog_MessageGroupPreHistoryVisible(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[95]!, self._r[95]!, [_0]) } - public var Conversation_StopLiveLocation: String { return self._s[97]! } - public var Channel_AdminLogFilter_EventsAll: String { return self._s[98]! } - public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[100]! } - public var Username_LinkCopied: String { return self._s[102]! } - public var GroupRemoved_Title: String { return self._s[103]! } - public var SecretVideo_Title: String { return self._s[104]! } + public func DialogList_PinLimitError(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[96]!, self._r[96]!, [_0]) + } + public var Conversation_StopLiveLocation: String { return self._s[98]! } + public var Channel_AdminLogFilter_EventsAll: String { return self._s[99]! } + public var GroupInfo_InviteLink_CopyAlert_Success: String { return self._s[101]! } + public var Username_LinkCopied: String { return self._s[103]! } + public var GroupRemoved_Title: String { return self._s[104]! } + public var SecretVideo_Title: String { return self._s[105]! } public func PUSH_PINNED_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[105]!, self._r[105]!, [_1]) + return formatWithArgumentRanges(self._s[106]!, self._r[106]!, [_1]) } - public var AccessDenied_PhotosAndVideos: String { return self._s[106]! } + public var AccessDenied_PhotosAndVideos: String { return self._s[107]! } public func PUSH_CHANNEL_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[107]!, self._r[107]!, [_1]) + return formatWithArgumentRanges(self._s[108]!, self._r[108]!, [_1]) } - public var Map_OpenInGoogleMaps: String { return self._s[108]! } + public var Map_OpenInGoogleMaps: String { return self._s[109]! } public func Time_PreciseDate_m12(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[109]!, self._r[109]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[110]!, self._r[110]!, [_1, _2, _3]) } public func Channel_AdminLog_MessageKickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[110]!, self._r[110]!, [_1, _2]) + return formatWithArgumentRanges(self._s[111]!, self._r[111]!, [_1, _2]) } - public var Call_StatusRinging: String { return self._s[111]! } - public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[112]! } - public var Group_Username_InvalidStartsWithNumber: String { return self._s[113]! } - public var UserInfo_NotificationsEnabled: String { return self._s[114]! } - public var Map_Search: String { return self._s[115]! } - public var Login_TermsOfServiceHeader: String { return self._s[117]! } + public var Call_StatusRinging: String { return self._s[112]! } + public var SettingsSearch_Synonyms_EditProfile_Username: String { return self._s[113]! } + public var Group_Username_InvalidStartsWithNumber: String { return self._s[114]! } + public var UserInfo_NotificationsEnabled: String { return self._s[115]! } + public var Map_Search: String { return self._s[116]! } + public var Login_TermsOfServiceHeader: String { return self._s[118]! } public func Notification_PinnedVideoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[118]!, self._r[118]!, [_0]) - } - public func Channel_AdminLog_MessageToggleSignaturesOn(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[119]!, self._r[119]!, [_0]) } - public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[120]! } - public var Weekday_Today: String { return self._s[121]! } + public func Channel_AdminLog_MessageToggleSignaturesOn(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[120]!, self._r[120]!, [_0]) + } + public var TwoStepAuth_SetupPasswordConfirmPassword: String { return self._s[121]! } + public var Weekday_Today: String { return self._s[122]! } public func InstantPage_AuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[123]!, self._r[123]!, [_1, _2]) + return formatWithArgumentRanges(self._s[124]!, self._r[124]!, [_1, _2]) } public func Conversation_MessageDialogRetryAll(_ _1: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[124]!, self._r[124]!, ["\(_1)"]) + return formatWithArgumentRanges(self._s[125]!, self._r[125]!, ["\(_1)"]) } - public var Notification_PassportValuePersonalDetails: String { return self._s[126]! } - public var Channel_AdminLog_MessagePreviousLink: String { return self._s[127]! } - public var ChangePhoneNumberNumber_NewNumber: String { return self._s[128]! } - public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[129]! } - public var TwoStepAuth_ChangePasswordDescription: String { return self._s[130]! } - public var PhotoEditor_BlurToolLinear: String { return self._s[131]! } - public var Contacts_PermissionsAllowInSettings: String { return self._s[132]! } - public var Weekday_ShortMonday: String { return self._s[133]! } - public var Cache_KeepMedia: String { return self._s[134]! } - public var Passport_FieldIdentitySelfieHelp: String { return self._s[135]! } + public var Notification_PassportValuePersonalDetails: String { return self._s[127]! } + public var Channel_AdminLog_MessagePreviousLink: String { return self._s[128]! } + public var ChangePhoneNumberNumber_NewNumber: String { return self._s[129]! } + public var ApplyLanguage_LanguageNotSupportedError: String { return self._s[130]! } + public var TwoStepAuth_ChangePasswordDescription: String { return self._s[131]! } + public var PhotoEditor_BlurToolLinear: String { return self._s[132]! } + public var Contacts_PermissionsAllowInSettings: String { return self._s[133]! } + public var Weekday_ShortMonday: String { return self._s[134]! } + public var Cache_KeepMedia: String { return self._s[135]! } + public var Passport_FieldIdentitySelfieHelp: String { return self._s[136]! } public func PUSH_PINNED_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[136]!, self._r[136]!, [_1, _2]) + return formatWithArgumentRanges(self._s[137]!, self._r[137]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description4: String { return self._s[137]! } - public var Passport_Language_ru: String { return self._s[138]! } + public var Conversation_ClousStorageInfo_Description4: String { return self._s[138]! } + public var Passport_Language_ru: String { return self._s[139]! } public func Notification_CreatedChatWithTitle(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[139]!, self._r[139]!, [_0, _1]) + return formatWithArgumentRanges(self._s[140]!, self._r[140]!, [_0, _1]) } - public var WallpaperPreview_PatternIntensity: String { return self._s[140]! } - public var TwoStepAuth_RecoveryUnavailable: String { return self._s[141]! } - public var EnterPasscode_TouchId: String { return self._s[142]! } - public var PhotoEditor_QualityVeryHigh: String { return self._s[145]! } - public var Checkout_NewCard_SaveInfo: String { return self._s[147]! } - public var Gif_NoGifsPlaceholder: String { return self._s[149]! } - public var Conversation_OpenBotLinkTitle: String { return self._s[151]! } - public var ChatSettings_AutoDownloadEnabled: String { return self._s[152]! } - public var NetworkUsageSettings_BytesSent: String { return self._s[153]! } - public var Checkout_PasswordEntry_Pay: String { return self._s[154]! } - public var AuthSessions_TerminateSession: String { return self._s[155]! } - public var Message_File: String { return self._s[156]! } - public var MediaPicker_VideoMuteDescription: String { return self._s[157]! } - public var SocksProxySetup_ProxyStatusConnected: String { return self._s[158]! } - public var TwoStepAuth_RecoveryCode: String { return self._s[159]! } - public var EnterPasscode_EnterCurrentPasscode: String { return self._s[160]! } + public var WallpaperPreview_PatternIntensity: String { return self._s[141]! } + public var TwoStepAuth_RecoveryUnavailable: String { return self._s[142]! } + public var EnterPasscode_TouchId: String { return self._s[143]! } + public var PhotoEditor_QualityVeryHigh: String { return self._s[146]! } + public var Checkout_NewCard_SaveInfo: String { return self._s[148]! } + public var Gif_NoGifsPlaceholder: String { return self._s[150]! } + public var Conversation_OpenBotLinkTitle: String { return self._s[152]! } + public var ChatSettings_AutoDownloadEnabled: String { return self._s[153]! } + public var NetworkUsageSettings_BytesSent: String { return self._s[154]! } + public var Checkout_PasswordEntry_Pay: String { return self._s[155]! } + public var AuthSessions_TerminateSession: String { return self._s[156]! } + public var Message_File: String { return self._s[157]! } + public var MediaPicker_VideoMuteDescription: String { return self._s[158]! } + public var SocksProxySetup_ProxyStatusConnected: String { return self._s[159]! } + public var TwoStepAuth_RecoveryCode: String { return self._s[160]! } + public var EnterPasscode_EnterCurrentPasscode: String { return self._s[161]! } public func TwoStepAuth_EnterPasswordHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[161]!, self._r[161]!, [_0]) + return formatWithArgumentRanges(self._s[162]!, self._r[162]!, [_0]) } - public var Conversation_Moderate_Report: String { return self._s[163]! } - public var TwoStepAuth_EmailInvalid: String { return self._s[164]! } - public var Passport_Language_ms: String { return self._s[165]! } - public var Channel_Edit_AboutItem: String { return self._s[167]! } - public var DialogList_SearchSectionGlobal: String { return self._s[171]! } - public var AttachmentMenu_WebSearch: String { return self._s[172]! } - public var PasscodeSettings_TurnPasscodeOn: String { return self._s[173]! } - public var Channel_BanUser_Title: String { return self._s[174]! } - public var WallpaperPreview_SwipeTopText: String { return self._s[175]! } - public var ArchivedChats_IntroText2: String { return self._s[176]! } - public var Notification_Exceptions_DeleteAll: String { return self._s[177]! } + public var Conversation_Moderate_Report: String { return self._s[164]! } + public var TwoStepAuth_EmailInvalid: String { return self._s[165]! } + public var Passport_Language_ms: String { return self._s[166]! } + public var Channel_Edit_AboutItem: String { return self._s[168]! } + public var DialogList_SearchSectionGlobal: String { return self._s[172]! } + public var AttachmentMenu_WebSearch: String { return self._s[173]! } + public var PasscodeSettings_TurnPasscodeOn: String { return self._s[174]! } + public var Channel_BanUser_Title: String { return self._s[175]! } + public var WallpaperPreview_SwipeTopText: String { return self._s[176]! } + public var ArchivedChats_IntroText2: String { return self._s[177]! } + public var Notification_Exceptions_DeleteAll: String { return self._s[178]! } public func Channel_AdminLog_MessageTransferedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[178]!, self._r[178]!, [_1, _2]) + return formatWithArgumentRanges(self._s[179]!, self._r[179]!, [_1, _2]) } - public var ChatSearch_SearchPlaceholder: String { return self._s[180]! } - public var Passport_FieldAddressTranslationHelp: String { return self._s[181]! } - public var NotificationsSound_Aurora: String { return self._s[182]! } + public var ChatSearch_SearchPlaceholder: String { return self._s[181]! } + public var Passport_FieldAddressTranslationHelp: String { return self._s[182]! } + public var NotificationsSound_Aurora: String { return self._s[183]! } public func FileSize_GB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[183]!, self._r[183]!, [_0]) + return formatWithArgumentRanges(self._s[184]!, self._r[184]!, [_0]) } - public var AuthSessions_LoggedInWithTelegram: String { return self._s[186]! } + public var AuthSessions_LoggedInWithTelegram: String { return self._s[187]! } public func Privacy_GroupsAndChannels_InviteToGroupError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[187]!, self._r[187]!, [_0, _1]) + return formatWithArgumentRanges(self._s[188]!, self._r[188]!, [_0, _1]) } - public var Passport_PasswordNext: String { return self._s[188]! } - public var Bot_GroupStatusReadsHistory: String { return self._s[189]! } - public var EmptyGroupInfo_Line2: String { return self._s[190]! } - public var Settings_FAQ_Intro: String { return self._s[192]! } - public var PrivacySettings_PasscodeAndTouchId: String { return self._s[194]! } - public var FeaturedStickerPacks_Title: String { return self._s[195]! } - public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[196]! } - public var Username_Title: String { return self._s[197]! } + public var Passport_PasswordNext: String { return self._s[189]! } + public var Bot_GroupStatusReadsHistory: String { return self._s[190]! } + public var EmptyGroupInfo_Line2: String { return self._s[191]! } + public var Settings_FAQ_Intro: String { return self._s[193]! } + public var PrivacySettings_PasscodeAndTouchId: String { return self._s[195]! } + public var FeaturedStickerPacks_Title: String { return self._s[196]! } + public var TwoStepAuth_PasswordRemoveConfirmation: String { return self._s[197]! } + public var Username_Title: String { return self._s[198]! } public func Message_StickerText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[198]!, self._r[198]!, [_0]) + return formatWithArgumentRanges(self._s[199]!, self._r[199]!, [_0]) } - public var PasscodeSettings_AlphanumericCode: String { return self._s[199]! } - public var Localization_LanguageOther: String { return self._s[200]! } - public var Stickers_SuggestStickers: String { return self._s[201]! } + public var PasscodeSettings_AlphanumericCode: String { return self._s[200]! } + public var Localization_LanguageOther: String { return self._s[201]! } + public var Stickers_SuggestStickers: String { return self._s[202]! } public func Channel_AdminLog_MessageRemovedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[202]!, self._r[202]!, [_0]) + return formatWithArgumentRanges(self._s[203]!, self._r[203]!, [_0]) } - public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[203]! } - public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[204]! } - public var Conversation_DefaultRestrictedStickers: String { return self._s[205]! } + public var NotificationSettings_ShowNotificationsFromAccountsSection: String { return self._s[204]! } + public var Channel_AdminLogFilter_EventsAdmins: String { return self._s[205]! } + public var Conversation_DefaultRestrictedStickers: String { return self._s[206]! } public func Notification_PinnedDeletedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[206]!, self._r[206]!, [_0]) + return formatWithArgumentRanges(self._s[207]!, self._r[207]!, [_0]) } - public var Group_UpgradeConfirmation: String { return self._s[208]! } - public var DialogList_Unpin: String { return self._s[209]! } - public var Passport_Identity_DateOfBirth: String { return self._s[210]! } - public var Month_ShortOctober: String { return self._s[211]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[212]! } - public var Notification_CallCanceledShort: String { return self._s[213]! } - public var Passport_Phone_Help: String { return self._s[214]! } - public var Passport_Language_az: String { return self._s[216]! } - public var CreatePoll_TextPlaceholder: String { return self._s[218]! } - public var Passport_Identity_DocumentNumber: String { return self._s[219]! } - public var PhotoEditor_CurvesRed: String { return self._s[220]! } - public var PhoneNumberHelp_Alert: String { return self._s[222]! } - public var SocksProxySetup_Port: String { return self._s[223]! } - public var Checkout_PayNone: String { return self._s[224]! } - public var AutoDownloadSettings_WiFi: String { return self._s[225]! } - public var GroupInfo_GroupType: String { return self._s[226]! } - public var StickerSettings_ContextHide: String { return self._s[227]! } - public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[228]! } - public var Group_Setup_HistoryTitle: String { return self._s[230]! } - public var Passport_Identity_FilesUploadNew: String { return self._s[231]! } - public var PasscodeSettings_AutoLock: String { return self._s[232]! } - public var Passport_Title: String { return self._s[233]! } - public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[234]! } - public var GroupPermission_NoSendGifs: String { return self._s[235]! } - public var PrivacySettings_PasscodeOn: String { return self._s[236]! } - public var State_WaitingForNetwork: String { return self._s[238]! } + public var Group_UpgradeConfirmation: String { return self._s[209]! } + public var DialogList_Unpin: String { return self._s[210]! } + public var Passport_Identity_DateOfBirth: String { return self._s[211]! } + public var Month_ShortOctober: String { return self._s[212]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsSync: String { return self._s[213]! } + public var Notification_CallCanceledShort: String { return self._s[214]! } + public var Passport_Phone_Help: String { return self._s[215]! } + public var Passport_Language_az: String { return self._s[217]! } + public var CreatePoll_TextPlaceholder: String { return self._s[219]! } + public var Passport_Identity_DocumentNumber: String { return self._s[220]! } + public var PhotoEditor_CurvesRed: String { return self._s[221]! } + public var PhoneNumberHelp_Alert: String { return self._s[223]! } + public var SocksProxySetup_Port: String { return self._s[224]! } + public var Checkout_PayNone: String { return self._s[225]! } + public var AutoDownloadSettings_WiFi: String { return self._s[226]! } + public var GroupInfo_GroupType: String { return self._s[227]! } + public var StickerSettings_ContextHide: String { return self._s[228]! } + public var Passport_Address_OneOfTypeTemporaryRegistration: String { return self._s[229]! } + public var Group_Setup_HistoryTitle: String { return self._s[231]! } + public var Passport_Identity_FilesUploadNew: String { return self._s[232]! } + public var PasscodeSettings_AutoLock: String { return self._s[233]! } + public var Passport_Title: String { return self._s[234]! } + public var Channel_AdminLogFilter_EventsNewSubscribers: String { return self._s[235]! } + public var GroupPermission_NoSendGifs: String { return self._s[236]! } + public var PrivacySettings_PasscodeOn: String { return self._s[237]! } + public var State_WaitingForNetwork: String { return self._s[239]! } public func Notification_Invited(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[239]!, self._r[239]!, [_0, _1]) + return formatWithArgumentRanges(self._s[240]!, self._r[240]!, [_0, _1]) } - public var Calls_NotNow: String { return self._s[241]! } + public var Calls_NotNow: String { return self._s[242]! } public func Channel_DiscussionGroup_HeaderSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[242]!, self._r[242]!, [_0]) + return formatWithArgumentRanges(self._s[243]!, self._r[243]!, [_0]) } - public var UserInfo_SendMessage: String { return self._s[243]! } - public var TwoStepAuth_PasswordSet: String { return self._s[244]! } - public var Passport_DeleteDocument: String { return self._s[245]! } - public var SocksProxySetup_AddProxyTitle: String { return self._s[246]! } + public var UserInfo_SendMessage: String { return self._s[244]! } + public var TwoStepAuth_PasswordSet: String { return self._s[245]! } + public var Passport_DeleteDocument: String { return self._s[246]! } + public var SocksProxySetup_AddProxyTitle: String { return self._s[247]! } public func PUSH_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[247]!, self._r[247]!, [_1]) + return formatWithArgumentRanges(self._s[248]!, self._r[248]!, [_1]) } - public var GroupRemoved_Remove: String { return self._s[248]! } - public var Passport_FieldIdentity: String { return self._s[249]! } - public var Group_Setup_TypePrivateHelp: String { return self._s[250]! } - public var Conversation_Processing: String { return self._s[252]! } - public var ChatSettings_AutoPlayAnimations: String { return self._s[254]! } - public var AuthSessions_LogOutApplicationsHelp: String { return self._s[257]! } - public var Month_GenFebruary: String { return self._s[258]! } + public var GroupRemoved_Remove: String { return self._s[249]! } + public var Passport_FieldIdentity: String { return self._s[250]! } + public var Group_Setup_TypePrivateHelp: String { return self._s[251]! } + public var Conversation_Processing: String { return self._s[253]! } + public var ChatSettings_AutoPlayAnimations: String { return self._s[255]! } + public var AuthSessions_LogOutApplicationsHelp: String { return self._s[258]! } + public var Month_GenFebruary: String { return self._s[259]! } public func Login_InvalidPhoneEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[260]!, self._r[260]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[261]!, self._r[261]!, [_1, _2, _3, _4, _5]) } - public var Passport_Identity_TypeIdentityCard: String { return self._s[261]! } - public var AutoDownloadSettings_DataUsageMedium: String { return self._s[263]! } - public var GroupInfo_AddParticipant: String { return self._s[264]! } - public var KeyCommand_SendMessage: String { return self._s[265]! } - public var Map_LiveLocationShowAll: String { return self._s[267]! } - public var WallpaperSearch_ColorOrange: String { return self._s[269]! } - public var Appearance_AppIconDefaultX: String { return self._s[270]! } - public var Checkout_Receipt_Title: String { return self._s[271]! } - public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[272]! } - public var WallpaperPreview_PreviewTopText: String { return self._s[273]! } - public var Message_Contact: String { return self._s[274]! } - public var Call_StatusIncoming: String { return self._s[275]! } + public var Passport_Identity_TypeIdentityCard: String { return self._s[262]! } + public var AutoDownloadSettings_DataUsageMedium: String { return self._s[264]! } + public var GroupInfo_AddParticipant: String { return self._s[265]! } + public var KeyCommand_SendMessage: String { return self._s[266]! } + public var Map_LiveLocationShowAll: String { return self._s[268]! } + public var WallpaperSearch_ColorOrange: String { return self._s[270]! } + public var Appearance_AppIconDefaultX: String { return self._s[271]! } + public var Checkout_Receipt_Title: String { return self._s[272]! } + public var Group_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[273]! } + public var WallpaperPreview_PreviewTopText: String { return self._s[274]! } + public var Message_Contact: String { return self._s[275]! } + public var Call_StatusIncoming: String { return self._s[276]! } public func Channel_AdminLog_MessageKickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[276]!, self._r[276]!, [_1]) + return formatWithArgumentRanges(self._s[277]!, self._r[277]!, [_1]) } public func PUSH_ENCRYPTED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[278]!, self._r[278]!, [_1]) + return formatWithArgumentRanges(self._s[279]!, self._r[279]!, [_1]) } - public var Passport_FieldIdentityDetailsHelp: String { return self._s[279]! } - public var Conversation_ViewChannel: String { return self._s[280]! } + public var Passport_FieldIdentityDetailsHelp: String { return self._s[280]! } + public var Conversation_ViewChannel: String { return self._s[281]! } public func Time_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[281]!, self._r[281]!, [_0]) + return formatWithArgumentRanges(self._s[282]!, self._r[282]!, [_0]) } - public var Passport_Language_nl: String { return self._s[283]! } - public var Camera_Retake: String { return self._s[284]! } + public var Passport_Language_nl: String { return self._s[284]! } + public var Camera_Retake: String { return self._s[285]! } public func UserInfo_BlockActionTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[285]!, self._r[285]!, [_0]) + return formatWithArgumentRanges(self._s[286]!, self._r[286]!, [_0]) } - public var AuthSessions_LogOutApplications: String { return self._s[286]! } - public var ApplyLanguage_ApplySuccess: String { return self._s[287]! } - public var Tour_Title6: String { return self._s[288]! } - public var Map_ChooseAPlace: String { return self._s[289]! } - public var CallSettings_Never: String { return self._s[291]! } + public var AuthSessions_LogOutApplications: String { return self._s[287]! } + public var ApplyLanguage_ApplySuccess: String { return self._s[288]! } + public var Tour_Title6: String { return self._s[289]! } + public var Map_ChooseAPlace: String { return self._s[290]! } + public var CallSettings_Never: String { return self._s[292]! } public func Notification_ChangedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[292]!, self._r[292]!, [_0]) + return formatWithArgumentRanges(self._s[293]!, self._r[293]!, [_0]) } - public var ChannelRemoved_RemoveInfo: String { return self._s[293]! } + public var ChannelRemoved_RemoveInfo: String { return self._s[294]! } public func AutoDownloadSettings_PreloadVideoInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[294]!, self._r[294]!, [_0]) + return formatWithArgumentRanges(self._s[295]!, self._r[295]!, [_0]) } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[295]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsExceptions: String { return self._s[296]! } public func Conversation_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[296]!, self._r[296]!, [_0]) + return formatWithArgumentRanges(self._s[297]!, self._r[297]!, [_0]) } - public var GroupInfo_InviteLink_Title: String { return self._s[297]! } + public var GroupInfo_InviteLink_Title: String { return self._s[298]! } public func Channel_AdminLog_MessageUnkickedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[298]!, self._r[298]!, [_1, _2]) + return formatWithArgumentRanges(self._s[299]!, self._r[299]!, [_1, _2]) } - public var KeyCommand_ScrollUp: String { return self._s[299]! } - public var ContactInfo_URLLabelHomepage: String { return self._s[300]! } - public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[301]! } + public var KeyCommand_ScrollUp: String { return self._s[300]! } + public var ContactInfo_URLLabelHomepage: String { return self._s[301]! } + public var Channel_OwnershipTransfer_ChangeOwner: String { return self._s[302]! } public func Conversation_EncryptedPlaceholderTitleOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[302]!, self._r[302]!, [_0]) + return formatWithArgumentRanges(self._s[303]!, self._r[303]!, [_0]) } - public var CallFeedback_ReasonDistortedSpeech: String { return self._s[303]! } - public var Watch_LastSeen_WithinAWeek: String { return self._s[304]! } - public var Weekday_Tuesday: String { return self._s[306]! } - public var UserInfo_StartSecretChat: String { return self._s[308]! } - public var Passport_Identity_FilesTitle: String { return self._s[309]! } - public var Permissions_NotificationsAllow_v0: String { return self._s[310]! } - public var DialogList_DeleteConversationConfirmation: String { return self._s[312]! } - public var ChatList_UndoArchiveRevealedTitle: String { return self._s[313]! } - public var AuthSessions_Sessions: String { return self._s[314]! } + public var CallFeedback_ReasonDistortedSpeech: String { return self._s[304]! } + public var Watch_LastSeen_WithinAWeek: String { return self._s[305]! } + public var Weekday_Tuesday: String { return self._s[307]! } + public var UserInfo_StartSecretChat: String { return self._s[309]! } + public var Passport_Identity_FilesTitle: String { return self._s[310]! } + public var Permissions_NotificationsAllow_v0: String { return self._s[311]! } + public var DialogList_DeleteConversationConfirmation: String { return self._s[313]! } + public var ChatList_UndoArchiveRevealedTitle: String { return self._s[314]! } + public var AuthSessions_Sessions: String { return self._s[315]! } public func Settings_KeepPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[316]!, self._r[316]!, [_0]) + return formatWithArgumentRanges(self._s[317]!, self._r[317]!, [_0]) } - public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[317]! } - public var Call_StatusWaiting: String { return self._s[318]! } - public var CreateGroup_SoftUserLimitAlert: String { return self._s[319]! } - public var FastTwoStepSetup_HintHelp: String { return self._s[320]! } - public var WallpaperPreview_CustomColorBottomText: String { return self._s[321]! } - public var LogoutOptions_AddAccountText: String { return self._s[322]! } - public var PasscodeSettings_6DigitCode: String { return self._s[323]! } - public var Settings_LogoutConfirmationText: String { return self._s[324]! } - public var Passport_Identity_TypePassport: String { return self._s[326]! } + public var TwoStepAuth_RecoveryEmailChangeDescription: String { return self._s[318]! } + public var Call_StatusWaiting: String { return self._s[319]! } + public var CreateGroup_SoftUserLimitAlert: String { return self._s[320]! } + public var FastTwoStepSetup_HintHelp: String { return self._s[321]! } + public var WallpaperPreview_CustomColorBottomText: String { return self._s[322]! } + public var LogoutOptions_AddAccountText: String { return self._s[323]! } + public var PasscodeSettings_6DigitCode: String { return self._s[324]! } + public var Settings_LogoutConfirmationText: String { return self._s[325]! } + public var Passport_Identity_TypePassport: String { return self._s[327]! } public func PUSH_MESSAGE_VIDEOS(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[329]!, self._r[329]!, [_1, _2]) + return formatWithArgumentRanges(self._s[330]!, self._r[330]!, [_1, _2]) } - public var SocksProxySetup_SaveProxy: String { return self._s[330]! } - public var AccessDenied_SaveMedia: String { return self._s[331]! } - public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[333]! } - public var Settings_Title: String { return self._s[335]! } - public var Contacts_InviteSearchLabel: String { return self._s[337]! } - public var ConvertToSupergroup_Title: String { return self._s[338]! } + public var SocksProxySetup_SaveProxy: String { return self._s[331]! } + public var AccessDenied_SaveMedia: String { return self._s[332]! } + public var Checkout_ErrorInvoiceAlreadyPaid: String { return self._s[334]! } + public var Settings_Title: String { return self._s[336]! } + public var Contacts_InviteSearchLabel: String { return self._s[338]! } + public var ConvertToSupergroup_Title: String { return self._s[339]! } public func Channel_AdminLog_CaptionEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[339]!, self._r[339]!, [_0]) + return formatWithArgumentRanges(self._s[340]!, self._r[340]!, [_0]) } - public var InfoPlist_NSSiriUsageDescription: String { return self._s[340]! } + public var InfoPlist_NSSiriUsageDescription: String { return self._s[341]! } public func PUSH_MESSAGE_CHANNEL_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[341]!, self._r[341]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[342]!, self._r[342]!, [_1, _2, _3]) } - public var ChatSettings_AutomaticPhotoDownload: String { return self._s[342]! } - public var UserInfo_BotHelp: String { return self._s[343]! } - public var PrivacySettings_LastSeenEverybody: String { return self._s[344]! } - public var Checkout_Name: String { return self._s[345]! } - public var AutoDownloadSettings_DataUsage: String { return self._s[346]! } - public var Channel_BanUser_BlockFor: String { return self._s[347]! } - public var Checkout_ShippingAddress: String { return self._s[348]! } - public var AutoDownloadSettings_MaxVideoSize: String { return self._s[349]! } - public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[350]! } - public var Privacy_Forwards: String { return self._s[351]! } - public var Channel_BanUser_PermissionSendPolls: String { return self._s[352]! } + public var ChatSettings_AutomaticPhotoDownload: String { return self._s[343]! } + public var UserInfo_BotHelp: String { return self._s[344]! } + public var PrivacySettings_LastSeenEverybody: String { return self._s[345]! } + public var Checkout_Name: String { return self._s[346]! } + public var AutoDownloadSettings_DataUsage: String { return self._s[347]! } + public var Channel_BanUser_BlockFor: String { return self._s[348]! } + public var Checkout_ShippingAddress: String { return self._s[349]! } + public var AutoDownloadSettings_MaxVideoSize: String { return self._s[350]! } + public var Privacy_PaymentsClearInfoDoneHelp: String { return self._s[351]! } + public var Privacy_Forwards: String { return self._s[352]! } + public var Channel_BanUser_PermissionSendPolls: String { return self._s[353]! } public func SecretVideo_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[355]!, self._r[355]!, [_0]) + return formatWithArgumentRanges(self._s[356]!, self._r[356]!, [_0]) } - public var Contacts_SortedByName: String { return self._s[356]! } - public var Group_OwnershipTransfer_Title: String { return self._s[357]! } - public var Group_LeaveGroup: String { return self._s[358]! } - public var Settings_UsernameEmpty: String { return self._s[359]! } + public var Contacts_SortedByName: String { return self._s[357]! } + public var Group_OwnershipTransfer_Title: String { return self._s[358]! } + public var Group_LeaveGroup: String { return self._s[359]! } + public var Settings_UsernameEmpty: String { return self._s[360]! } public func Notification_PinnedPollMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[360]!, self._r[360]!, [_0]) + return formatWithArgumentRanges(self._s[361]!, self._r[361]!, [_0]) } public func TwoStepAuth_ConfirmEmailDescription(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[361]!, self._r[361]!, [_1]) + return formatWithArgumentRanges(self._s[362]!, self._r[362]!, [_1]) } public func Channel_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[362]!, self._r[362]!, [_1, _2]) + return formatWithArgumentRanges(self._s[363]!, self._r[363]!, [_1, _2]) } - public var Message_ImageExpired: String { return self._s[363]! } - public var TwoStepAuth_RecoveryFailed: String { return self._s[365]! } - public var UserInfo_AddToExisting: String { return self._s[366]! } - public var TwoStepAuth_EnabledSuccess: String { return self._s[367]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[368]! } + public var Message_ImageExpired: String { return self._s[364]! } + public var TwoStepAuth_RecoveryFailed: String { return self._s[366]! } + public var UserInfo_AddToExisting: String { return self._s[367]! } + public var TwoStepAuth_EnabledSuccess: String { return self._s[368]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_SetColor: String { return self._s[369]! } public func PUSH_CHANNEL_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[369]!, self._r[369]!, [_1]) + return formatWithArgumentRanges(self._s[370]!, self._r[370]!, [_1]) } - public var Notifications_GroupNotificationsAlert: String { return self._s[370]! } - public var Passport_Language_km: String { return self._s[371]! } - public var SocksProxySetup_AdNoticeHelp: String { return self._s[373]! } - public var Notification_CallMissedShort: String { return self._s[374]! } - public var ReportPeer_ReasonOther_Send: String { return self._s[375]! } - public var Watch_Compose_Send: String { return self._s[376]! } - public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[379]! } - public var Conversation_HoldForVideo: String { return self._s[380]! } - public var CheckoutInfo_ErrorCityInvalid: String { return self._s[382]! } - public var Appearance_AutoNightThemeDisabled: String { return self._s[384]! } - public var Channel_LinkItem: String { return self._s[385]! } + public var Notifications_GroupNotificationsAlert: String { return self._s[371]! } + public var Passport_Language_km: String { return self._s[372]! } + public var SocksProxySetup_AdNoticeHelp: String { return self._s[374]! } + public var Notification_CallMissedShort: String { return self._s[375]! } + public var ReportPeer_ReasonOther_Send: String { return self._s[376]! } + public var Watch_Compose_Send: String { return self._s[377]! } + public var Passport_Identity_TypeInternalPassportUploadScan: String { return self._s[380]! } + public var Conversation_HoldForVideo: String { return self._s[381]! } + public var CheckoutInfo_ErrorCityInvalid: String { return self._s[383]! } + public var Appearance_AutoNightThemeDisabled: String { return self._s[385]! } + public var Channel_LinkItem: String { return self._s[386]! } public func PrivacySettings_LastSeenContactsMinusPlus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[386]!, self._r[386]!, [_0, _1]) + return formatWithArgumentRanges(self._s[387]!, self._r[387]!, [_0, _1]) } public func Passport_Identity_NativeNameTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[389]!, self._r[389]!, [_0]) + return formatWithArgumentRanges(self._s[390]!, self._r[390]!, [_0]) } - public var Passport_Language_dv: String { return self._s[390]! } - public var Undo_LeftChannel: String { return self._s[391]! } - public var Notifications_ExceptionsMuted: String { return self._s[392]! } - public var ChatList_UnhideAction: String { return self._s[393]! } - public var Conversation_ContextMenuShare: String { return self._s[394]! } - public var Conversation_ContextMenuStickerPackInfo: String { return self._s[395]! } - public var ShareFileTip_Title: String { return self._s[396]! } - public var NotificationsSound_Chord: String { return self._s[397]! } + public var Passport_Language_dv: String { return self._s[391]! } + public var Undo_LeftChannel: String { return self._s[392]! } + public var Notifications_ExceptionsMuted: String { return self._s[393]! } + public var ChatList_UnhideAction: String { return self._s[394]! } + public var Conversation_ContextMenuShare: String { return self._s[395]! } + public var Conversation_ContextMenuStickerPackInfo: String { return self._s[396]! } + public var ShareFileTip_Title: String { return self._s[397]! } + public var NotificationsSound_Chord: String { return self._s[398]! } public func PUSH_CHAT_RETURNED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[398]!, self._r[398]!, [_1, _2]) + return formatWithArgumentRanges(self._s[399]!, self._r[399]!, [_1, _2]) } - public var Passport_Address_EditTemporaryRegistration: String { return self._s[399]! } + public var Passport_Address_EditTemporaryRegistration: String { return self._s[400]! } public func Notification_Joined(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[400]!, self._r[400]!, [_0]) + return formatWithArgumentRanges(self._s[401]!, self._r[401]!, [_0]) } - public var Notification_CallOutgoingShort: String { return self._s[402]! } + public var Notification_CallOutgoingShort: String { return self._s[403]! } public func Watch_Time_ShortFullAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[403]!, self._r[403]!, [_1, _2]) + return formatWithArgumentRanges(self._s[404]!, self._r[404]!, [_1, _2]) } - public var Passport_Address_TypeUtilityBill: String { return self._s[404]! } - public var Privacy_Forwards_LinkIfAllowed: String { return self._s[405]! } - public var ReportPeer_Report: String { return self._s[406]! } - public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[407]! } - public var GroupInfo_DeactivatedStatus: String { return self._s[408]! } - public var StickerPack_Send: String { return self._s[409]! } - public var Login_CodeSentInternal: String { return self._s[410]! } - public var GroupInfo_InviteLink_LinkSection: String { return self._s[411]! } + public var Passport_Address_TypeUtilityBill: String { return self._s[405]! } + public var Privacy_Forwards_LinkIfAllowed: String { return self._s[406]! } + public var ReportPeer_Report: String { return self._s[407]! } + public var SettingsSearch_Synonyms_Proxy_Title: String { return self._s[408]! } + public var GroupInfo_DeactivatedStatus: String { return self._s[409]! } + public var StickerPack_Send: String { return self._s[410]! } + public var Login_CodeSentInternal: String { return self._s[411]! } + public var GroupInfo_InviteLink_LinkSection: String { return self._s[412]! } public func Channel_AdminLog_MessageDeleted(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[412]!, self._r[412]!, [_0]) + return formatWithArgumentRanges(self._s[413]!, self._r[413]!, [_0]) } public func Conversation_EncryptionWaiting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[414]!, self._r[414]!, [_0]) + return formatWithArgumentRanges(self._s[415]!, self._r[415]!, [_0]) } - public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[415]! } + public var Channel_BanUser_PermissionSendStickersAndGifs: String { return self._s[416]! } public func PUSH_PINNED_GAME(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[416]!, self._r[416]!, [_1]) + return formatWithArgumentRanges(self._s[417]!, self._r[417]!, [_1]) } - public var ReportPeer_ReasonViolence: String { return self._s[418]! } - public var Map_Locating: String { return self._s[419]! } - public var AutoDownloadSettings_GroupChats: String { return self._s[421]! } - public var CheckoutInfo_SaveInfo: String { return self._s[422]! } - public var SharedMedia_EmptyLinksText: String { return self._s[424]! } - public var Passport_Address_CityPlaceholder: String { return self._s[425]! } - public var CheckoutInfo_ErrorStateInvalid: String { return self._s[426]! } - public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[427]! } - public var Channel_AdminLog_CanAddAdmins: String { return self._s[429]! } + public var ReportPeer_ReasonViolence: String { return self._s[419]! } + public var Map_Locating: String { return self._s[420]! } + public var AutoDownloadSettings_GroupChats: String { return self._s[422]! } + public var CheckoutInfo_SaveInfo: String { return self._s[423]! } + public var SharedMedia_EmptyLinksText: String { return self._s[425]! } + public var Passport_Address_CityPlaceholder: String { return self._s[426]! } + public var CheckoutInfo_ErrorStateInvalid: String { return self._s[427]! } + public var Privacy_ProfilePhoto_CustomHelp: String { return self._s[428]! } + public var Channel_AdminLog_CanAddAdmins: String { return self._s[430]! } public func PUSH_CHANNEL_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[430]!, self._r[430]!, [_1]) + return formatWithArgumentRanges(self._s[431]!, self._r[431]!, [_1]) } public func Time_MonthOfYear_m8(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[431]!, self._r[431]!, [_0]) + return formatWithArgumentRanges(self._s[432]!, self._r[432]!, [_0]) } - public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[432]! } - public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[433]! } - public var ChangePhoneNumberCode_Code: String { return self._s[434]! } + public var InfoPlist_NSLocationWhenInUseUsageDescription: String { return self._s[433]! } + public var GroupInfo_InviteLink_RevokeAlert_Success: String { return self._s[434]! } + public var ChangePhoneNumberCode_Code: String { return self._s[435]! } public func UserInfo_NotificationsDefaultSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[435]!, self._r[435]!, [_0]) + return formatWithArgumentRanges(self._s[436]!, self._r[436]!, [_0]) } - public var TwoStepAuth_SetupEmail: String { return self._s[436]! } - public var HashtagSearch_AllChats: String { return self._s[437]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[439]! } + public var TwoStepAuth_SetupEmail: String { return self._s[437]! } + public var HashtagSearch_AllChats: String { return self._s[438]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingCellular: String { return self._s[440]! } public func ChatList_DeleteForEveryone(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[440]!, self._r[440]!, [_0]) + return formatWithArgumentRanges(self._s[441]!, self._r[441]!, [_0]) } - public var PhotoEditor_QualityHigh: String { return self._s[442]! } + public var PhotoEditor_QualityHigh: String { return self._s[443]! } public func Passport_Phone_UseTelegramNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[443]!, self._r[443]!, [_0]) + return formatWithArgumentRanges(self._s[444]!, self._r[444]!, [_0]) } - public var ApplyLanguage_ApplyLanguageAction: String { return self._s[444]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[445]! } - public var Message_LiveLocation: String { return self._s[446]! } - public var Cache_LowDiskSpaceText: String { return self._s[447]! } - public var Conversation_SendMessage: String { return self._s[448]! } - public var AuthSessions_EmptyTitle: String { return self._s[449]! } - public var Privacy_PhoneNumber: String { return self._s[450]! } - public var PeopleNearby_CreateGroup: String { return self._s[451]! } - public var CallSettings_UseLessData: String { return self._s[452]! } - public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[453]! } - public var Stickers_AddToFavorites: String { return self._s[454]! } - public var PhotoEditor_QualityLow: String { return self._s[455]! } - public var Watch_UserInfo_Unblock: String { return self._s[456]! } - public var Settings_Logout: String { return self._s[457]! } + public var ApplyLanguage_ApplyLanguageAction: String { return self._s[445]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsPreview: String { return self._s[446]! } + public var Message_LiveLocation: String { return self._s[447]! } + public var Cache_LowDiskSpaceText: String { return self._s[448]! } + public var Conversation_SendMessage: String { return self._s[449]! } + public var AuthSessions_EmptyTitle: String { return self._s[450]! } + public var Privacy_PhoneNumber: String { return self._s[451]! } + public var PeopleNearby_CreateGroup: String { return self._s[452]! } + public var CallSettings_UseLessData: String { return self._s[453]! } + public var NetworkUsageSettings_MediaDocumentDataSection: String { return self._s[454]! } + public var Stickers_AddToFavorites: String { return self._s[455]! } + public var PhotoEditor_QualityLow: String { return self._s[456]! } + public var Watch_UserInfo_Unblock: String { return self._s[457]! } + public var Settings_Logout: String { return self._s[458]! } public func PUSH_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[458]!, self._r[458]!, [_1]) + return formatWithArgumentRanges(self._s[459]!, self._r[459]!, [_1]) } - public var ContactInfo_PhoneLabelWork: String { return self._s[459]! } - public var ChannelInfo_Stats: String { return self._s[460]! } - public var TextFormat_Link: String { return self._s[461]! } + public var ContactInfo_PhoneLabelWork: String { return self._s[460]! } + public var ChannelInfo_Stats: String { return self._s[461]! } + public var TextFormat_Link: String { return self._s[462]! } public func Date_ChatDateHeader(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[462]!, self._r[462]!, [_1, _2]) + return formatWithArgumentRanges(self._s[463]!, self._r[463]!, [_1, _2]) } public func Message_ForwardedMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[463]!, self._r[463]!, [_0]) + return formatWithArgumentRanges(self._s[464]!, self._r[464]!, [_0]) } - public var Watch_Notification_Joined: String { return self._s[464]! } - public var Group_Setup_TypePublicHelp: String { return self._s[465]! } - public var Passport_Scans_UploadNew: String { return self._s[466]! } - public var Checkout_LiabilityAlertTitle: String { return self._s[467]! } - public var DialogList_Title: String { return self._s[470]! } - public var NotificationSettings_ContactJoined: String { return self._s[471]! } - public var GroupInfo_LabelAdmin: String { return self._s[472]! } - public var KeyCommand_ChatInfo: String { return self._s[473]! } - public var Conversation_EditingCaptionPanelTitle: String { return self._s[474]! } - public var Call_ReportIncludeLog: String { return self._s[475]! } + public var Watch_Notification_Joined: String { return self._s[465]! } + public var Group_Setup_TypePublicHelp: String { return self._s[466]! } + public var Passport_Scans_UploadNew: String { return self._s[467]! } + public var Checkout_LiabilityAlertTitle: String { return self._s[468]! } + public var DialogList_Title: String { return self._s[471]! } + public var NotificationSettings_ContactJoined: String { return self._s[472]! } + public var GroupInfo_LabelAdmin: String { return self._s[473]! } + public var KeyCommand_ChatInfo: String { return self._s[474]! } + public var Conversation_EditingCaptionPanelTitle: String { return self._s[475]! } + public var Call_ReportIncludeLog: String { return self._s[476]! } public func Notifications_ExceptionsChangeSound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[478]!, self._r[478]!, [_0]) + return formatWithArgumentRanges(self._s[479]!, self._r[479]!, [_0]) } - public var LocalGroup_IrrelevantWarning: String { return self._s[479]! } - public var ChatAdmins_AllMembersAreAdmins: String { return self._s[480]! } - public var Conversation_DefaultRestrictedInline: String { return self._s[481]! } - public var Message_Sticker: String { return self._s[482]! } - public var LastSeen_JustNow: String { return self._s[484]! } - public var Passport_Email_EmailPlaceholder: String { return self._s[486]! } - public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[487]! } - public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[488]! } - public var Channel_EditAdmin_PermissionsHeader: String { return self._s[489]! } - public var TwoStepAuth_Email: String { return self._s[490]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[491]! } - public var PhotoEditor_BlurToolOff: String { return self._s[492]! } - public var Message_PinnedStickerMessage: String { return self._s[493]! } - public var ContactInfo_PhoneLabelPager: String { return self._s[494]! } - public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[495]! } - public var Passport_DiscardMessageTitle: String { return self._s[496]! } - public var Privacy_PaymentsTitle: String { return self._s[497]! } - public var Channel_DiscussionGroup_Header: String { return self._s[499]! } - public var Appearance_ColorTheme: String { return self._s[500]! } - public var UserInfo_ShareContact: String { return self._s[501]! } - public var Passport_Address_TypePassportRegistration: String { return self._s[502]! } - public var Common_More: String { return self._s[503]! } - public var Watch_Message_Call: String { return self._s[504]! } - public var Profile_EncryptionKey: String { return self._s[507]! } - public var Privacy_TopPeers: String { return self._s[508]! } - public var Conversation_StopPollConfirmation: String { return self._s[509]! } - public var Privacy_TopPeersWarning: String { return self._s[511]! } - public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[512]! } - public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[513]! } - public var DialogList_SearchSectionMessages: String { return self._s[516]! } - public var Notifications_ChannelNotifications: String { return self._s[517]! } - public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[518]! } - public var Passport_Language_sk: String { return self._s[519]! } - public var Notification_MessageLifetime1h: String { return self._s[520]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[521]! } - public var Call_ReportSkip: String { return self._s[523]! } - public var Cache_ServiceFiles: String { return self._s[524]! } - public var Group_ErrorAddTooMuchAdmins: String { return self._s[525]! } - public var Map_Hybrid: String { return self._s[526]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[528]! } - public var ChatSettings_AutoDownloadVideos: String { return self._s[530]! } - public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[531]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[532]! } - public var SocksProxySetup_ProxyTelegram: String { return self._s[535]! } + public var LocalGroup_IrrelevantWarning: String { return self._s[480]! } + public var ChatAdmins_AllMembersAreAdmins: String { return self._s[481]! } + public var Conversation_DefaultRestrictedInline: String { return self._s[482]! } + public var Message_Sticker: String { return self._s[483]! } + public var LastSeen_JustNow: String { return self._s[485]! } + public var Passport_Email_EmailPlaceholder: String { return self._s[487]! } + public var SettingsSearch_Synonyms_AppLanguage: String { return self._s[488]! } + public var Channel_AdminLogFilter_EventsEditedMessages: String { return self._s[489]! } + public var Channel_EditAdmin_PermissionsHeader: String { return self._s[490]! } + public var TwoStepAuth_Email: String { return self._s[491]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsSound: String { return self._s[492]! } + public var PhotoEditor_BlurToolOff: String { return self._s[493]! } + public var Message_PinnedStickerMessage: String { return self._s[494]! } + public var ContactInfo_PhoneLabelPager: String { return self._s[495]! } + public var SettingsSearch_Synonyms_Appearance_TextSize: String { return self._s[496]! } + public var Passport_DiscardMessageTitle: String { return self._s[497]! } + public var Privacy_PaymentsTitle: String { return self._s[498]! } + public var Channel_DiscussionGroup_Header: String { return self._s[500]! } + public var Appearance_ColorTheme: String { return self._s[501]! } + public var UserInfo_ShareContact: String { return self._s[502]! } + public var Passport_Address_TypePassportRegistration: String { return self._s[503]! } + public var Common_More: String { return self._s[504]! } + public var Watch_Message_Call: String { return self._s[505]! } + public var Profile_EncryptionKey: String { return self._s[508]! } + public var Privacy_TopPeers: String { return self._s[509]! } + public var Conversation_StopPollConfirmation: String { return self._s[510]! } + public var Privacy_TopPeersWarning: String { return self._s[512]! } + public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[513]! } + public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[514]! } + public var DialogList_SearchSectionMessages: String { return self._s[517]! } + public var Notifications_ChannelNotifications: String { return self._s[518]! } + public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[519]! } + public var Passport_Language_sk: String { return self._s[520]! } + public var Notification_MessageLifetime1h: String { return self._s[521]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[522]! } + public var Call_ReportSkip: String { return self._s[524]! } + public var Cache_ServiceFiles: String { return self._s[525]! } + public var Group_ErrorAddTooMuchAdmins: String { return self._s[526]! } + public var Map_Hybrid: String { return self._s[527]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[529]! } + public var ChatSettings_AutoDownloadVideos: String { return self._s[531]! } + public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[532]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[533]! } + public var SocksProxySetup_ProxyTelegram: String { return self._s[536]! } public func PUSH_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[536]!, self._r[536]!, [_1]) + return formatWithArgumentRanges(self._s[537]!, self._r[537]!, [_1]) } - public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[538]! } + public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[539]! } public func PUSH_CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[539]!, self._r[539]!, [_1, _2]) + return formatWithArgumentRanges(self._s[540]!, self._r[540]!, [_1, _2]) } - public var Conversation_LiveLocationYou: String { return self._s[540]! } - public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[541]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[542]! } - public var UserInfo_ShareBot: String { return self._s[545]! } + public var Conversation_LiveLocationYou: String { return self._s[541]! } + public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[542]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[543]! } + public var UserInfo_ShareBot: String { return self._s[546]! } public func PUSH_AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[546]!, self._r[546]!, [_1, _2]) + return formatWithArgumentRanges(self._s[547]!, self._r[547]!, [_1, _2]) } - public var PhotoEditor_ShadowsTint: String { return self._s[547]! } - public var Message_Audio: String { return self._s[548]! } - public var Passport_Language_lt: String { return self._s[549]! } + public var PhotoEditor_ShadowsTint: String { return self._s[548]! } + public var Message_Audio: String { return self._s[549]! } + public var Passport_Language_lt: String { return self._s[550]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[550]!, self._r[550]!, [_0]) + return formatWithArgumentRanges(self._s[551]!, self._r[551]!, [_0]) } - public var Permissions_SiriText_v0: String { return self._s[551]! } - public var Conversation_FileICloudDrive: String { return self._s[552]! } - public var Notifications_Badge_IncludeMutedChats: String { return self._s[553]! } + public var Permissions_SiriText_v0: String { return self._s[552]! } + public var Conversation_FileICloudDrive: String { return self._s[553]! } + public var Notifications_Badge_IncludeMutedChats: String { return self._s[554]! } public func Notification_NewAuthDetected(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[554]!, self._r[554]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[555]!, self._r[555]!, [_1, _2, _3, _4, _5, _6]) } - public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[555]! } + public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[556]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[556]!, self._r[556]!, [_0]) + return formatWithArgumentRanges(self._s[557]!, self._r[557]!, [_0]) } - public var Channel_SignMessages: String { return self._s[557]! } + public var Channel_SignMessages: String { return self._s[558]! } public func PUSH_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[558]!, self._r[558]!, [_1]) + return formatWithArgumentRanges(self._s[559]!, self._r[559]!, [_1]) } - public var Compose_ChannelTokenListPlaceholder: String { return self._s[559]! } - public var Passport_ScanPassport: String { return self._s[560]! } - public var Watch_Suggestion_Thanks: String { return self._s[561]! } - public var BlockedUsers_AddNew: String { return self._s[562]! } + public var Compose_ChannelTokenListPlaceholder: String { return self._s[560]! } + public var Passport_ScanPassport: String { return self._s[561]! } + public var Watch_Suggestion_Thanks: String { return self._s[562]! } + public var BlockedUsers_AddNew: String { return self._s[563]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[563]!, self._r[563]!, [_1, _2]) + return formatWithArgumentRanges(self._s[564]!, self._r[564]!, [_1, _2]) } - public var Watch_Message_Invoice: String { return self._s[564]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[565]! } - public var Month_GenJuly: String { return self._s[566]! } - public var SocksProxySetup_ProxySocks5: String { return self._s[567]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[569]! } - public var Notification_ChannelInviterSelf: String { return self._s[570]! } - public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[571]! } + public var Watch_Message_Invoice: String { return self._s[565]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[566]! } + public var Month_GenJuly: String { return self._s[567]! } + public var SocksProxySetup_ProxySocks5: String { return self._s[568]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[570]! } + public var Notification_ChannelInviterSelf: String { return self._s[571]! } + public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[572]! } public func ApplyLanguage_ChangeLanguageUnofficialText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[572]!, self._r[572]!, [_1, _2]) + return formatWithArgumentRanges(self._s[573]!, self._r[573]!, [_1, _2]) } - public var CheckoutInfo_Title: String { return self._s[573]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[574]! } + public var CheckoutInfo_Title: String { return self._s[574]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[575]! } public func Map_DistanceAway(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[575]!, self._r[575]!, [_0]) + return formatWithArgumentRanges(self._s[576]!, self._r[576]!, [_0]) } - public var Passport_Identity_MainPage: String { return self._s[576]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[577]! } - public var Passport_Language_de: String { return self._s[578]! } - public var Update_Title: String { return self._s[579]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[580]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[581]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[582]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[583]! } - public var NotificationsSound_Telegraph: String { return self._s[584]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[585]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[586]! } + public var Passport_Identity_MainPage: String { return self._s[577]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[578]! } + public var Passport_Language_de: String { return self._s[579]! } + public var Update_Title: String { return self._s[580]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[581]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[582]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[583]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[584]! } + public var NotificationsSound_Telegraph: String { return self._s[585]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[586]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[587]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[587]!, self._r[587]!, [_0]) + return formatWithArgumentRanges(self._s[588]!, self._r[588]!, [_0]) } - public var Stickers_SuggestAll: String { return self._s[588]! } - public var Conversation_ForwardTitle: String { return self._s[589]! } + public var Stickers_SuggestAll: String { return self._s[589]! } + public var Conversation_ForwardTitle: String { return self._s[590]! } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[590]!, self._r[590]!, [_0]) + return formatWithArgumentRanges(self._s[591]!, self._r[591]!, [_0]) } - public var Calls_NewCall: String { return self._s[591]! } - public var Call_StatusEnded: String { return self._s[592]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[593]! } - public var Settings_ProxyConnected: String { return self._s[594]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[595]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[596]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[597]! } - public var Passport_PasswordPlaceholder: String { return self._s[598]! } - public var Message_PinnedInvoice: String { return self._s[599]! } - public var Passport_Identity_IssueDate: String { return self._s[600]! } - public var Passport_Language_pl: String { return self._s[601]! } + public var Calls_NewCall: String { return self._s[592]! } + public var Call_StatusEnded: String { return self._s[593]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[594]! } + public var Settings_ProxyConnected: String { return self._s[595]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[596]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[597]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[598]! } + public var Passport_PasswordPlaceholder: String { return self._s[599]! } + public var Message_PinnedInvoice: String { return self._s[600]! } + public var Passport_Identity_IssueDate: String { return self._s[601]! } + public var Passport_Language_pl: String { return self._s[602]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[602]!, self._r[602]!, [_0]) + return formatWithArgumentRanges(self._s[603]!, self._r[603]!, [_0]) } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[603]! } - public var Call_StatusConnecting: String { return self._s[604]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[604]! } + public var Call_StatusConnecting: String { return self._s[605]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[605]!, self._r[605]!, [_0]) + return formatWithArgumentRanges(self._s[606]!, self._r[606]!, [_0]) } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[607]! } - public var Common_Edit: String { return self._s[608]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[609]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[608]! } + public var Common_Edit: String { return self._s[609]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[610]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[610]!, self._r[610]!, [_0]) + return formatWithArgumentRanges(self._s[611]!, self._r[611]!, [_0]) } - public var GroupInfo_ChatAdmins: String { return self._s[611]! } - public var PrivateDataSettings_Title: String { return self._s[612]! } - public var Login_CancelPhoneVerificationStop: String { return self._s[613]! } - public var ChatList_Read: String { return self._s[614]! } - public var Undo_ChatClearedForBothSides: String { return self._s[615]! } - public var GroupPermission_SectionTitle: String { return self._s[616]! } + public var GroupInfo_ChatAdmins: String { return self._s[612]! } + public var PrivateDataSettings_Title: String { return self._s[613]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[614]! } + public var ChatList_Read: String { return self._s[615]! } + public var Undo_ChatClearedForBothSides: String { return self._s[616]! } + public var GroupPermission_SectionTitle: String { return self._s[617]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[618]!, self._r[618]!, [_1, _2]) + return formatWithArgumentRanges(self._s[619]!, self._r[619]!, [_1, _2]) } - public var Checkout_ErrorPaymentFailed: String { return self._s[619]! } - public var Update_UpdateApp: String { return self._s[620]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[621]! } - public var Settings_Appearance: String { return self._s[622]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[624]! } - public var Watch_Location_Access: String { return self._s[625]! } - public var ShareMenu_CopyShareLink: String { return self._s[627]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[628]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[620]! } + public var Update_UpdateApp: String { return self._s[621]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[622]! } + public var Settings_Appearance: String { return self._s[623]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[625]! } + public var Watch_Location_Access: String { return self._s[626]! } + public var ShareMenu_CopyShareLink: String { return self._s[628]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[629]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[630]!, self._r[630]!, [_0]) + return formatWithArgumentRanges(self._s[631]!, self._r[631]!, [_0]) } - public var Notifications_ClassicTones: String { return self._s[631]! } - public var Weekday_ShortWednesday: String { return self._s[632]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[633]! } - public var Undo_LeftGroup: String { return self._s[636]! } - public var Conversation_LinkDialogCopy: String { return self._s[637]! } - public var KeyCommand_FocusOnInputField: String { return self._s[639]! } - public var Contacts_SelectAll: String { return self._s[640]! } - public var Preview_SaveToCameraRoll: String { return self._s[641]! } - public var PrivacySettings_PasscodeOff: String { return self._s[642]! } - public var Wallpaper_Title: String { return self._s[643]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[644]! } - public var AccessDenied_Camera: String { return self._s[645]! } - public var Watch_Compose_CurrentLocation: String { return self._s[646]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[648]! } + public var Notifications_ClassicTones: String { return self._s[632]! } + public var Weekday_ShortWednesday: String { return self._s[633]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[634]! } + public var Undo_LeftGroup: String { return self._s[637]! } + public var Conversation_LinkDialogCopy: String { return self._s[638]! } + public var KeyCommand_FocusOnInputField: String { return self._s[640]! } + public var Contacts_SelectAll: String { return self._s[641]! } + public var Preview_SaveToCameraRoll: String { return self._s[642]! } + public var PrivacySettings_PasscodeOff: String { return self._s[643]! } + public var Wallpaper_Title: String { return self._s[644]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[645]! } + public var AccessDenied_Camera: String { return self._s[646]! } + public var Watch_Compose_CurrentLocation: String { return self._s[647]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[649]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[649]!, self._r[649]!, [_0]) + return formatWithArgumentRanges(self._s[650]!, self._r[650]!, [_0]) } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[650]! } - public var Passport_Language_ro: String { return self._s[651]! } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[652]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[651]! } + public var Passport_Language_ro: String { return self._s[652]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[653]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[653]!, self._r[653]!, [_0]) + return formatWithArgumentRanges(self._s[654]!, self._r[654]!, [_0]) } - public var Login_CancelPhoneVerification: String { return self._s[654]! } - public var State_ConnectingToProxy: String { return self._s[655]! } - public var Calls_RatingTitle: String { return self._s[656]! } - public var Generic_ErrorMoreInfo: String { return self._s[657]! } - public var Appearance_PreviewReplyText: String { return self._s[658]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[659]! } - public var SharedMedia_CategoryLinks: String { return self._s[660]! } - public var Calls_Missed: String { return self._s[661]! } - public var Cache_Photos: String { return self._s[665]! } - public var GroupPermission_NoAddMembers: String { return self._s[666]! } + public var Login_CancelPhoneVerification: String { return self._s[655]! } + public var State_ConnectingToProxy: String { return self._s[656]! } + public var Calls_RatingTitle: String { return self._s[657]! } + public var Generic_ErrorMoreInfo: String { return self._s[658]! } + public var Appearance_PreviewReplyText: String { return self._s[659]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[660]! } + public var SharedMedia_CategoryLinks: String { return self._s[661]! } + public var Calls_Missed: String { return self._s[662]! } + public var Cache_Photos: String { return self._s[666]! } + public var GroupPermission_NoAddMembers: String { return self._s[667]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[667]!, self._r[667]!, [_0]) + return formatWithArgumentRanges(self._s[668]!, self._r[668]!, [_0]) } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[668]! } - public var Settings_ProxyDisabled: String { return self._s[669]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[669]! } + public var Settings_ProxyDisabled: String { return self._s[670]! } public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[670]!, self._r[670]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[671]!, self._r[671]!, [_1, _2, _3, _4]) } public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[671]!, self._r[671]!, [_0]) + return formatWithArgumentRanges(self._s[672]!, self._r[672]!, [_0]) } - public var Appearance_Title: String { return self._s[672]! } + public var Appearance_Title: String { return self._s[673]! } public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[674]!, self._r[674]!, [_0]) + return formatWithArgumentRanges(self._s[675]!, self._r[675]!, [_0]) } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[675]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[676]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[677]! } - public var Preview_DeletePhoto: String { return self._s[678]! } - public var Appearance_AppIconFilledX: String { return self._s[679]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[680]! } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[676]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[677]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[678]! } + public var Preview_DeletePhoto: String { return self._s[679]! } + public var Appearance_AppIconFilledX: String { return self._s[680]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[681]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[681]!, self._r[681]!, [_0]) + return formatWithArgumentRanges(self._s[682]!, self._r[682]!, [_0]) } - public var Coub_TapForSound: String { return self._s[683]! } - public var Map_LocatingError: String { return self._s[684]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[686]! } - public var Passport_ForgottenPassword: String { return self._s[687]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[688]! } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[689]! } - public var Login_TermsOfServiceSignupDecline: String { return self._s[691]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[692]! } - public var Message_Location: String { return self._s[693]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[694]! } - public var Channel_Management_Title: String { return self._s[695]! } - public var DialogList_SearchSectionDialogs: String { return self._s[697]! } - public var Compose_NewChannel_Members: String { return self._s[698]! } + public var Coub_TapForSound: String { return self._s[684]! } + public var Map_LocatingError: String { return self._s[685]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[687]! } + public var Passport_ForgottenPassword: String { return self._s[688]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[689]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[690]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[692]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[693]! } + public var Message_Location: String { return self._s[694]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[695]! } + public var Channel_Management_Title: String { return self._s[696]! } + public var DialogList_SearchSectionDialogs: String { return self._s[698]! } + public var Compose_NewChannel_Members: String { return self._s[699]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[699]!, self._r[699]!, [_0]) + return formatWithArgumentRanges(self._s[700]!, self._r[700]!, [_0]) } - public var GroupInfo_Location: String { return self._s[700]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[701]! } - public var PhotoEditor_WarmthTool: String { return self._s[702]! } - public var Passport_Language_tr: String { return self._s[703]! } + public var GroupInfo_Location: String { return self._s[701]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[702]! } + public var PhotoEditor_WarmthTool: String { return self._s[703]! } + public var Passport_Language_tr: String { return self._s[704]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[704]!, self._r[704]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[705]!, self._r[705]!, [_1, _2, _3]) } - public var Login_ResetAccountProtected_Reset: String { return self._s[706]! } - public var Watch_PhotoView_Title: String { return self._s[707]! } - public var Passport_Phone_Delete: String { return self._s[708]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[709]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[710]! } - public var GroupInfo_Permissions: String { return self._s[711]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[712]! } - public var Profile_ShareContactButton: String { return self._s[713]! } - public var ChatSettings_Other: String { return self._s[714]! } - public var UserInfo_NotificationsDisabled: String { return self._s[715]! } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[716]! } - public var LastSeen_WithinAMonth: String { return self._s[717]! } - public var Conversation_ReportGroupLocation: String { return self._s[718]! } - public var Conversation_EncryptionCanceled: String { return self._s[719]! } - public var MediaPicker_GroupDescription: String { return self._s[720]! } - public var WebSearch_Images: String { return self._s[721]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[707]! } + public var Watch_PhotoView_Title: String { return self._s[708]! } + public var Passport_Phone_Delete: String { return self._s[709]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[710]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[711]! } + public var GroupInfo_Permissions: String { return self._s[712]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[713]! } + public var Profile_ShareContactButton: String { return self._s[714]! } + public var ChatSettings_Other: String { return self._s[715]! } + public var UserInfo_NotificationsDisabled: String { return self._s[716]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[717]! } + public var LastSeen_WithinAMonth: String { return self._s[718]! } + public var Conversation_ReportGroupLocation: String { return self._s[719]! } + public var Conversation_EncryptionCanceled: String { return self._s[720]! } + public var MediaPicker_GroupDescription: String { return self._s[721]! } + public var WebSearch_Images: String { return self._s[722]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[722]!, self._r[722]!, [_0]) + return formatWithArgumentRanges(self._s[723]!, self._r[723]!, [_0]) } - public var Message_Photo: String { return self._s[723]! } - public var PasscodeSettings_HelpBottom: String { return self._s[724]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[725]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[726]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[727]! } - public var NotificationsSound_Calypso: String { return self._s[728]! } - public var Map_Map: String { return self._s[729]! } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[731]! } - public var ChatSettings_TextSizeUnits: String { return self._s[732]! } - public var Common_of: String { return self._s[733]! } - public var Conversation_ForwardContacts: String { return self._s[735]! } + public var Message_Photo: String { return self._s[724]! } + public var PasscodeSettings_HelpBottom: String { return self._s[725]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[726]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[727]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[728]! } + public var NotificationsSound_Calypso: String { return self._s[729]! } + public var Map_Map: String { return self._s[730]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[732]! } + public var ChatSettings_TextSizeUnits: String { return self._s[733]! } + public var Common_of: String { return self._s[734]! } + public var Conversation_ForwardContacts: String { return self._s[736]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[737]!, self._r[737]!, [_0]) + return formatWithArgumentRanges(self._s[738]!, self._r[738]!, [_0]) } - public var Passport_Language_hy: String { return self._s[738]! } - public var Notifications_MessageNotificationsHelp: String { return self._s[739]! } - public var AutoDownloadSettings_Reset: String { return self._s[740]! } - public var Paint_ClearConfirm: String { return self._s[741]! } - public var Camera_VideoMode: String { return self._s[742]! } + public var Passport_Language_hy: String { return self._s[739]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[740]! } + public var AutoDownloadSettings_Reset: String { return self._s[741]! } + public var Paint_ClearConfirm: String { return self._s[742]! } + public var Camera_VideoMode: String { return self._s[743]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[743]!, self._r[743]!, [_0]) + return formatWithArgumentRanges(self._s[744]!, self._r[744]!, [_0]) } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[744]! } - public var Conversation_ViewBackground: String { return self._s[745]! } - public var Passport_Language_el: String { return self._s[746]! } - public var PhotoEditor_Original: String { return self._s[747]! } - public var Settings_FAQ_Button: String { return self._s[749]! } - public var Channel_Setup_PublicNoLink: String { return self._s[751]! } - public var Conversation_UnsupportedMedia: String { return self._s[752]! } - public var Conversation_SlideToCancel: String { return self._s[753]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[754]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[755]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[756]! } - public var AutoNightTheme_NotAvailable: String { return self._s[757]! } - public var Common_Create: String { return self._s[758]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[759]! } - public var Localization_ChooseLanguage: String { return self._s[761]! } - public var Settings_Proxy: String { return self._s[764]! } - public var Privacy_TopPeersHelp: String { return self._s[765]! } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[766]! } - public var Chat_UnsendMyMessages: String { return self._s[767]! } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[768]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[745]! } + public var Conversation_ViewBackground: String { return self._s[746]! } + public var Passport_Language_el: String { return self._s[747]! } + public var PhotoEditor_Original: String { return self._s[748]! } + public var Settings_FAQ_Button: String { return self._s[750]! } + public var Channel_Setup_PublicNoLink: String { return self._s[752]! } + public var Conversation_UnsupportedMedia: String { return self._s[753]! } + public var Conversation_SlideToCancel: String { return self._s[754]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[755]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[756]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[757]! } + public var AutoNightTheme_NotAvailable: String { return self._s[758]! } + public var Common_Create: String { return self._s[759]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[760]! } + public var Localization_ChooseLanguage: String { return self._s[762]! } + public var Settings_Proxy: String { return self._s[765]! } + public var Privacy_TopPeersHelp: String { return self._s[766]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[767]! } + public var Chat_UnsendMyMessages: String { return self._s[768]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[769]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[770]!, self._r[770]!, [_0]) + return formatWithArgumentRanges(self._s[771]!, self._r[771]!, [_0]) } - public var Contacts_SortedByPresence: String { return self._s[771]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[772]! } - public var Cache_Title: String { return self._s[773]! } + public var Contacts_SortedByPresence: String { return self._s[772]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[773]! } + public var Cache_Title: String { return self._s[774]! } public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[774]!, self._r[774]!, [_0]) + return formatWithArgumentRanges(self._s[775]!, self._r[775]!, [_0]) } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[775]! } - public var Channel_Moderator_Title: String { return self._s[776]! } - public var InstantPage_AutoNightTheme: String { return self._s[778]! } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[776]! } + public var Channel_Moderator_Title: String { return self._s[777]! } + public var InstantPage_AutoNightTheme: String { return self._s[779]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[781]!, self._r[781]!, [_1]) + return formatWithArgumentRanges(self._s[782]!, self._r[782]!, [_1]) } - public var Passport_Scans_Upload: String { return self._s[782]! } - public var Undo_Undo: String { return self._s[784]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[785]! } - public var TwoStepAuth_RemovePassword: String { return self._s[786]! } - public var Common_Delete: String { return self._s[787]! } - public var Contacts_AddPeopleNearby: String { return self._s[789]! } - public var Conversation_ContextMenuDelete: String { return self._s[790]! } - public var SocksProxySetup_Credentials: String { return self._s[791]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[793]! } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[796]! } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[797]! } - public var Passport_Language_id: String { return self._s[799]! } - public var WallpaperSearch_ColorTeal: String { return self._s[800]! } - public var ChannelIntro_Title: String { return self._s[801]! } + public var Passport_Scans_Upload: String { return self._s[783]! } + public var Undo_Undo: String { return self._s[785]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[786]! } + public var TwoStepAuth_RemovePassword: String { return self._s[787]! } + public var Common_Delete: String { return self._s[788]! } + public var Contacts_AddPeopleNearby: String { return self._s[790]! } + public var Conversation_ContextMenuDelete: String { return self._s[791]! } + public var SocksProxySetup_Credentials: String { return self._s[792]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[794]! } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[797]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[798]! } + public var Passport_Language_id: String { return self._s[800]! } + public var WallpaperSearch_ColorTeal: String { return self._s[801]! } + public var ChannelIntro_Title: String { return self._s[802]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[802]!, self._r[802]!, [_0]) + return formatWithArgumentRanges(self._s[803]!, self._r[803]!, [_0]) } - public var Channel_Info_Description: String { return self._s[804]! } - public var Stickers_FavoriteStickers: String { return self._s[805]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[806]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[807]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[808]! } - public var Group_PublicLink_Placeholder: String { return self._s[809]! } - public var Notifications_ExceptionsDefaultSound: String { return self._s[810]! } + public var Channel_Info_Description: String { return self._s[805]! } + public var Stickers_FavoriteStickers: String { return self._s[806]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[807]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[808]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[809]! } + public var Group_PublicLink_Placeholder: String { return self._s[810]! } + public var Notifications_ExceptionsDefaultSound: String { return self._s[811]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[811]!, self._r[811]!, [_1]) + return formatWithArgumentRanges(self._s[812]!, self._r[812]!, [_1]) } - public var TextFormat_Underline: String { return self._s[812]! } + public var TextFormat_Underline: String { return self._s[813]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[813]!, self._r[813]!, [_1, _2]) + return formatWithArgumentRanges(self._s[814]!, self._r[814]!, [_1, _2]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[814]!, self._r[814]!, [_0]) + return formatWithArgumentRanges(self._s[815]!, self._r[815]!, [_0]) } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[815]!, self._r[815]!, [_1, _2]) + return formatWithArgumentRanges(self._s[816]!, self._r[816]!, [_1, _2]) } - public var GroupPermission_Delete: String { return self._s[816]! } - public var Passport_Language_uk: String { return self._s[817]! } - public var StickerPack_HideStickers: String { return self._s[819]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[820]! } + public var GroupPermission_Delete: String { return self._s[817]! } + public var Passport_Language_uk: String { return self._s[818]! } + public var StickerPack_HideStickers: String { return self._s[820]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[821]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[821]!, self._r[821]!, [_1, _2]) + return formatWithArgumentRanges(self._s[822]!, self._r[822]!, [_1, _2]) } - public var Activity_UploadingVideoMessage: String { return self._s[822]! } + public var Activity_UploadingVideoMessage: String { return self._s[823]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[823]!, self._r[823]!, [_0]) + return formatWithArgumentRanges(self._s[824]!, self._r[824]!, [_0]) } - public var Channel_TitleInfo: String { return self._s[824]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[825]! } - public var Settings_CallSettings: String { return self._s[826]! } - public var Camera_SquareMode: String { return self._s[827]! } - public var GroupInfo_SharedMediaNone: String { return self._s[828]! } + public var Channel_TitleInfo: String { return self._s[825]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[826]! } + public var Settings_CallSettings: String { return self._s[827]! } + public var Camera_SquareMode: String { return self._s[828]! } + public var GroupInfo_SharedMediaNone: String { return self._s[829]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[829]!, self._r[829]!, [_1]) + return formatWithArgumentRanges(self._s[830]!, self._r[830]!, [_1]) } - public var Bot_GenericBotStatus: String { return self._s[830]! } - public var Application_Update: String { return self._s[832]! } - public var Month_ShortJanuary: String { return self._s[833]! } - public var Contacts_PermissionsKeepDisabled: String { return self._s[834]! } - public var Channel_AdminLog_BanReadMessages: String { return self._s[835]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[836]! } - public var Passport_Address_Street2Placeholder: String { return self._s[837]! } + public var Bot_GenericBotStatus: String { return self._s[831]! } + public var Application_Update: String { return self._s[833]! } + public var Month_ShortJanuary: String { return self._s[834]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[835]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[836]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[837]! } + public var Passport_Address_Street2Placeholder: String { return self._s[838]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[838]!, self._r[838]!, [_0]) + return formatWithArgumentRanges(self._s[839]!, self._r[839]!, [_0]) } - public var NetworkUsageSettings_Cellular: String { return self._s[839]! } - public var Appearance_PreviewOutgoingText: String { return self._s[840]! } - public var Notifications_PermissionsAllowInSettings: String { return self._s[841]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[843]! } - public var Map_Directions: String { return self._s[844]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[846]! } - public var Appearance_ThemeDay: String { return self._s[847]! } - public var LogoutOptions_LogOut: String { return self._s[848]! } - public var Group_PublicLink_Title: String { return self._s[850]! } - public var Channel_AddBotErrorNoRights: String { return self._s[851]! } - public var Passport_Identity_AddPassport: String { return self._s[852]! } - public var LocalGroup_ButtonTitle: String { return self._s[853]! } - public var Call_Message: String { return self._s[854]! } - public var PhotoEditor_ExposureTool: String { return self._s[855]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[857]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[859]! } - public var Appearance_Preview: String { return self._s[860]! } - public var Compose_ChannelMembers: String { return self._s[861]! } - public var Conversation_DeleteManyMessages: String { return self._s[862]! } - public var ReportPeer_ReasonOther_Title: String { return self._s[863]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[864]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[865]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[868]! } - public var Conversation_UpdateTelegram: String { return self._s[869]! } + public var NetworkUsageSettings_Cellular: String { return self._s[840]! } + public var Appearance_PreviewOutgoingText: String { return self._s[841]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[842]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[844]! } + public var Map_Directions: String { return self._s[845]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[847]! } + public var Appearance_ThemeDay: String { return self._s[848]! } + public var LogoutOptions_LogOut: String { return self._s[849]! } + public var Group_PublicLink_Title: String { return self._s[851]! } + public var Channel_AddBotErrorNoRights: String { return self._s[852]! } + public var Passport_Identity_AddPassport: String { return self._s[853]! } + public var LocalGroup_ButtonTitle: String { return self._s[854]! } + public var Call_Message: String { return self._s[855]! } + public var PhotoEditor_ExposureTool: String { return self._s[856]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[858]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[860]! } + public var Appearance_Preview: String { return self._s[861]! } + public var Compose_ChannelMembers: String { return self._s[862]! } + public var Conversation_DeleteManyMessages: String { return self._s[863]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[864]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[865]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[866]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[869]! } + public var Conversation_UpdateTelegram: String { return self._s[870]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[870]!, self._r[870]!, [_0]) + return formatWithArgumentRanges(self._s[871]!, self._r[871]!, [_0]) } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[871]!, self._r[871]!, [_1]) + return formatWithArgumentRanges(self._s[872]!, self._r[872]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[872]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[873]! } + public var GroupInfo_Administrators_Title: String { return self._s[873]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[874]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[874]!, self._r[874]!, [_0]) + return formatWithArgumentRanges(self._s[875]!, self._r[875]!, [_0]) } - public var Tour_Title3: String { return self._s[875]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[876]! } - public var Clipboard_SendPhoto: String { return self._s[880]! } - public var MediaPicker_Videos: String { return self._s[881]! } - public var Passport_Email_Title: String { return self._s[882]! } + public var Tour_Title3: String { return self._s[876]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[877]! } + public var Clipboard_SendPhoto: String { return self._s[881]! } + public var MediaPicker_Videos: String { return self._s[882]! } + public var Passport_Email_Title: String { return self._s[883]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[883]!, self._r[883]!, [_0]) + return formatWithArgumentRanges(self._s[884]!, self._r[884]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[884]! } - public var Conversation_MessageDialogDelete: String { return self._s[885]! } - public var Privacy_Calls_CustomHelp: String { return self._s[887]! } - public var Message_Wallpaper: String { return self._s[888]! } - public var MemberSearch_BotSection: String { return self._s[889]! } - public var GroupInfo_SetSound: String { return self._s[890]! } - public var Core_ServiceUserStatus: String { return self._s[891]! } - public var LiveLocationUpdated_JustNow: String { return self._s[892]! } - public var Call_StatusFailed: String { return self._s[893]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[894]! } - public var TwoStepAuth_SetPassword: String { return self._s[895]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[896]! } + public var StickerPacksSettings_Title: String { return self._s[885]! } + public var Conversation_MessageDialogDelete: String { return self._s[886]! } + public var Privacy_Calls_CustomHelp: String { return self._s[888]! } + public var Message_Wallpaper: String { return self._s[889]! } + public var MemberSearch_BotSection: String { return self._s[890]! } + public var GroupInfo_SetSound: String { return self._s[891]! } + public var Core_ServiceUserStatus: String { return self._s[892]! } + public var LiveLocationUpdated_JustNow: String { return self._s[893]! } + public var Call_StatusFailed: String { return self._s[894]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[895]! } + public var TwoStepAuth_SetPassword: String { return self._s[896]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[897]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[898]!, self._r[898]!, [_0]) + return formatWithArgumentRanges(self._s[899]!, self._r[899]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[899]! } - public var Profile_Username: String { return self._s[900]! } - public var Bot_DescriptionTitle: String { return self._s[901]! } - public var MaskStickerSettings_Title: String { return self._s[902]! } - public var SharedMedia_CategoryOther: String { return self._s[903]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[904]! } - public var Common_NotNow: String { return self._s[905]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[906]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[907]! } - public var Map_Location: String { return self._s[908]! } - public var Invitation_JoinGroup: String { return self._s[909]! } - public var AutoDownloadSettings_Title: String { return self._s[911]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[912]! } - public var Channel_ErrorAddBlocked: String { return self._s[913]! } - public var Conversation_UnblockUser: String { return self._s[914]! } - public var Watch_Bot_Restart: String { return self._s[915]! } - public var TwoStepAuth_Title: String { return self._s[916]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[917]! } - public var Checkout_ShippingMethod: String { return self._s[918]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[919]! } + public var Calls_SubmitRating: String { return self._s[900]! } + public var Profile_Username: String { return self._s[901]! } + public var Bot_DescriptionTitle: String { return self._s[902]! } + public var MaskStickerSettings_Title: String { return self._s[903]! } + public var SharedMedia_CategoryOther: String { return self._s[904]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[905]! } + public var Common_NotNow: String { return self._s[906]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[907]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[908]! } + public var Map_Location: String { return self._s[909]! } + public var Invitation_JoinGroup: String { return self._s[910]! } + public var AutoDownloadSettings_Title: String { return self._s[912]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[913]! } + public var Channel_ErrorAddBlocked: String { return self._s[914]! } + public var Conversation_UnblockUser: String { return self._s[915]! } + public var Watch_Bot_Restart: String { return self._s[916]! } + public var TwoStepAuth_Title: String { return self._s[917]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[918]! } + public var Checkout_ShippingMethod: String { return self._s[919]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[920]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[920]!, self._r[920]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[921]!, self._r[921]!, [_1, _2, _3]) } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[922]!, self._r[922]!, [_0]) - } - public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[923]!, self._r[923]!, [_0]) } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[924]! } - public var AuthSessions_TerminateOtherSessions: String { return self._s[925]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[926]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[927]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[928]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[929]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[930]! } - public var Checkout_PaymentMethod_Title: String { return self._s[931]! } - public var SocksProxySetup_Connection: String { return self._s[932]! } - public var Group_MessagePhotoRemoved: String { return self._s[933]! } - public var Channel_Stickers_NotFound: String { return self._s[935]! } - public var Group_About_Help: String { return self._s[936]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[937]! } - public var PeopleNearby_Title: String { return self._s[939]! } - public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[940]!, self._r[940]!, [_1]) + public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[924]!, self._r[924]!, [_0]) } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[942]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[943]! } - public var SocksProxySetup_Password: String { return self._s[944]! } - public var Notifications_PermissionsEnable: String { return self._s[945]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[947]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[925]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[926]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[927]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[928]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[929]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[930]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[931]! } + public var Checkout_PaymentMethod_Title: String { return self._s[932]! } + public var SocksProxySetup_Connection: String { return self._s[933]! } + public var Group_MessagePhotoRemoved: String { return self._s[934]! } + public var Channel_Stickers_NotFound: String { return self._s[936]! } + public var Group_About_Help: String { return self._s[937]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[938]! } + public var PeopleNearby_Title: String { return self._s[940]! } + public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[941]!, self._r[941]!, [_1]) + } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[943]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[944]! } + public var SocksProxySetup_Password: String { return self._s[945]! } + public var Notifications_PermissionsEnable: String { return self._s[946]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[948]! } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[948]!, self._r[948]!, [_1]) + return formatWithArgumentRanges(self._s[949]!, self._r[949]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[950]!, self._r[950]!, [_0]) + return formatWithArgumentRanges(self._s[951]!, self._r[951]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[951]! } - public var ArchivedPacksAlert_Title: String { return self._s[952]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[952]! } + public var ArchivedPacksAlert_Title: String { return self._s[953]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[953]!, self._r[953]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[954]!, self._r[954]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[954]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[956]! } - public var Conversation_StatusTyping: String { return self._s[957]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[958]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[959]! } - public var UserInfo_CreateNewContact: String { return self._s[960]! } - public var Passport_Identity_FrontSide: String { return self._s[961]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[962]! } - public var Calls_CallTabTitle: String { return self._s[963]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[964]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[955]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[957]! } + public var Conversation_StatusTyping: String { return self._s[958]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[959]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[960]! } + public var UserInfo_CreateNewContact: String { return self._s[961]! } + public var Passport_Identity_FrontSide: String { return self._s[962]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[963]! } + public var Calls_CallTabTitle: String { return self._s[964]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[965]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[965]!, self._r[965]!, [_0]) + return formatWithArgumentRanges(self._s[966]!, self._r[966]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[966]! } - public var SharedMedia_EmptyMusicText: String { return self._s[967]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[968]! } - public var Paint_Stickers: String { return self._s[969]! } - public var Privacy_GroupsAndChannels: String { return self._s[970]! } - public var UserInfo_AddContact: String { return self._s[972]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[967]! } + public var SharedMedia_EmptyMusicText: String { return self._s[968]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[969]! } + public var Paint_Stickers: String { return self._s[970]! } + public var Privacy_GroupsAndChannels: String { return self._s[971]! } + public var UserInfo_AddContact: String { return self._s[973]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[973]!, self._r[973]!, [_0]) + return formatWithArgumentRanges(self._s[974]!, self._r[974]!, [_0]) } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[975]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[976]! } public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[977]!, self._r[977]!, [_0]) + return formatWithArgumentRanges(self._s[978]!, self._r[978]!, [_0]) } - public var DialogList_NoMessagesTitle: String { return self._s[978]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[979]! } - public var BlockedUsers_BlockUser: String { return self._s[980]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[981]! } - public var MediaPicker_UngroupDescription: String { return self._s[982]! } - public var Watch_NoConnection: String { return self._s[983]! } - public var Month_GenSeptember: String { return self._s[984]! } - public var Conversation_ViewGroup: String { return self._s[985]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[988]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[989]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[990]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[991]! } - public var MediaPicker_CameraRoll: String { return self._s[993]! } - public var Month_GenAugust: String { return self._s[994]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[995]! } - public var SharedMedia_EmptyText: String { return self._s[996]! } - public var Map_ShareLiveLocation: String { return self._s[997]! } - public var Calls_All: String { return self._s[998]! } - public var Appearance_ThemeNight: String { return self._s[1001]! } - public var Conversation_HoldForAudio: String { return self._s[1002]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[1005]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[1006]! } - public var SocksProxySetup_Secret: String { return self._s[1007]! } + public var DialogList_NoMessagesTitle: String { return self._s[979]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[980]! } + public var BlockedUsers_BlockUser: String { return self._s[981]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[982]! } + public var MediaPicker_UngroupDescription: String { return self._s[983]! } + public var Watch_NoConnection: String { return self._s[984]! } + public var Month_GenSeptember: String { return self._s[985]! } + public var Conversation_ViewGroup: String { return self._s[986]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[989]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[990]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[991]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[992]! } + public var MediaPicker_CameraRoll: String { return self._s[994]! } + public var Month_GenAugust: String { return self._s[995]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[996]! } + public var SharedMedia_EmptyText: String { return self._s[997]! } + public var Map_ShareLiveLocation: String { return self._s[998]! } + public var Calls_All: String { return self._s[999]! } + public var Appearance_ThemeNight: String { return self._s[1002]! } + public var Conversation_HoldForAudio: String { return self._s[1003]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[1006]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[1007]! } + public var SocksProxySetup_Secret: String { return self._s[1008]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1008]!, self._r[1008]!, [_0]) + return formatWithArgumentRanges(self._s[1009]!, self._r[1009]!, [_0]) } - public var Channel_BanList_RestrictedTitle: String { return self._s[1010]! } - public var Conversation_Location: String { return self._s[1011]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[1011]! } + public var Conversation_Location: String { return self._s[1012]! } public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1012]!, self._r[1012]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1013]!, self._r[1013]!, [_1, _2]) } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[1014]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1015]! } - public var Notifications_PermissionsText: String { return self._s[1016]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1017]! } - public var Call_Flip: String { return self._s[1018]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1019]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1021]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1023]! } - public var Channel_TooMuchBots: String { return self._s[1025]! } - public var Passport_DeletePassportConfirmation: String { return self._s[1026]! } - public var Login_InvalidCodeError: String { return self._s[1027]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1028]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[1015]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1016]! } + public var Notifications_PermissionsText: String { return self._s[1017]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1018]! } + public var Call_Flip: String { return self._s[1019]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1020]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1022]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1024]! } + public var Channel_TooMuchBots: String { return self._s[1026]! } + public var Passport_DeletePassportConfirmation: String { return self._s[1027]! } + public var Login_InvalidCodeError: String { return self._s[1028]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1029]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1029]!, self._r[1029]!, [_0]) - } - public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1030]!, self._r[1030]!, [_0]) } - public var Call_CallInProgressTitle: String { return self._s[1031]! } - public var Month_ShortSeptember: String { return self._s[1032]! } - public var Watch_ChannelInfo_Title: String { return self._s[1033]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1036]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1037]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[1038]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1039]! } - public var PhotoEditor_CropReset: String { return self._s[1040]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1042]! } - public var Channel_Management_LabelEditor: String { return self._s[1043]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1045]! } - public var PhotoEditor_HighlightsTool: String { return self._s[1046]! } - public var UserInfo_Title: String { return self._s[1047]! } - public var ChatList_HideAction: String { return self._s[1048]! } - public var AccessDenied_Title: String { return self._s[1049]! } - public var DialogList_SearchLabel: String { return self._s[1050]! } - public var Group_Setup_HistoryHidden: String { return self._s[1051]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1052]! } - public var State_Updating: String { return self._s[1054]! } - public var Contacts_TabTitle: String { return self._s[1055]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[1057]! } - public var GroupInfo_GroupHistory: String { return self._s[1058]! } - public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1059]! } - public var Wallpaper_SetColor: String { return self._s[1060]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1061]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1062]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1063]! } - public var Contacts_NotRegisteredSection: String { return self._s[1064]! } + public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1031]!, self._r[1031]!, [_0]) + } + public var Call_CallInProgressTitle: String { return self._s[1032]! } + public var Month_ShortSeptember: String { return self._s[1033]! } + public var Watch_ChannelInfo_Title: String { return self._s[1034]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1037]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1038]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[1039]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1040]! } + public var PhotoEditor_CropReset: String { return self._s[1041]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1043]! } + public var Channel_Management_LabelEditor: String { return self._s[1044]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1046]! } + public var PhotoEditor_HighlightsTool: String { return self._s[1047]! } + public var UserInfo_Title: String { return self._s[1048]! } + public var ChatList_HideAction: String { return self._s[1049]! } + public var AccessDenied_Title: String { return self._s[1050]! } + public var DialogList_SearchLabel: String { return self._s[1051]! } + public var Group_Setup_HistoryHidden: String { return self._s[1052]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1053]! } + public var State_Updating: String { return self._s[1055]! } + public var Contacts_TabTitle: String { return self._s[1056]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[1058]! } + public var GroupInfo_GroupHistory: String { return self._s[1059]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1060]! } + public var Wallpaper_SetColor: String { return self._s[1061]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1062]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1063]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1064]! } + public var Contacts_NotRegisteredSection: String { return self._s[1065]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1065]!, self._r[1065]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1066]!, self._r[1066]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[1066]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[1067]! } - public var SocksProxySetup_Connecting: String { return self._s[1068]! } - public var ExplicitContent_AlertChannel: String { return self._s[1069]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[1070]! } - public var Conversation_Contact: String { return self._s[1071]! } - public var Login_CodeExpired: String { return self._s[1072]! } - public var Passport_DiscardMessageAction: String { return self._s[1073]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1074]! } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[1075]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1076]! } - public var Month_ShortApril: String { return self._s[1077]! } - public var AuthSessions_CurrentSession: String { return self._s[1078]! } - public var WallpaperPreview_CropTopText: String { return self._s[1082]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1083]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1084]! } - public var Channel_Setup_TypePrivate: String { return self._s[1086]! } - public var Forward_ChannelReadOnly: String { return self._s[1089]! } - public var PhotoEditor_CurvesBlue: String { return self._s[1090]! } - public var AddContact_SharedContactException: String { return self._s[1091]! } - public var UserInfo_BotPrivacy: String { return self._s[1092]! } - public var Notification_PassportValueEmail: String { return self._s[1093]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[1094]! } - public var GroupPermission_NewTitle: String { return self._s[1095]! } - public var CallFeedback_ReasonDropped: String { return self._s[1096]! } - public var GroupInfo_Permissions_AddException: String { return self._s[1097]! } - public var Channel_SignMessages_Help: String { return self._s[1099]! } - public var Undo_ChatDeleted: String { return self._s[1101]! } - public var Conversation_ChatBackground: String { return self._s[1102]! } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1103]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1104]! } - public var Passport_Language_pt: String { return self._s[1105]! } - public var NotificationsSound_Popcorn: String { return self._s[1108]! } - public var AutoNightTheme_Disabled: String { return self._s[1109]! } - public var BlockedUsers_LeavePrefix: String { return self._s[1110]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[1111]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1112]! } - public var WallpaperSearch_ColorBlue: String { return self._s[1113]! } + public var Paint_Clear: String { return self._s[1067]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[1068]! } + public var SocksProxySetup_Connecting: String { return self._s[1069]! } + public var ExplicitContent_AlertChannel: String { return self._s[1070]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[1071]! } + public var Conversation_Contact: String { return self._s[1072]! } + public var Login_CodeExpired: String { return self._s[1073]! } + public var Passport_DiscardMessageAction: String { return self._s[1074]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1075]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[1076]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1077]! } + public var Month_ShortApril: String { return self._s[1078]! } + public var AuthSessions_CurrentSession: String { return self._s[1079]! } + public var WallpaperPreview_CropTopText: String { return self._s[1083]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1084]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1085]! } + public var Channel_Setup_TypePrivate: String { return self._s[1087]! } + public var Forward_ChannelReadOnly: String { return self._s[1090]! } + public var PhotoEditor_CurvesBlue: String { return self._s[1091]! } + public var AddContact_SharedContactException: String { return self._s[1092]! } + public var UserInfo_BotPrivacy: String { return self._s[1093]! } + public var Notification_PassportValueEmail: String { return self._s[1094]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[1095]! } + public var GroupPermission_NewTitle: String { return self._s[1096]! } + public var CallFeedback_ReasonDropped: String { return self._s[1097]! } + public var GroupInfo_Permissions_AddException: String { return self._s[1098]! } + public var Channel_SignMessages_Help: String { return self._s[1100]! } + public var Undo_ChatDeleted: String { return self._s[1102]! } + public var Conversation_ChatBackground: String { return self._s[1103]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1104]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1105]! } + public var Passport_Language_pt: String { return self._s[1106]! } + public var NotificationsSound_Popcorn: String { return self._s[1109]! } + public var AutoNightTheme_Disabled: String { return self._s[1110]! } + public var BlockedUsers_LeavePrefix: String { return self._s[1111]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[1112]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1113]! } + public var WallpaperSearch_ColorBlue: String { return self._s[1114]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1114]!, self._r[1114]!, [_0]) + return formatWithArgumentRanges(self._s[1115]!, self._r[1115]!, [_0]) } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1115]! } - public var SocksProxySetup_UseForCalls: String { return self._s[1116]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[1118]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1116]! } + public var SocksProxySetup_UseForCalls: String { return self._s[1117]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[1119]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1119]!, self._r[1119]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1120]!, self._r[1120]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[1122]! } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1123]! } - public var Compose_NewEncryptedChat: String { return self._s[1124]! } - public var Login_CodeFloodError: String { return self._s[1125]! } - public var Calls_TabTitle: String { return self._s[1126]! } - public var Privacy_ProfilePhoto: String { return self._s[1127]! } - public var Passport_Language_he: String { return self._s[1128]! } - public var GroupPermission_Title: String { return self._s[1129]! } + public var SocksProxySetup_Hostname: String { return self._s[1123]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1124]! } + public var Compose_NewEncryptedChat: String { return self._s[1125]! } + public var Login_CodeFloodError: String { return self._s[1126]! } + public var Calls_TabTitle: String { return self._s[1127]! } + public var Privacy_ProfilePhoto: String { return self._s[1128]! } + public var Passport_Language_he: String { return self._s[1129]! } + public var GroupPermission_Title: String { return self._s[1130]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1130]!, self._r[1130]!, [_0]) + return formatWithArgumentRanges(self._s[1131]!, self._r[1131]!, [_0]) } - public var GroupPermission_NoChangeInfo: String { return self._s[1131]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[1132]! } - public var Tour_Text1: String { return self._s[1133]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[1134]! } - public var Month_ShortFebruary: String { return self._s[1135]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1136]! } - public var NotificationsSound_Glass: String { return self._s[1137]! } - public var Appearance_ThemeNightBlue: String { return self._s[1138]! } - public var CheckoutInfo_Pay: String { return self._s[1139]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1141]! } - public var Call_CallAgain: String { return self._s[1143]! } - public var AttachmentMenu_SendAsFile: String { return self._s[1144]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[1145]! } - public var Passport_InvalidPasswordError: String { return self._s[1146]! } - public var Watch_Message_Game: String { return self._s[1147]! } - public var Stickers_Install: String { return self._s[1148]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1149]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[1151]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1152]! } - public var AuthSessions_OtherSessions: String { return self._s[1153]! } - public var Channel_Username_Help: String { return self._s[1154]! } - public var Camera_Title: String { return self._s[1155]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1157]! } - public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1158]! } - public var Channel_AdminLog_SendPolls: String { return self._s[1159]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1160]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1161]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1162]! } - public var Conversation_RestrictedStickers: String { return self._s[1163]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[1165]! } - public var UserInfo_TelegramCall: String { return self._s[1167]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1168]! } - public var CreatePoll_OptionsHeader: String { return self._s[1169]! } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1170]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1171]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1172]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[1173]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1132]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[1133]! } + public var Tour_Text1: String { return self._s[1134]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[1135]! } + public var Month_ShortFebruary: String { return self._s[1136]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1137]! } + public var NotificationsSound_Glass: String { return self._s[1138]! } + public var Appearance_ThemeNightBlue: String { return self._s[1139]! } + public var CheckoutInfo_Pay: String { return self._s[1140]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1142]! } + public var Call_CallAgain: String { return self._s[1144]! } + public var AttachmentMenu_SendAsFile: String { return self._s[1145]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[1146]! } + public var Passport_InvalidPasswordError: String { return self._s[1147]! } + public var Watch_Message_Game: String { return self._s[1148]! } + public var Stickers_Install: String { return self._s[1149]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1150]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[1152]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1153]! } + public var AuthSessions_OtherSessions: String { return self._s[1154]! } + public var Channel_Username_Help: String { return self._s[1155]! } + public var Camera_Title: String { return self._s[1156]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1158]! } + public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1159]! } + public var Channel_AdminLog_SendPolls: String { return self._s[1160]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1161]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1162]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1163]! } + public var Conversation_RestrictedStickers: String { return self._s[1164]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[1166]! } + public var UserInfo_TelegramCall: String { return self._s[1168]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1169]! } + public var CreatePoll_OptionsHeader: String { return self._s[1170]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1171]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1172]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1173]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[1174]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1174]!, self._r[1174]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1175]!, self._r[1175]!, [_1, _2, _3]) } - public var Settings_SaveEditedPhotos: String { return self._s[1175]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[1176]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1177]! } - public var Conversation_MessageDialogRetry: String { return self._s[1178]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[1179]! } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1180]! } - public var Group_Setup_TypeHeader: String { return self._s[1181]! } - public var Paint_RecentStickers: String { return self._s[1182]! } - public var PhotoEditor_GrainTool: String { return self._s[1183]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1184]! } - public var EmptyGroupInfo_Line4: String { return self._s[1185]! } - public var Watch_AuthRequired: String { return self._s[1187]! } + public var Settings_SaveEditedPhotos: String { return self._s[1176]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[1177]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1178]! } + public var Conversation_MessageDialogRetry: String { return self._s[1179]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[1180]! } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1181]! } + public var Group_Setup_TypeHeader: String { return self._s[1182]! } + public var Paint_RecentStickers: String { return self._s[1183]! } + public var PhotoEditor_GrainTool: String { return self._s[1184]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1185]! } + public var EmptyGroupInfo_Line4: String { return self._s[1186]! } + public var Watch_AuthRequired: String { return self._s[1188]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1188]!, self._r[1188]!, [_0]) + return formatWithArgumentRanges(self._s[1189]!, self._r[1189]!, [_0]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1189]! } - public var ChannelIntro_Text: String { return self._s[1190]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1191]! } - public var GroupPermission_NoSendMedia: String { return self._s[1192]! } - public var Calls_AddTab: String { return self._s[1193]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1194]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1195]! } - public var Notification_MessageLifetime1d: String { return self._s[1196]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1197]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1198]! } - public var Passport_Identity_GenderFemale: String { return self._s[1199]! } - public var BlockedUsers_BlockTitle: String { return self._s[1200]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1190]! } + public var ChannelIntro_Text: String { return self._s[1191]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1192]! } + public var GroupPermission_NoSendMedia: String { return self._s[1193]! } + public var Calls_AddTab: String { return self._s[1194]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1195]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1196]! } + public var Notification_MessageLifetime1d: String { return self._s[1197]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1198]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1199]! } + public var Passport_Identity_GenderFemale: String { return self._s[1200]! } + public var BlockedUsers_BlockTitle: String { return self._s[1201]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1201]!, self._r[1201]!, [_1]) + return formatWithArgumentRanges(self._s[1202]!, self._r[1202]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1202]! } - public var WallpaperSearch_ColorBlack: String { return self._s[1203]! } - public var ChatList_ArchiveAction: String { return self._s[1204]! } - public var AutoNightTheme_Scheduled: String { return self._s[1205]! } + public var Weekday_Yesterday: String { return self._s[1203]! } + public var WallpaperSearch_ColorBlack: String { return self._s[1204]! } + public var ChatList_ArchiveAction: String { return self._s[1205]! } + public var AutoNightTheme_Scheduled: String { return self._s[1206]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1206]!, self._r[1206]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[1207]!, self._r[1207]!, [_1, _2, _3, _4, _5, _6]) } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1207]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1208]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1208]!, self._r[1208]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1209]!, self._r[1209]!, [_1, _2]) } - public var CreatePoll_Create: String { return self._s[1209]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1210]! } + public var CreatePoll_Create: String { return self._s[1210]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1211]! } public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1211]!, self._r[1211]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1212]!, self._r[1212]!, [_1, _2]) } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1212]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1214]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1213]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1215]! } public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1215]!, self._r[1215]!, [_1]) + return formatWithArgumentRanges(self._s[1216]!, self._r[1216]!, [_1]) } - public var Preview_OpenInInstagram: String { return self._s[1216]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1217]! } + public var Preview_OpenInInstagram: String { return self._s[1217]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1218]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1218]!, self._r[1218]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1219]!, self._r[1219]!, [_1, _2, _3]) } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1219]!, self._r[1219]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1220]!, self._r[1220]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1220]! } - public var ArchivedChats_IntroText3: String { return self._s[1221]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[1222]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1223]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1224]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1221]! } + public var ArchivedChats_IntroText3: String { return self._s[1222]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[1223]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1224]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1225]! } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1225]!, self._r[1225]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1226]!, self._r[1226]!, [_1, _2, _3]) } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1227]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1228]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1229]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1230]! } - public var Gif_NoGifsFound: String { return self._s[1231]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1232]! } - public var GroupInfo_ActionPromote: String { return self._s[1233]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1234]! } - public var GroupInfo_Permissions_Title: String { return self._s[1235]! } - public var Permissions_ContactsText_v0: String { return self._s[1236]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1237]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1240]! } - public var Passport_FieldEmailHelp: String { return self._s[1241]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1228]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1229]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1230]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1231]! } + public var Gif_NoGifsFound: String { return self._s[1232]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1233]! } + public var GroupInfo_ActionPromote: String { return self._s[1234]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1235]! } + public var GroupInfo_Permissions_Title: String { return self._s[1236]! } + public var Permissions_ContactsText_v0: String { return self._s[1237]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1238]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1241]! } + public var Passport_FieldEmailHelp: String { return self._s[1242]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1242]!, self._r[1242]!, [_0]) + return formatWithArgumentRanges(self._s[1243]!, self._r[1243]!, [_0]) } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1243]! } - public var Weekday_ShortSaturday: String { return self._s[1244]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1245]! } - public var Watch_Conversation_UserInfo: String { return self._s[1246]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1247]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1248]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1249]! } - public var PhotoEditor_VignetteTool: String { return self._s[1250]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1251]! } - public var Passport_Language_et: String { return self._s[1252]! } - public var AppUpgrade_Running: String { return self._s[1253]! } - public var Channel_DiscussionGroup_Info: String { return self._s[1255]! } - public var Passport_Language_bg: String { return self._s[1256]! } - public var Stickers_NoStickersFound: String { return self._s[1258]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1244]! } + public var Weekday_ShortSaturday: String { return self._s[1245]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1246]! } + public var Watch_Conversation_UserInfo: String { return self._s[1247]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1248]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1249]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1250]! } + public var PhotoEditor_VignetteTool: String { return self._s[1251]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1252]! } + public var Passport_Language_et: String { return self._s[1253]! } + public var AppUpgrade_Running: String { return self._s[1254]! } + public var Channel_DiscussionGroup_Info: String { return self._s[1256]! } + public var Passport_Language_bg: String { return self._s[1257]! } + public var Stickers_NoStickersFound: String { return self._s[1259]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1260]!, self._r[1260]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1261]!, self._r[1261]!, [_1, _2]) } - public var Settings_About: String { return self._s[1261]! } + public var Settings_About: String { return self._s[1262]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1262]!, self._r[1262]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1263]!, self._r[1263]!, [_0, _1, _2]) } - public var KeyCommand_NewMessage: String { return self._s[1264]! } - public var Group_ErrorAddBlocked: String { return self._s[1265]! } + public var KeyCommand_NewMessage: String { return self._s[1265]! } + public var Group_ErrorAddBlocked: String { return self._s[1266]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1266]!, self._r[1266]!, [_0]) + return formatWithArgumentRanges(self._s[1267]!, self._r[1267]!, [_0]) } - public var Map_LocationTitle: String { return self._s[1267]! } - public var ReportGroupLocation_Title: String { return self._s[1268]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1269]! } - public var Cache_ClearProgress: String { return self._s[1270]! } + public var Map_LocationTitle: String { return self._s[1268]! } + public var ReportGroupLocation_Title: String { return self._s[1269]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1270]! } + public var Cache_ClearProgress: String { return self._s[1271]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1271]!, self._r[1271]!, [_0]) + return formatWithArgumentRanges(self._s[1272]!, self._r[1272]!, [_0]) } - public var GroupRemoved_AddToGroup: String { return self._s[1272]! } - public var Passport_UpdateRequiredError: String { return self._s[1273]! } + public var GroupRemoved_AddToGroup: String { return self._s[1273]! } + public var Passport_UpdateRequiredError: String { return self._s[1274]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1274]!, self._r[1274]!, [_1]) + return formatWithArgumentRanges(self._s[1275]!, self._r[1275]!, [_1]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1276]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1277]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1278]! } - public var Passport_Language_ka: String { return self._s[1279]! } - public var Call_Decline: String { return self._s[1280]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1281]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1277]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1278]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1279]! } + public var Passport_Language_ka: String { return self._s[1280]! } + public var Call_Decline: String { return self._s[1281]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1282]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1284]!, self._r[1284]!, [_0]) + return formatWithArgumentRanges(self._s[1285]!, self._r[1285]!, [_0]) } - public var CallFeedback_Send: String { return self._s[1285]! } + public var CallFeedback_Send: String { return self._s[1286]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1286]!, self._r[1286]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1287]!, self._r[1287]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1287]! } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1289]! } - public var Passport_DeletePassport: String { return self._s[1290]! } - public var Appearance_AppIconFilled: String { return self._s[1291]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1292]! } - public var Month_ShortDecember: String { return self._s[1293]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1295]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1288]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1290]! } + public var Passport_DeletePassport: String { return self._s[1291]! } + public var Appearance_AppIconFilled: String { return self._s[1292]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1293]! } + public var Month_ShortDecember: String { return self._s[1294]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1296]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1296]!, self._r[1296]!, [_0]) + return formatWithArgumentRanges(self._s[1297]!, self._r[1297]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1297]! } - public var Conversation_EncryptedDescription1: String { return self._s[1298]! } - public var Conversation_EncryptedDescription2: String { return self._s[1299]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[1300]! } - public var Conversation_EncryptedDescription3: String { return self._s[1301]! } - public var PhotoEditor_SharpenTool: String { return self._s[1302]! } + public var Channel_Stickers_Searching: String { return self._s[1298]! } + public var Conversation_EncryptedDescription1: String { return self._s[1299]! } + public var Conversation_EncryptedDescription2: String { return self._s[1300]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[1301]! } + public var Conversation_EncryptedDescription3: String { return self._s[1302]! } + public var PhotoEditor_SharpenTool: String { return self._s[1303]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1303]!, self._r[1303]!, [_0]) + return formatWithArgumentRanges(self._s[1304]!, self._r[1304]!, [_0]) } - public var Conversation_EncryptedDescription4: String { return self._s[1305]! } - public var Channel_Members_AddMembers: String { return self._s[1306]! } - public var Wallpaper_Search: String { return self._s[1307]! } - public var Weekday_Friday: String { return self._s[1308]! } - public var Privacy_ContactsSync: String { return self._s[1309]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1310]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1311]! } + public var Conversation_EncryptedDescription4: String { return self._s[1306]! } + public var Channel_Members_AddMembers: String { return self._s[1307]! } + public var Wallpaper_Search: String { return self._s[1308]! } + public var Weekday_Friday: String { return self._s[1309]! } + public var Privacy_ContactsSync: String { return self._s[1310]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1311]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1312]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1312]!, self._r[1312]!, [_0]) + return formatWithArgumentRanges(self._s[1313]!, self._r[1313]!, [_0]) } - public var GroupInfo_Permissions_Removed: String { return self._s[1313]! } - public var Passport_Identity_GenderMale: String { return self._s[1314]! } + public var GroupInfo_Permissions_Removed: String { return self._s[1314]! } + public var Passport_Identity_GenderMale: String { return self._s[1315]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1315]!, self._r[1315]!, [_0]) + return formatWithArgumentRanges(self._s[1316]!, self._r[1316]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1316]! } - public var Conversation_JumpToDate: String { return self._s[1317]! } - public var Contacts_GlobalSearch: String { return self._s[1318]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1319]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[1320]! } - public var Profile_MessageLifetime1d: String { return self._s[1321]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1317]! } + public var Conversation_JumpToDate: String { return self._s[1318]! } + public var Contacts_GlobalSearch: String { return self._s[1319]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1320]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[1321]! } + public var Profile_MessageLifetime1d: String { return self._s[1322]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1322]!, self._r[1322]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1323]!, self._r[1323]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1325]! } + public var StickerPack_BuiltinPackName: String { return self._s[1326]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1326]!, self._r[1326]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1327]!, self._r[1327]!, [_1, _2]) } - public var Passport_InfoTitle: String { return self._s[1328]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1329]! } + public var Passport_InfoTitle: String { return self._s[1329]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1330]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1333]!, self._r[1333]!, [_0]) + return formatWithArgumentRanges(self._s[1334]!, self._r[1334]!, [_0]) } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1334]!, self._r[1334]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1335]!, self._r[1335]!, [_1, _2]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1335]! } - public var Profile_BotInfo: String { return self._s[1336]! } - public var Watch_Compose_CreateMessage: String { return self._s[1337]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1338]! } - public var Month_ShortNovember: String { return self._s[1339]! } - public var Conversation_ScamWarning: String { return self._s[1340]! } - public var Wallpaper_SetCustomBackground: String { return self._s[1341]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1342]! } - public var NotificationsSound_Chime: String { return self._s[1343]! } - public var Passport_Language_ko: String { return self._s[1345]! } - public var InviteText_URL: String { return self._s[1346]! } - public var TextFormat_Monospace: String { return self._s[1347]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1336]! } + public var Profile_BotInfo: String { return self._s[1337]! } + public var Watch_Compose_CreateMessage: String { return self._s[1338]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1339]! } + public var Month_ShortNovember: String { return self._s[1340]! } + public var Conversation_ScamWarning: String { return self._s[1341]! } + public var Wallpaper_SetCustomBackground: String { return self._s[1342]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1343]! } + public var NotificationsSound_Chime: String { return self._s[1344]! } + public var Passport_Language_ko: String { return self._s[1346]! } + public var InviteText_URL: String { return self._s[1347]! } + public var TextFormat_Monospace: String { return self._s[1348]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1348]!, self._r[1348]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1349]!, self._r[1349]!, [_1, _2, _3]) } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1349]!, self._r[1349]!, [_0]) + return formatWithArgumentRanges(self._s[1350]!, self._r[1350]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1350]!, self._r[1350]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1351]!, self._r[1351]!, [_1, _2]) } - public var Passport_InfoLearnMore: String { return self._s[1352]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1353]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1354]! } - public var Your_card_has_expired: String { return self._s[1355]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1356]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1357]! } - public var Conversation_Report: String { return self._s[1361]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1362]! } - public var Notification_MessageLifetime1m: String { return self._s[1363]! } - public var Privacy_ContactsTitle: String { return self._s[1364]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1365]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1366]! } - public var Channel_Members_Title: String { return self._s[1367]! } - public var Map_OpenInWaze: String { return self._s[1368]! } - public var Login_PhoneBannedError: String { return self._s[1369]! } + public var Passport_InfoLearnMore: String { return self._s[1353]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1354]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1355]! } + public var Your_card_has_expired: String { return self._s[1356]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1357]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1358]! } + public var Conversation_Report: String { return self._s[1362]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1363]! } + public var Notification_MessageLifetime1m: String { return self._s[1364]! } + public var Privacy_ContactsTitle: String { return self._s[1365]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1366]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1367]! } + public var Channel_Members_Title: String { return self._s[1368]! } + public var Map_OpenInWaze: String { return self._s[1369]! } + public var Login_PhoneBannedError: String { return self._s[1370]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1370]!, self._r[1370]!, [_0]) + return formatWithArgumentRanges(self._s[1371]!, self._r[1371]!, [_0]) } - public var Group_Management_AddModeratorHelp: String { return self._s[1371]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[1372]! } - public var Common_OK: String { return self._s[1373]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1374]! } - public var Cache_Music: String { return self._s[1375]! } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1376]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1377]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1378]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1372]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[1373]! } + public var Common_OK: String { return self._s[1374]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1375]! } + public var Cache_Music: String { return self._s[1376]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1377]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1378]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1379]! } public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1379]!, self._r[1379]!, [_1]) + return formatWithArgumentRanges(self._s[1380]!, self._r[1380]!, [_1]) } public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1380]!, self._r[1380]!, [_0]) + return formatWithArgumentRanges(self._s[1381]!, self._r[1381]!, [_0]) } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1382]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1383]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1385]! } - public var State_ConnectingToProxyInfo: String { return self._s[1386]! } - public var Message_VideoMessage: String { return self._s[1388]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1389]! } - public var ContactInfo_PhoneLabelOther: String { return self._s[1390]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1391]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1392]! } - public var WallpaperPreview_SwipeBottomText: String { return self._s[1393]! } - public var Activity_RecordingAudio: String { return self._s[1394]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[1395]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1396]! } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1383]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1384]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1386]! } + public var State_ConnectingToProxyInfo: String { return self._s[1387]! } + public var Message_VideoMessage: String { return self._s[1389]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1390]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1391]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1392]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1393]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[1394]! } + public var Activity_RecordingAudio: String { return self._s[1395]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[1396]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1397]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1398]!, self._r[1398]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1399]!, self._r[1399]!, [_0, _1]) } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1402]!, self._r[1402]!, [_0]) + return formatWithArgumentRanges(self._s[1403]!, self._r[1403]!, [_0]) } - public var Conversation_ApplyLocalization: String { return self._s[1403]! } - public var UserInfo_AddPhone: String { return self._s[1404]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1405]! } + public var Conversation_ApplyLocalization: String { return self._s[1404]! } + public var UserInfo_AddPhone: String { return self._s[1405]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1406]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1406]!, self._r[1406]!, [_0]) + return formatWithArgumentRanges(self._s[1407]!, self._r[1407]!, [_0]) } - public var Passport_Scans: String { return self._s[1408]! } - public var BlockedUsers_Unblock: String { return self._s[1409]! } + public var Passport_Scans: String { return self._s[1409]! } + public var BlockedUsers_Unblock: String { return self._s[1410]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1410]!, self._r[1410]!, [_1]) + return formatWithArgumentRanges(self._s[1411]!, self._r[1411]!, [_1]) } - public var Channel_Management_LabelCreator: String { return self._s[1411]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[1412]! } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1413]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1414]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1415]! } + public var Channel_Management_LabelCreator: String { return self._s[1412]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[1413]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1414]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1415]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1416]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1416]!, self._r[1416]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1417]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1418]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1419]! } - public var ChannelIntro_CreateChannel: String { return self._s[1420]! } - public var Conversation_UnreadMessages: String { return self._s[1421]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1422]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1423]! } - public var Notification_GroupActivated: String { return self._s[1424]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1425]! } + public var Login_PhoneNumberHelp: String { return self._s[1418]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1419]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1420]! } + public var ChannelIntro_CreateChannel: String { return self._s[1421]! } + public var Conversation_UnreadMessages: String { return self._s[1422]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1423]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1424]! } + public var Notification_GroupActivated: String { return self._s[1425]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1426]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1426]!, self._r[1426]!, [_0]) + return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_0]) } public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1428]!, self._r[1428]!, [_0, _1]) } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1429]! } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1430]! } public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1430]!, self._r[1430]!, [_0]) + return formatWithArgumentRanges(self._s[1431]!, self._r[1431]!, [_0]) } - public var Undo_DeletedChannel: String { return self._s[1431]! } - public var CallFeedback_AddComment: String { return self._s[1432]! } + public var Undo_DeletedChannel: String { return self._s[1432]! } + public var CallFeedback_AddComment: String { return self._s[1433]! } public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1433]!, self._r[1433]!, [_0]) + return formatWithArgumentRanges(self._s[1434]!, self._r[1434]!, [_0]) } - public var Document_TargetConfirmationFormat: String { return self._s[1434]! } + public var Document_TargetConfirmationFormat: String { return self._s[1435]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1435]!, self._r[1435]!, [_0]) + return formatWithArgumentRanges(self._s[1436]!, self._r[1436]!, [_0]) } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[1436]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[1437]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1437]!, self._r[1437]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[1438]!, self._r[1438]!, [_1, _2, _3, _4]) } - public var Contacts_SortByName: String { return self._s[1438]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1439]! } + public var Contacts_SortByName: String { return self._s[1439]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1440]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1441]!, self._r[1441]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1442]!, self._r[1442]!, [_1, _2, _3]) } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1442]! } - public var Conversation_ClearSelfHistory: String { return self._s[1443]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1444]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[1445]! } - public var Stickers_SuggestNone: String { return self._s[1446]! } - public var ChatSettings_Cache: String { return self._s[1447]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1448]! } - public var Media_ShareThisPhoto: String { return self._s[1449]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1450]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1451]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1452]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1453]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1454]! } - public var Permissions_CellularDataTitle_v0: String { return self._s[1455]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1457]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1458]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[1459]! } - public var Map_OpenIn: String { return self._s[1460]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1443]! } + public var Conversation_ClearSelfHistory: String { return self._s[1444]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1445]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[1446]! } + public var Stickers_SuggestNone: String { return self._s[1447]! } + public var ChatSettings_Cache: String { return self._s[1448]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1449]! } + public var Media_ShareThisPhoto: String { return self._s[1450]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1451]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1452]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1453]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1454]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1455]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1456]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1458]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1459]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[1460]! } + public var Map_OpenIn: String { return self._s[1461]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1463]!, self._r[1463]!, [_1]) + return formatWithArgumentRanges(self._s[1464]!, self._r[1464]!, [_1]) } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1464]!, self._r[1464]!, [_0]) + return formatWithArgumentRanges(self._s[1465]!, self._r[1465]!, [_0]) } - public var MessagePoll_LabelClosed: String { return self._s[1465]! } - public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1467]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1468]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1469]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1470]! } - public var Login_SelectCountry_Title: String { return self._s[1471]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1472]! } + public var MessagePoll_LabelClosed: String { return self._s[1466]! } + public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1468]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1469]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1470]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1471]! } + public var Login_SelectCountry_Title: String { return self._s[1472]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1473]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1473]!, self._r[1473]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1474]!, self._r[1474]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1474]! } - public var Watch_Suggestion_BRB: String { return self._s[1475]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1476]! } - public var Contacts_PermissionsTitle: String { return self._s[1477]! } - public var Conversation_RestrictedInline: String { return self._s[1478]! } - public var StickerPack_ViewPack: String { return self._s[1480]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1475]! } + public var Watch_Suggestion_BRB: String { return self._s[1476]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1477]! } + public var Contacts_PermissionsTitle: String { return self._s[1478]! } + public var Conversation_RestrictedInline: String { return self._s[1479]! } + public var StickerPack_ViewPack: String { return self._s[1481]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1481]!, self._r[1481]!, [_0]) + return formatWithArgumentRanges(self._s[1482]!, self._r[1482]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1483]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1486]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1488]! } - public var Channel_Info_Stickers: String { return self._s[1489]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1490]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1491]! } - public var Passport_DeletePersonalDetails: String { return self._s[1492]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1493]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1494]! } - public var Conversation_SearchNoResults: String { return self._s[1496]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1497]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1498]! } - public var Login_Code: String { return self._s[1499]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1500]! } - public var Weekday_ShortThursday: String { return self._s[1501]! } - public var Resolve_ErrorNotFound: String { return self._s[1503]! } - public var LastSeen_Offline: String { return self._s[1504]! } - public var PeopleNearby_NoMembers: String { return self._s[1505]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1506]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1507]! } - public var GroupInfo_Title: String { return self._s[1508]! } - public var NotificationsSound_Note: String { return self._s[1509]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1510]! } - public var Watch_Message_Poll: String { return self._s[1511]! } - public var Privacy_Calls: String { return self._s[1512]! } - public var Month_ShortAugust: String { return self._s[1513]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1514]! } - public var Notifications_Reset: String { return self._s[1515]! } - public var Conversation_Pin: String { return self._s[1516]! } - public var Passport_Language_lv: String { return self._s[1517]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1518]! } - public var BlockedUsers_Info: String { return self._s[1519]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1521]! } - public var Watch_Conversation_Unblock: String { return self._s[1523]! } + public var Compose_NewChannel: String { return self._s[1484]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1487]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1489]! } + public var Channel_Info_Stickers: String { return self._s[1490]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1491]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1492]! } + public var Passport_DeletePersonalDetails: String { return self._s[1493]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1494]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1495]! } + public var Conversation_SearchNoResults: String { return self._s[1497]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1498]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1499]! } + public var Login_Code: String { return self._s[1500]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1501]! } + public var Weekday_ShortThursday: String { return self._s[1502]! } + public var Resolve_ErrorNotFound: String { return self._s[1504]! } + public var LastSeen_Offline: String { return self._s[1505]! } + public var PeopleNearby_NoMembers: String { return self._s[1506]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1507]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1508]! } + public var GroupInfo_Title: String { return self._s[1509]! } + public var NotificationsSound_Note: String { return self._s[1510]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1511]! } + public var Watch_Message_Poll: String { return self._s[1512]! } + public var Privacy_Calls: String { return self._s[1513]! } + public var Month_ShortAugust: String { return self._s[1514]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1515]! } + public var Notifications_Reset: String { return self._s[1516]! } + public var Conversation_Pin: String { return self._s[1517]! } + public var Passport_Language_lv: String { return self._s[1518]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1519]! } + public var BlockedUsers_Info: String { return self._s[1520]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1522]! } + public var Watch_Conversation_Unblock: String { return self._s[1524]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1524]!, self._r[1524]!, [_0]) + return formatWithArgumentRanges(self._s[1525]!, self._r[1525]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1525]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1526]! } + public var CloudStorage_Title: String { return self._s[1526]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1527]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1527]!, self._r[1527]!, [_0]) + return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1528]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1529]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1530]! } - public var Passport_Address_EditBankStatement: String { return self._s[1531]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1529]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1530]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1531]! } + public var Passport_Address_EditBankStatement: String { return self._s[1532]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1532]!, self._r[1532]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1533]!, self._r[1533]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1533]! } - public var ShareMenu_Comment: String { return self._s[1534]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1535]! } - public var Notifications_PermissionsTitle: String { return self._s[1536]! } - public var GroupPermission_NoSendLinks: String { return self._s[1537]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1538]! } - public var Settings_Support: String { return self._s[1539]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1540]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1541]! } - public var Privacy_Forwards_Preview: String { return self._s[1542]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1543]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1544]! } - public var Common_Select: String { return self._s[1546]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1547]! } - public var WallpaperSearch_ColorGray: String { return self._s[1549]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1550]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1551]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1552]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1553]! } - public var Widget_AuthRequired: String { return self._s[1554]! } - public var Camera_FlashOn: String { return self._s[1555]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1556]! } - public var Watch_Suggestion_OK: String { return self._s[1557]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1534]! } + public var ShareMenu_Comment: String { return self._s[1535]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1536]! } + public var Notifications_PermissionsTitle: String { return self._s[1537]! } + public var GroupPermission_NoSendLinks: String { return self._s[1538]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1539]! } + public var Settings_Support: String { return self._s[1540]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1541]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1542]! } + public var Privacy_Forwards_Preview: String { return self._s[1543]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1544]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1545]! } + public var Common_Select: String { return self._s[1547]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1548]! } + public var WallpaperSearch_ColorGray: String { return self._s[1550]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1551]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1552]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1553]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1554]! } + public var Widget_AuthRequired: String { return self._s[1555]! } + public var Camera_FlashOn: String { return self._s[1556]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1557]! } + public var Watch_Suggestion_OK: String { return self._s[1558]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1559]!, self._r[1559]!, [_0]) + return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1561]!, self._r[1561]!, [_0]) + return formatWithArgumentRanges(self._s[1562]!, self._r[1562]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1562]! } - public var DialogList_AdLabel: String { return self._s[1563]! } - public var WatchRemote_NotificationText: String { return self._s[1564]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1565]! } - public var Conversation_ReportSpam: String { return self._s[1566]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1567]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1569]! } - public var PhoneLabel_Title: String { return self._s[1570]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1571]! } - public var Settings_ChangePhoneNumber: String { return self._s[1572]! } - public var Notifications_ExceptionsTitle: String { return self._s[1573]! } - public var Notifications_AlertTones: String { return self._s[1574]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1575]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1576]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1577]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1579]! } - public var ReportPeer_ReasonOther: String { return self._s[1580]! } - public var KeyCommand_ScrollDown: String { return self._s[1582]! } + public var TextFormat_Strikethrough: String { return self._s[1563]! } + public var DialogList_AdLabel: String { return self._s[1564]! } + public var WatchRemote_NotificationText: String { return self._s[1565]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1566]! } + public var Conversation_ReportSpam: String { return self._s[1567]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1568]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1570]! } + public var PhoneLabel_Title: String { return self._s[1571]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1572]! } + public var Settings_ChangePhoneNumber: String { return self._s[1573]! } + public var Notifications_ExceptionsTitle: String { return self._s[1574]! } + public var Notifications_AlertTones: String { return self._s[1575]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1576]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1577]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1578]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1580]! } + public var ReportPeer_ReasonOther: String { return self._s[1581]! } + public var KeyCommand_ScrollDown: String { return self._s[1583]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1583]!, self._r[1583]!, [_0]) + return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1584]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1585]! } - public var AuthSessions_LogOut: String { return self._s[1586]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1587]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1588]! } - public var Passport_Phone_Title: String { return self._s[1589]! } - public var Settings_PhoneNumber: String { return self._s[1590]! } - public var NotificationsSound_Alert: String { return self._s[1591]! } - public var WebSearch_SearchNoResults: String { return self._s[1592]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1594]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1595]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1596]! } - public var PhotoEditor_CurvesTool: String { return self._s[1597]! } - public var Checkout_PaymentMethod: String { return self._s[1599]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1585]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1586]! } + public var AuthSessions_LogOut: String { return self._s[1587]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1588]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1589]! } + public var Passport_Phone_Title: String { return self._s[1590]! } + public var Settings_PhoneNumber: String { return self._s[1591]! } + public var NotificationsSound_Alert: String { return self._s[1592]! } + public var WebSearch_SearchNoResults: String { return self._s[1593]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1595]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1596]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1597]! } + public var PhotoEditor_CurvesTool: String { return self._s[1598]! } + public var Checkout_PaymentMethod: String { return self._s[1600]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1600]!, self._r[1600]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1601]!, self._r[1601]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1601]! } - public var Camera_PhotoMode: String { return self._s[1604]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1605]! } - public var CallSettings_OnMobile: String { return self._s[1606]! } - public var Tour_Text2: String { return self._s[1607]! } + public var Contacts_AccessDeniedError: String { return self._s[1602]! } + public var Camera_PhotoMode: String { return self._s[1605]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1606]! } + public var CallSettings_OnMobile: String { return self._s[1607]! } + public var Tour_Text2: String { return self._s[1608]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1608]!, self._r[1608]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1610]! } - public var Permissions_Skip: String { return self._s[1611]! } - public var SecretImage_Title: String { return self._s[1612]! } - public var Watch_MessageView_Title: String { return self._s[1613]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1614]! } - public var AttachmentMenu_Poll: String { return self._s[1615]! } + public var DialogList_EncryptionProcessing: String { return self._s[1611]! } + public var Permissions_Skip: String { return self._s[1612]! } + public var SecretImage_Title: String { return self._s[1613]! } + public var Watch_MessageView_Title: String { return self._s[1614]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1615]! } + public var AttachmentMenu_Poll: String { return self._s[1616]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1616]!, self._r[1616]!, [_0]) + return formatWithArgumentRanges(self._s[1617]!, self._r[1617]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1617]!, self._r[1617]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[1618]! } - public var WallpaperPreview_Title: String { return self._s[1619]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1620]! } - public var Settings_ProxyConnecting: String { return self._s[1621]! } - public var Settings_CheckPhoneNumberText: String { return self._s[1623]! } - public var Profile_MessageLifetime5s: String { return self._s[1624]! } - public var Username_InvalidCharacters: String { return self._s[1625]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1626]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1627]! } - public var Settings_AddAccount: String { return self._s[1628]! } - public var Notification_CreatedChannel: String { return self._s[1631]! } + public var Notification_CallCanceled: String { return self._s[1619]! } + public var WallpaperPreview_Title: String { return self._s[1620]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1621]! } + public var Settings_ProxyConnecting: String { return self._s[1622]! } + public var Settings_CheckPhoneNumberText: String { return self._s[1624]! } + public var Profile_MessageLifetime5s: String { return self._s[1625]! } + public var Username_InvalidCharacters: String { return self._s[1626]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1627]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1628]! } + public var Settings_AddAccount: String { return self._s[1629]! } + public var Notification_CreatedChannel: String { return self._s[1632]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1632]!, self._r[1632]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1633]!, self._r[1633]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[1634]! } - public var Contacts_TopSection: String { return self._s[1635]! } + public var Passcode_AppLockedAlert: String { return self._s[1635]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1636]! } + public var Contacts_TopSection: String { return self._s[1637]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1636]!, self._r[1636]!, [_0]) + return formatWithArgumentRanges(self._s[1638]!, self._r[1638]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1637]! } - public var UserInfo_TapToCall: String { return self._s[1638]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1640]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1641]! } - public var Common_Search: String { return self._s[1642]! } + public var ReportPeer_ReasonSpam: String { return self._s[1639]! } + public var UserInfo_TapToCall: String { return self._s[1640]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1642]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1643]! } + public var Common_Search: String { return self._s[1644]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1643]!, self._r[1643]!, [_0]) + return formatWithArgumentRanges(self._s[1645]!, self._r[1645]!, [_0]) } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1644]! } - public var Message_InvoiceLabel: String { return self._s[1645]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1646]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1647]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1646]! } + public var Message_InvoiceLabel: String { return self._s[1647]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1648]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1649]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1648]!, self._r[1648]!, [_0]) + return formatWithArgumentRanges(self._s[1650]!, self._r[1650]!, [_0]) } - public var Conversation_Info: String { return self._s[1649]! } - public var Login_InfoDeletePhoto: String { return self._s[1650]! } - public var Passport_Language_vi: String { return self._s[1652]! } - public var UserInfo_ScamUserWarning: String { return self._s[1653]! } - public var Conversation_Search: String { return self._s[1654]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1655]! } - public var ReportPeer_ReasonPornography: String { return self._s[1656]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1657]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1658]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1659]! } - public var Channel_Setup_TypeHeader: String { return self._s[1660]! } - public var AuthSessions_LoggedIn: String { return self._s[1661]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1662]! } - public var Login_SmsRequestState3: String { return self._s[1663]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1664]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1665]! } - public var Join_ChannelsTooMuch: String { return self._s[1666]! } - public var Channel_Edit_LinkItem: String { return self._s[1667]! } - public var Privacy_Calls_P2PNever: String { return self._s[1668]! } - public var Conversation_AddToReadingList: String { return self._s[1670]! } - public var Message_Animation: String { return self._s[1671]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1672]! } - public var Map_Unknown: String { return self._s[1673]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[1674]! } + public var Conversation_Info: String { return self._s[1651]! } + public var Login_InfoDeletePhoto: String { return self._s[1652]! } + public var Passport_Language_vi: String { return self._s[1654]! } + public var UserInfo_ScamUserWarning: String { return self._s[1655]! } + public var Conversation_Search: String { return self._s[1656]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1657]! } + public var ReportPeer_ReasonPornography: String { return self._s[1658]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1659]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1660]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1661]! } + public var Channel_Setup_TypeHeader: String { return self._s[1662]! } + public var AuthSessions_LoggedIn: String { return self._s[1663]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1664]! } + public var Login_SmsRequestState3: String { return self._s[1665]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1666]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1667]! } + public var Join_ChannelsTooMuch: String { return self._s[1668]! } + public var Channel_Edit_LinkItem: String { return self._s[1669]! } + public var Privacy_Calls_P2PNever: String { return self._s[1670]! } + public var Conversation_AddToReadingList: String { return self._s[1672]! } + public var Message_Animation: String { return self._s[1673]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1674]! } + public var Map_Unknown: String { return self._s[1675]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[1676]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1675]!, self._r[1675]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1677]!, self._r[1677]!, [_1, _2]) } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1676]!, self._r[1676]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1678]!, self._r[1678]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[1677]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1678]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1679]! } + public var Call_StatusRequesting: String { return self._s[1679]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1680]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1681]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1680]!, self._r[1680]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1682]!, self._r[1682]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1681]!, self._r[1681]!, [_0]) + return formatWithArgumentRanges(self._s[1683]!, self._r[1683]!, [_0]) } - public var Update_Skip: String { return self._s[1682]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1683]! } - public var Message_PinnedPollMessage: String { return self._s[1684]! } - public var BlockedUsers_Title: String { return self._s[1685]! } + public var Update_Skip: String { return self._s[1684]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1685]! } + public var Message_PinnedPollMessage: String { return self._s[1686]! } + public var BlockedUsers_Title: String { return self._s[1687]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1686]!, self._r[1686]!, [_1]) + return formatWithArgumentRanges(self._s[1688]!, self._r[1688]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[1687]! } - public var NotificationsSound_Bell: String { return self._s[1688]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1689]! } - public var Weekday_Monday: String { return self._s[1690]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1691]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1692]! } - public var ChatSettings_Groups: String { return self._s[1693]! } - public var Your_card_was_declined: String { return self._s[1694]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1696]! } - public var ChatList_Unmute: String { return self._s[1697]! } - public var PhotoEditor_CurvesAll: String { return self._s[1698]! } - public var Weekday_ShortTuesday: String { return self._s[1699]! } - public var DialogList_Read: String { return self._s[1700]! } - public var Appearance_AppIconClassic: String { return self._s[1701]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1702]! } - public var Passport_Identity_Gender: String { return self._s[1703]! } + public var Username_CheckingUsername: String { return self._s[1689]! } + public var NotificationsSound_Bell: String { return self._s[1690]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1691]! } + public var Weekday_Monday: String { return self._s[1692]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1693]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1694]! } + public var ChatSettings_Groups: String { return self._s[1695]! } + public var Your_card_was_declined: String { return self._s[1696]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1698]! } + public var ChatList_Unmute: String { return self._s[1699]! } + public var PhotoEditor_CurvesAll: String { return self._s[1700]! } + public var Weekday_ShortTuesday: String { return self._s[1701]! } + public var DialogList_Read: String { return self._s[1702]! } + public var Appearance_AppIconClassic: String { return self._s[1703]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1704]! } + public var Passport_Identity_Gender: String { return self._s[1705]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1704]!, self._r[1704]!, [_0]) + return formatWithArgumentRanges(self._s[1706]!, self._r[1706]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1705]! } + public var Target_SelectGroup: String { return self._s[1707]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1707]!, self._r[1707]!, [_0]) + return formatWithArgumentRanges(self._s[1709]!, self._r[1709]!, [_0]) } - public var Passport_Language_en: String { return self._s[1708]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1709]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1710]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1711]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[1713]! } - public var Login_InfoHelp: String { return self._s[1714]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1715]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1716]! } + public var Passport_Language_en: String { return self._s[1710]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1711]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1712]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1713]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1715]! } + public var Login_InfoHelp: String { return self._s[1716]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1717]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1718]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1717]!, self._r[1717]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1719]!, self._r[1719]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[1720]! } - public var CreatePoll_Title: String { return self._s[1721]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1722]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1723]! } - public var UserInfo_GroupsInCommon: String { return self._s[1724]! } - public var Call_AudioRouteHide: String { return self._s[1725]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1727]! } + public var SocksProxySetup_AddProxy: String { return self._s[1722]! } + public var CreatePoll_Title: String { return self._s[1723]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1724]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1725]! } + public var UserInfo_GroupsInCommon: String { return self._s[1726]! } + public var Call_AudioRouteHide: String { return self._s[1727]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1729]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1728]!, self._r[1728]!, [_0]) + return formatWithArgumentRanges(self._s[1730]!, self._r[1730]!, [_0]) } - public var TextFormat_Bold: String { return self._s[1729]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1730]! } - public var Notifications_Title: String { return self._s[1731]! } - public var Group_Username_InvalidTooShort: String { return self._s[1732]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1733]! } + public var TextFormat_Bold: String { return self._s[1731]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1732]! } + public var Notifications_Title: String { return self._s[1733]! } + public var Group_Username_InvalidTooShort: String { return self._s[1734]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1735]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1734]!, self._r[1734]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1736]!, self._r[1736]!, ["\(_0)"]) } - public var Stickers_SuggestAdded: String { return self._s[1736]! } - public var Login_CountryCode: String { return self._s[1737]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[1738]! } - public var Map_GetDirections: String { return self._s[1739]! } - public var Login_PhoneFloodError: String { return self._s[1740]! } + public var Stickers_SuggestAdded: String { return self._s[1738]! } + public var Login_CountryCode: String { return self._s[1739]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[1740]! } + public var Map_GetDirections: String { return self._s[1741]! } + public var Login_PhoneFloodError: String { return self._s[1742]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1741]!, self._r[1741]!, [_0]) + return formatWithArgumentRanges(self._s[1743]!, self._r[1743]!, [_0]) } - public var Settings_SetUsername: String { return self._s[1743]! } - public var Group_Location_ChangeLocation: String { return self._s[1744]! } - public var Notification_GroupInviterSelf: String { return self._s[1745]! } - public var InstantPage_TapToOpenLink: String { return self._s[1746]! } + public var Settings_SetUsername: String { return self._s[1745]! } + public var Group_Location_ChangeLocation: String { return self._s[1746]! } + public var Notification_GroupInviterSelf: String { return self._s[1747]! } + public var InstantPage_TapToOpenLink: String { return self._s[1748]! } public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1747]!, self._r[1747]!, [_0]) + return formatWithArgumentRanges(self._s[1749]!, self._r[1749]!, [_0]) } - public var Watch_Suggestion_TalkLater: String { return self._s[1748]! } - public var SecretChat_Title: String { return self._s[1749]! } - public var Group_UpgradeNoticeText1: String { return self._s[1750]! } - public var AuthSessions_Title: String { return self._s[1751]! } + public var Watch_Suggestion_TalkLater: String { return self._s[1750]! } + public var SecretChat_Title: String { return self._s[1751]! } + public var Group_UpgradeNoticeText1: String { return self._s[1752]! } + public var AuthSessions_Title: String { return self._s[1753]! } public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1752]!, self._r[1752]!, [_0]) + return formatWithArgumentRanges(self._s[1754]!, self._r[1754]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[1753]! } - public var Channel_About_Title: String { return self._s[1754]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[1755]! } + public var PhotoEditor_CropAuto: String { return self._s[1755]! } + public var Channel_About_Title: String { return self._s[1756]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[1757]! } public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1757]!, self._r[1757]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1759]!, self._r[1759]!, ["\(_0)"]) } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1759]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[1760]! } + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1761]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[1762]! } public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1761]!, self._r[1761]!, [_1]) + return formatWithArgumentRanges(self._s[1763]!, self._r[1763]!, [_1]) } public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1763]!, self._r[1763]!, [_0]) + return formatWithArgumentRanges(self._s[1765]!, self._r[1765]!, [_0]) } public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1764]!, self._r[1764]!, [_0]) + return formatWithArgumentRanges(self._s[1766]!, self._r[1766]!, [_0]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[1765]! } - public var Presence_online: String { return self._s[1767]! } - public var PasscodeSettings_Title: String { return self._s[1768]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1769]! } - public var Web_OpenExternal: String { return self._s[1770]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[1772]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1773]! } - public var LocalGroup_Title: String { return self._s[1774]! } + public var Privacy_PaymentsClearInfoHelp: String { return self._s[1767]! } + public var Presence_online: String { return self._s[1769]! } + public var PasscodeSettings_Title: String { return self._s[1770]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1771]! } + public var Web_OpenExternal: String { return self._s[1772]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[1774]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1775]! } + public var LocalGroup_Title: String { return self._s[1776]! } public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1775]!, self._r[1775]!, [_0]) + return formatWithArgumentRanges(self._s[1777]!, self._r[1777]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1776]! } - public var Map_YouAreHere: String { return self._s[1777]! } + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1778]! } + public var Map_YouAreHere: String { return self._s[1779]! } public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1778]!, self._r[1778]!, [_0]) + return formatWithArgumentRanges(self._s[1780]!, self._r[1780]!, [_0]) } public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1779]!, self._r[1779]!, [_0]) + return formatWithArgumentRanges(self._s[1781]!, self._r[1781]!, [_0]) } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1780]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1781]! } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1782]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1783]! } public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1782]!, self._r[1782]!, [_0]) + return formatWithArgumentRanges(self._s[1784]!, self._r[1784]!, [_0]) } public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1783]!, self._r[1783]!, [_0]) + return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_0]) } - public var SocksProxySetup_Username: String { return self._s[1784]! } - public var Bot_Start: String { return self._s[1785]! } + public var SocksProxySetup_Username: String { return self._s[1786]! } + public var Bot_Start: String { return self._s[1787]! } public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1786]!, self._r[1786]!, [_0]) + return formatWithArgumentRanges(self._s[1788]!, self._r[1788]!, [_0]) } public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1787]!, self._r[1787]!, [_0]) + return formatWithArgumentRanges(self._s[1789]!, self._r[1789]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[1788]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1790]! } + public var Contacts_SortByPresence: String { return self._s[1790]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1792]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_1, _2]) - } - public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1792]!, self._r[1792]!, [_0]) - } - public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1793]!, self._r[1793]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[1794]! } - public var Login_InfoAvatarPhoto: String { return self._s[1795]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1796]! } - public var Tour_Title4: String { return self._s[1797]! } - public var Passport_Identity_Translation: String { return self._s[1798]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1799]! } - public var Login_TermsOfServiceLabel: String { return self._s[1801]! } - public var Passport_Language_it: String { return self._s[1802]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1803]! } - public var Passport_Identity_SelfieHelp: String { return self._s[1804]! } - public var Conversation_ClearAll: String { return self._s[1806]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[1808]! } - public var TwoStepAuth_FloodError: String { return self._s[1809]! } + public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_0]) + } + public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1795]!, self._r[1795]!, [_1, _2]) + } + public var Passport_Email_EnterOtherEmail: String { return self._s[1796]! } + public var Login_InfoAvatarPhoto: String { return self._s[1797]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1798]! } + public var Tour_Title4: String { return self._s[1799]! } + public var Passport_Identity_Translation: String { return self._s[1800]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1801]! } + public var Login_TermsOfServiceLabel: String { return self._s[1803]! } + public var Passport_Language_it: String { return self._s[1804]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1805]! } + public var Passport_Identity_SelfieHelp: String { return self._s[1806]! } + public var Conversation_ClearAll: String { return self._s[1808]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[1810]! } + public var TwoStepAuth_FloodError: String { return self._s[1811]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1810]!, self._r[1810]!, [_1]) + return formatWithArgumentRanges(self._s[1812]!, self._r[1812]!, [_1]) } - public var Paint_Delete: String { return self._s[1811]! } - public var Privacy_AddNewPeer: String { return self._s[1812]! } - public var LogoutOptions_SetPasscodeText: String { return self._s[1813]! } + public var Paint_Delete: String { return self._s[1813]! } + public var Privacy_AddNewPeer: String { return self._s[1814]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[1815]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1814]!, self._r[1814]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1816]!, self._r[1816]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[1815]! } + public var Message_PinnedAudioMessage: String { return self._s[1817]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1816]!, self._r[1816]!, [_0]) + return formatWithArgumentRanges(self._s[1818]!, self._r[1818]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[1817]! } - public var Notifications_GroupNotificationsSound: String { return self._s[1818]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[1819]! } - public var Conversation_MessageEditedLabel: String { return self._s[1820]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[1821]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[1822]! } + public var Notification_Mute1hMin: String { return self._s[1819]! } + public var Notifications_GroupNotificationsSound: String { return self._s[1820]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[1821]! } + public var Conversation_MessageEditedLabel: String { return self._s[1822]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[1823]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[1824]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1823]!, self._r[1823]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1825]!, self._r[1825]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[1824]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[1826]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1825]!, self._r[1825]!, [_1]) + return formatWithArgumentRanges(self._s[1827]!, self._r[1827]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[1826]! } - public var Month_GenOctober: String { return self._s[1827]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1828]! } - public var EnterPasscode_EnterPasscode: String { return self._s[1829]! } - public var MediaPicker_TimerTooltip: String { return self._s[1831]! } - public var SharedMedia_TitleAll: String { return self._s[1832]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[1835]! } - public var Conversation_RestrictedMedia: String { return self._s[1836]! } - public var AccessDenied_PhotosRestricted: String { return self._s[1837]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[1839]! } - public var ChangePhoneNumberCode_Called: String { return self._s[1840]! } + public var AccessDenied_LocationTracking: String { return self._s[1828]! } + public var Month_GenOctober: String { return self._s[1829]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1830]! } + public var EnterPasscode_EnterPasscode: String { return self._s[1831]! } + public var MediaPicker_TimerTooltip: String { return self._s[1833]! } + public var SharedMedia_TitleAll: String { return self._s[1834]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[1837]! } + public var Conversation_RestrictedMedia: String { return self._s[1838]! } + public var AccessDenied_PhotosRestricted: String { return self._s[1839]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[1841]! } + public var ChangePhoneNumberCode_Called: String { return self._s[1842]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1841]!, self._r[1841]!, [_0]) + return formatWithArgumentRanges(self._s[1843]!, self._r[1843]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[1844]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[1846]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1847]! } + public var Conversation_SavedMessages: String { return self._s[1846]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[1848]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1849]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1849]!, self._r[1849]!, [_0]) + return formatWithArgumentRanges(self._s[1851]!, self._r[1851]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[1850]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1851]! } + public var ReportPeer_AlertSuccess: String { return self._s[1852]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1853]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1852]!, self._r[1852]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1854]!, self._r[1854]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[1853]! } - public var PhotoEditor_FadeTool: String { return self._s[1854]! } - public var Privacy_ContactsReset: String { return self._s[1855]! } + public var Checkout_PasswordEntry_Title: String { return self._s[1855]! } + public var PhotoEditor_FadeTool: String { return self._s[1856]! } + public var Privacy_ContactsReset: String { return self._s[1857]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1857]!, self._r[1857]!, [_0]) + return formatWithArgumentRanges(self._s[1859]!, self._r[1859]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[1858]! } - public var ChatList_Mute: String { return self._s[1859]! } - public var Permissions_CellularDataText_v0: String { return self._s[1860]! } - public var ShareMenu_SelectChats: String { return self._s[1862]! } - public var MusicPlayer_VoiceNote: String { return self._s[1863]! } - public var Conversation_RestrictedText: String { return self._s[1864]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[1865]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[1866]! } - public var Cache_Videos: String { return self._s[1867]! } - public var PrivacySettings_PhoneNumber: String { return self._s[1868]! } - public var FeatureDisabled_Oops: String { return self._s[1870]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[1871]! } + public var Message_PinnedVideoMessage: String { return self._s[1860]! } + public var ChatList_Mute: String { return self._s[1861]! } + public var Permissions_CellularDataText_v0: String { return self._s[1862]! } + public var ShareMenu_SelectChats: String { return self._s[1864]! } + public var MusicPlayer_VoiceNote: String { return self._s[1865]! } + public var Conversation_RestrictedText: String { return self._s[1866]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[1867]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[1868]! } + public var Cache_Videos: String { return self._s[1869]! } + public var PrivacySettings_PhoneNumber: String { return self._s[1870]! } + public var FeatureDisabled_Oops: String { return self._s[1872]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[1873]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1872]!, self._r[1872]!, [_0]) + return formatWithArgumentRanges(self._s[1874]!, self._r[1874]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[1873]! } - public var GroupPermission_NoSendPolls: String { return self._s[1874]! } - public var Message_VideoExpired: String { return self._s[1876]! } - public var Notifications_Badge: String { return self._s[1877]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[1878]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[1879]! } - public var Username_InvalidTooShort: String { return self._s[1880]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1881]! } - public var Channel_AdminLog_PinMessages: String { return self._s[1882]! } - public var ArchivedChats_IntroTitle3: String { return self._s[1883]! } + public var Stickers_GroupStickersHelp: String { return self._s[1875]! } + public var GroupPermission_NoSendPolls: String { return self._s[1876]! } + public var Message_VideoExpired: String { return self._s[1878]! } + public var Notifications_Badge: String { return self._s[1879]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[1880]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[1881]! } + public var Username_InvalidTooShort: String { return self._s[1882]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1883]! } + public var Channel_AdminLog_PinMessages: String { return self._s[1884]! } + public var ArchivedChats_IntroTitle3: String { return self._s[1885]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1884]!, self._r[1884]!, [_1]) + return formatWithArgumentRanges(self._s[1886]!, self._r[1886]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[1885]! } - public var Conversation_DefaultRestrictedText: String { return self._s[1886]! } - public var SharedMedia_CategoryDocs: String { return self._s[1889]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[1887]! } + public var Conversation_DefaultRestrictedText: String { return self._s[1888]! } + public var SharedMedia_CategoryDocs: String { return self._s[1891]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1890]!, self._r[1890]!, [_1]) + return formatWithArgumentRanges(self._s[1892]!, self._r[1892]!, [_1]) } - public var Privacy_Forwards_NeverLink: String { return self._s[1892]! } + public var Privacy_Forwards_NeverLink: String { return self._s[1894]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1893]!, self._r[1893]!, [_1]) + return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1894]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1896]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_0]) + return formatWithArgumentRanges(self._s[1897]!, self._r[1897]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[1896]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[1897]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[1898]! } - public var Channel_UpdatePhotoItem: String { return self._s[1899]! } - public var GroupInfo_LeftStatus: String { return self._s[1900]! } - public var Watch_MessageView_Forward: String { return self._s[1902]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[1903]! } - public var Cache_ClearEmpty: String { return self._s[1905]! } - public var Localization_LanguageName: String { return self._s[1906]! } - public var WebSearch_GIFs: String { return self._s[1907]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1908]! } - public var Username_InvalidStartsWithNumber: String { return self._s[1909]! } - public var Common_Back: String { return self._s[1910]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1911]! } + public var ChatSettings_PrivateChats: String { return self._s[1898]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[1899]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[1900]! } + public var Channel_UpdatePhotoItem: String { return self._s[1901]! } + public var GroupInfo_LeftStatus: String { return self._s[1902]! } + public var Watch_MessageView_Forward: String { return self._s[1904]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[1905]! } + public var Cache_ClearEmpty: String { return self._s[1907]! } + public var Localization_LanguageName: String { return self._s[1908]! } + public var WebSearch_GIFs: String { return self._s[1909]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1910]! } + public var Username_InvalidStartsWithNumber: String { return self._s[1911]! } + public var Common_Back: String { return self._s[1912]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1913]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1912]!, self._r[1912]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1914]!, self._r[1914]!, [_1, _2]) } - public var Passport_Email_Help: String { return self._s[1913]! } - public var Watch_Conversation_Reply: String { return self._s[1915]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[1917]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1918]! } - public var Channel_BanUser_Unban: String { return self._s[1920]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1921]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[1922]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1924]! } - public var Passport_Identity_Name: String { return self._s[1925]! } + public var Passport_Email_Help: String { return self._s[1915]! } + public var Watch_Conversation_Reply: String { return self._s[1917]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[1919]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1920]! } + public var Channel_BanUser_Unban: String { return self._s[1922]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1923]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[1924]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1926]! } + public var Passport_Identity_Name: String { return self._s[1927]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1926]!, self._r[1926]!, [_0]) + return formatWithArgumentRanges(self._s[1928]!, self._r[1928]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[1927]! } - public var Conversation_BlockUser: String { return self._s[1928]! } - public var Month_GenJanuary: String { return self._s[1929]! } - public var ChatSettings_TextSize: String { return self._s[1930]! } - public var Notification_PassportValuePhone: String { return self._s[1931]! } - public var Passport_Language_ne: String { return self._s[1932]! } - public var Notification_CallBack: String { return self._s[1933]! } - public var TwoStepAuth_EmailHelp: String { return self._s[1934]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[1929]! } + public var Conversation_BlockUser: String { return self._s[1930]! } + public var Month_GenJanuary: String { return self._s[1931]! } + public var ChatSettings_TextSize: String { return self._s[1932]! } + public var Notification_PassportValuePhone: String { return self._s[1933]! } + public var Passport_Language_ne: String { return self._s[1934]! } + public var Notification_CallBack: String { return self._s[1935]! } + public var TwoStepAuth_EmailHelp: String { return self._s[1936]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1935]!, self._r[1935]!, [_0]) + return formatWithArgumentRanges(self._s[1937]!, self._r[1937]!, [_0]) } - public var Channel_Info_Management: String { return self._s[1936]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[1937]! } - public var Stickers_FrequentlyUsed: String { return self._s[1938]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[1939]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1941]! } + public var Channel_Info_Management: String { return self._s[1938]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[1939]! } + public var Stickers_FrequentlyUsed: String { return self._s[1940]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[1941]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1943]! } public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1942]!, self._r[1942]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[1944]!, self._r[1944]!, [_1, "\(_2)"]) } - public var Passport_Address_EditResidentialAddress: String { return self._s[1943]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[1944]! } - public var CreatePoll_TextHeader: String { return self._s[1945]! } + public var Passport_Address_EditResidentialAddress: String { return self._s[1945]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[1946]! } + public var CreatePoll_TextHeader: String { return self._s[1947]! } public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1946]!, self._r[1946]!, [_0]) + return formatWithArgumentRanges(self._s[1948]!, self._r[1948]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[1947]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1948]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[1950]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[1951]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[1952]! } + public var PhotoEditor_QualityMedium: String { return self._s[1949]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1950]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[1952]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[1953]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[1954]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1953]!, self._r[1953]!, [_0]) + return formatWithArgumentRanges(self._s[1955]!, self._r[1955]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1954]!, self._r[1954]!, [_1]) + return formatWithArgumentRanges(self._s[1956]!, self._r[1956]!, [_1]) } - public var Conversation_LinkDialogOpen: String { return self._s[1956]! } - public var Settings_Username: String { return self._s[1957]! } - public var Conversation_Block: String { return self._s[1959]! } - public var Wallpaper_Wallpaper: String { return self._s[1960]! } - public var SocksProxySetup_UseProxy: String { return self._s[1962]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[1963]! } - public var MessageTimer_Forever: String { return self._s[1964]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[1965]! } - public var PhotoEditor_DiscardChanges: String { return self._s[1966]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1967]! } - public var Passport_Language_da: String { return self._s[1968]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[1969]! } + public var Conversation_LinkDialogOpen: String { return self._s[1958]! } + public var Settings_Username: String { return self._s[1959]! } + public var Conversation_Block: String { return self._s[1961]! } + public var Wallpaper_Wallpaper: String { return self._s[1962]! } + public var SocksProxySetup_UseProxy: String { return self._s[1964]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[1965]! } + public var MessageTimer_Forever: String { return self._s[1966]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[1967]! } + public var PhotoEditor_DiscardChanges: String { return self._s[1968]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1969]! } + public var Passport_Language_da: String { return self._s[1970]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[1971]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1970]!, self._r[1970]!, [_0]) + return formatWithArgumentRanges(self._s[1972]!, self._r[1972]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[1971]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[1973]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1973]!, self._r[1973]!, [_0]) + return formatWithArgumentRanges(self._s[1975]!, self._r[1975]!, [_0]) } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1975]! } - public var Conversation_SearchByName_Prefix: String { return self._s[1976]! } - public var Conversation_PinnedPoll: String { return self._s[1977]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1978]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1977]! } + public var Conversation_SearchByName_Prefix: String { return self._s[1978]! } + public var Conversation_PinnedPoll: String { return self._s[1979]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1980]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1979]!, self._r[1979]!, [_1]) + return formatWithArgumentRanges(self._s[1981]!, self._r[1981]!, [_1]) } - public var WallpaperSearch_ColorPurple: String { return self._s[1980]! } - public var Cache_ByPeerHeader: String { return self._s[1981]! } + public var WallpaperSearch_ColorPurple: String { return self._s[1982]! } + public var Cache_ByPeerHeader: String { return self._s[1983]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1982]!, self._r[1982]!, [_0]) + return formatWithArgumentRanges(self._s[1984]!, self._r[1984]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[1983]! } - public var Notification_PinnedMessage: String { return self._s[1986]! } - public var Contacts_SortBy: String { return self._s[1988]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[1985]! } + public var Notification_PinnedMessage: String { return self._s[1988]! } + public var Contacts_SortBy: String { return self._s[1990]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1989]!, self._r[1989]!, [_1]) + return formatWithArgumentRanges(self._s[1991]!, self._r[1991]!, [_1]) } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1991]!, self._r[1991]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1993]!, self._r[1993]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[1992]! } - public var Watch_UserInfo_Service: String { return self._s[1993]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[1995]! } - public var Conversation_Unpin: String { return self._s[1997]! } - public var CancelResetAccount_Title: String { return self._s[1998]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[1999]! } + public var Call_EncryptionKey_Title: String { return self._s[1994]! } + public var Watch_UserInfo_Service: String { return self._s[1995]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[1997]! } + public var Conversation_Unpin: String { return self._s[1999]! } + public var CancelResetAccount_Title: String { return self._s[2000]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2001]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2001]!, self._r[2001]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2003]!, self._r[2003]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2002]! } - public var CallSettings_Title: String { return self._s[2003]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2004]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2006]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2007]! } - public var Passport_Identity_DocumentDetails: String { return self._s[2008]! } - public var LoginPassword_PasswordHelp: String { return self._s[2009]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2010]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2011]! } - public var Checkout_TotalPaidAmount: String { return self._s[2012]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2004]! } + public var CallSettings_Title: String { return self._s[2005]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2006]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2008]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2009]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2010]! } + public var LoginPassword_PasswordHelp: String { return self._s[2011]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2012]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2013]! } + public var Checkout_TotalPaidAmount: String { return self._s[2014]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_0]) + return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0]) } - public var PasscodeSettings_ChangePasscode: String { return self._s[2014]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2016]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2017]! } + public var PasscodeSettings_ChangePasscode: String { return self._s[2016]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2018]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2019]! } public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2018]!, self._r[2018]!, [_1]) + return formatWithArgumentRanges(self._s[2020]!, self._r[2020]!, [_1]) } - public var Contacts_InviteFriends: String { return self._s[2020]! } - public var Map_ChooseLocationTitle: String { return self._s[2021]! } - public var Conversation_StopPoll: String { return self._s[2023]! } + public var Contacts_InviteFriends: String { return self._s[2022]! } + public var Map_ChooseLocationTitle: String { return self._s[2023]! } + public var Conversation_StopPoll: String { return self._s[2025]! } public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2024]!, self._r[2024]!, [_0]) + return formatWithArgumentRanges(self._s[2026]!, self._r[2026]!, [_0]) } - public var Call_Camera: String { return self._s[2025]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2026]! } - public var Calls_RatingFeedback: String { return self._s[2027]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2028]! } - public var NotificationsSound_Pulse: String { return self._s[2029]! } - public var Watch_LastSeen_Lately: String { return self._s[2030]! } - public var ReportGroupLocation_Report: String { return self._s[2033]! } - public var Widget_NoUsers: String { return self._s[2034]! } - public var Conversation_UnvotePoll: String { return self._s[2035]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2037]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2038]! } - public var NotificationsSound_Circles: String { return self._s[2039]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2041]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2042]! } - public var Proxy_TooltipUnavailable: String { return self._s[2043]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2045]! } - public var Conversation_FileDropbox: String { return self._s[2047]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2048]! } - public var Tour_Text3: String { return self._s[2050]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2052]! } - public var GroupPermission_NoSendMessages: String { return self._s[2053]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2054]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2055]! } + public var Call_Camera: String { return self._s[2027]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2028]! } + public var Calls_RatingFeedback: String { return self._s[2029]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2030]! } + public var NotificationsSound_Pulse: String { return self._s[2031]! } + public var Watch_LastSeen_Lately: String { return self._s[2032]! } + public var ReportGroupLocation_Report: String { return self._s[2035]! } + public var Widget_NoUsers: String { return self._s[2036]! } + public var Conversation_UnvotePoll: String { return self._s[2037]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2039]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2040]! } + public var NotificationsSound_Circles: String { return self._s[2041]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2043]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2044]! } + public var Proxy_TooltipUnavailable: String { return self._s[2045]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2047]! } + public var Conversation_FileDropbox: String { return self._s[2049]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2050]! } + public var Tour_Text3: String { return self._s[2052]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2054]! } + public var GroupPermission_NoSendMessages: String { return self._s[2055]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2056]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2057]! } public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2057]!, self._r[2057]!, [_0]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_0]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2058]! } - public var Checkout_ShippingOption_Title: String { return self._s[2059]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2060]! } + public var GroupInfo_AddParticipantTitle: String { return self._s[2060]! } + public var Checkout_ShippingOption_Title: String { return self._s[2061]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2062]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2061]!, self._r[2061]!, [_0]) + return formatWithArgumentRanges(self._s[2063]!, self._r[2063]!, [_0]) } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2062]!, self._r[2062]!, [_0]) + return formatWithArgumentRanges(self._s[2064]!, self._r[2064]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2063]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2064]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2065]! } - public var AutoDownloadSettings_Photos: String { return self._s[2067]! } - public var Appearance_PreviewIncomingText: String { return self._s[2068]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2069]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2070]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2071]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2072]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2073]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2074]! } - public var Notification_SecretChatScreenshot: String { return self._s[2075]! } - public var AccessDenied_Wallpapers: String { return self._s[2076]! } - public var Passport_Address_City: String { return self._s[2078]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2079]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2080]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2081]! } - public var AccessDenied_LocationDisabled: String { return self._s[2082]! } - public var Group_Location_Title: String { return self._s[2083]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2085]! } - public var GroupInfo_Sound: String { return self._s[2086]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2087]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2088]! } - public var Contacts_Title: String { return self._s[2089]! } - public var Passport_Language_fr: String { return self._s[2090]! } - public var Notifications_ResetAllNotifications: String { return self._s[2091]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2094]! } - public var Checkout_NewCard_Title: String { return self._s[2095]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2096]! } - public var Conversation_ForwardChats: String { return self._s[2097]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2099]! } - public var Settings_FAQ: String { return self._s[2101]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2102]! } - public var Conversation_ContextMenuForward: String { return self._s[2103]! } - public var PrivacyPolicy_Title: String { return self._s[2108]! } - public var Notifications_TextTone: String { return self._s[2109]! } - public var Profile_CreateNewContact: String { return self._s[2110]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2111]! } - public var Call_Speaker: String { return self._s[2113]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2114]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2116]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2117]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2065]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2066]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2067]! } + public var AutoDownloadSettings_Photos: String { return self._s[2069]! } + public var Appearance_PreviewIncomingText: String { return self._s[2070]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2071]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2072]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2073]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2074]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2075]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2076]! } + public var Notification_SecretChatScreenshot: String { return self._s[2077]! } + public var AccessDenied_Wallpapers: String { return self._s[2078]! } + public var Passport_Address_City: String { return self._s[2080]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2081]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2082]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2083]! } + public var AccessDenied_LocationDisabled: String { return self._s[2084]! } + public var Group_Location_Title: String { return self._s[2085]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2087]! } + public var GroupInfo_Sound: String { return self._s[2088]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2089]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2090]! } + public var Contacts_Title: String { return self._s[2091]! } + public var Passport_Language_fr: String { return self._s[2092]! } + public var Notifications_ResetAllNotifications: String { return self._s[2093]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2096]! } + public var Checkout_NewCard_Title: String { return self._s[2097]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2098]! } + public var Conversation_ForwardChats: String { return self._s[2099]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2101]! } + public var Settings_FAQ: String { return self._s[2103]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2104]! } + public var Conversation_ContextMenuForward: String { return self._s[2105]! } + public var PrivacyPolicy_Title: String { return self._s[2110]! } + public var Notifications_TextTone: String { return self._s[2111]! } + public var Profile_CreateNewContact: String { return self._s[2112]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2113]! } + public var Call_Speaker: String { return self._s[2115]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2116]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2118]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2119]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2118]!, self._r[2118]!, [_0]) + return formatWithArgumentRanges(self._s[2120]!, self._r[2120]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2119]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2120]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2121]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2122]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2123]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2124]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2125]! } - public var Bot_Unblock: String { return self._s[2126]! } - public var TextFormat_Italic: String { return self._s[2127]! } - public var WallpaperSearch_ColorPink: String { return self._s[2128]! } - public var Settings_About_Help: String { return self._s[2129]! } - public var SearchImages_Title: String { return self._s[2130]! } - public var Weekday_Wednesday: String { return self._s[2131]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2132]! } - public var ExplicitContent_AlertTitle: String { return self._s[2133]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2121]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2122]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2123]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2124]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2125]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2126]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2127]! } + public var Bot_Unblock: String { return self._s[2128]! } + public var TextFormat_Italic: String { return self._s[2129]! } + public var WallpaperSearch_ColorPink: String { return self._s[2130]! } + public var Settings_About_Help: String { return self._s[2131]! } + public var SearchImages_Title: String { return self._s[2132]! } + public var Weekday_Wednesday: String { return self._s[2133]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2134]! } + public var ExplicitContent_AlertTitle: String { return self._s[2135]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2134]!, self._r[2134]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2136]!, self._r[2136]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2135]! } - public var Weekday_Thursday: String { return self._s[2136]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2137]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2138]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2137]! } + public var Weekday_Thursday: String { return self._s[2138]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2139]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2140]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2139]!, self._r[2139]!, [_0]) + return formatWithArgumentRanges(self._s[2141]!, self._r[2141]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2140]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2141]! } - public var Passport_RequestedInformation: String { return self._s[2142]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2143]! } - public var Conversation_EncryptionProcessing: String { return self._s[2145]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2146]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2148]! } - public var Channel_Setup_Title: String { return self._s[2149]! } - public var Conversation_SearchPlaceholder: String { return self._s[2150]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2151]! } - public var Checkout_ErrorGeneric: String { return self._s[2152]! } - public var Passport_Language_hu: String { return self._s[2153]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2142]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2143]! } + public var Passport_RequestedInformation: String { return self._s[2144]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2145]! } + public var Conversation_EncryptionProcessing: String { return self._s[2147]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2148]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2150]! } + public var Channel_Setup_Title: String { return self._s[2151]! } + public var Conversation_SearchPlaceholder: String { return self._s[2152]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2153]! } + public var Checkout_ErrorGeneric: String { return self._s[2154]! } + public var Passport_Language_hu: String { return self._s[2155]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2155]!, self._r[2155]!, [_0]) + return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, [_0]) } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2158]!, self._r[2158]!, [_1]) + return formatWithArgumentRanges(self._s[2160]!, self._r[2160]!, [_1]) } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2159]!, self._r[2159]!, [_0]) + return formatWithArgumentRanges(self._s[2161]!, self._r[2161]!, [_0]) } - public var Group_Location_Info: String { return self._s[2160]! } - public var Conversation_CloudStorageInfo_Title: String { return self._s[2161]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2162]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2163]! } + public var Group_Location_Info: String { return self._s[2162]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[2163]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2164]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2165]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_0]) + return formatWithArgumentRanges(self._s[2166]!, self._r[2166]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[2165]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[2166]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[2167]! } + public var Conversation_ClearPrivateHistory: String { return self._s[2167]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[2168]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[2169]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2168]!, self._r[2168]!, [_0]) + return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, [_0]) } - public var Passport_Language_cs: String { return self._s[2169]! } - public var Message_PinnedAnimationMessage: String { return self._s[2171]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[2173]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2174]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2176]! } - public var Embed_PlayingInPIP: String { return self._s[2177]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[2178]! } + public var Passport_Language_cs: String { return self._s[2171]! } + public var Message_PinnedAnimationMessage: String { return self._s[2173]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[2175]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2176]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2178]! } + public var Embed_PlayingInPIP: String { return self._s[2179]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[2180]! } public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2179]!, self._r[2179]!, [_0]) + return formatWithArgumentRanges(self._s[2181]!, self._r[2181]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[2180]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[2182]! } public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2181]!, self._r[2181]!, [_1]) + return formatWithArgumentRanges(self._s[2183]!, self._r[2183]!, [_1]) } - public var Notification_PaymentSent: String { return self._s[2182]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2183]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2184]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[2185]! } - public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2186]! } + public var Notification_PaymentSent: String { return self._s[2184]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2185]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2186]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[2187]! } + public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2188]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2189]!, self._r[2189]!, [_1]) - } - public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2190]!, self._r[2190]!, [_1]) - } - public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2191]!, self._r[2191]!, [_1]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[2193]! } - public var PasscodeSettings_HelpTop: String { return self._s[2194]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2195]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2196]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2197]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2198]! } - public var Call_Accept: String { return self._s[2200]! } - public var GroupRemoved_RemoveInfo: String { return self._s[2201]! } - public var Month_GenMarch: String { return self._s[2203]! } - public var PhotoEditor_ShadowsTool: String { return self._s[2204]! } - public var LoginPassword_Title: String { return self._s[2205]! } - public var Call_End: String { return self._s[2206]! } - public var Watch_Conversation_GroupInfo: String { return self._s[2207]! } - public var CallSettings_Always: String { return self._s[2208]! } - public var CallFeedback_Success: String { return self._s[2209]! } - public var TwoStepAuth_SetupHint: String { return self._s[2210]! } + public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_1]) + } + public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_1]) + } + public var NetworkUsageSettings_CallDataSection: String { return self._s[2195]! } + public var PasscodeSettings_HelpTop: String { return self._s[2196]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2197]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2198]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2199]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2200]! } + public var Call_Accept: String { return self._s[2202]! } + public var GroupRemoved_RemoveInfo: String { return self._s[2203]! } + public var Month_GenMarch: String { return self._s[2205]! } + public var PhotoEditor_ShadowsTool: String { return self._s[2206]! } + public var LoginPassword_Title: String { return self._s[2207]! } + public var Call_End: String { return self._s[2208]! } + public var Watch_Conversation_GroupInfo: String { return self._s[2209]! } + public var CallSettings_Always: String { return self._s[2210]! } + public var CallFeedback_Success: String { return self._s[2211]! } + public var TwoStepAuth_SetupHint: String { return self._s[2212]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2211]!, self._r[2211]!, [_1]) + return formatWithArgumentRanges(self._s[2213]!, self._r[2213]!, [_1]) } - public var ConversationProfile_UsersTooMuchError: String { return self._s[2212]! } - public var Login_PhoneTitle: String { return self._s[2213]! } - public var Passport_FieldPhoneHelp: String { return self._s[2214]! } - public var Weekday_ShortSunday: String { return self._s[2215]! } - public var Passport_InfoFAQ_URL: String { return self._s[2216]! } - public var ContactInfo_Job: String { return self._s[2218]! } - public var UserInfo_InviteBotToGroup: String { return self._s[2219]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[2220]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2221]! } - public var Invite_ChannelsTooMuch: String { return self._s[2222]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2223]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2224]! } - public var CallFeedback_ReasonNoise: String { return self._s[2225]! } - public var Appearance_AppIconDefault: String { return self._s[2227]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[2228]! } - public var MediaPicker_AddCaption: String { return self._s[2229]! } - public var CallSettings_TabIconDescription: String { return self._s[2230]! } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2231]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2232]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[2233]! } - public var DialogList_SearchSectionRecent: String { return self._s[2234]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[2235]! } - public var LogoutOptions_ClearCacheText: String { return self._s[2238]! } - public var LastSeen_WithinAWeek: String { return self._s[2239]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[2240]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[2242]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[2214]! } + public var Login_PhoneTitle: String { return self._s[2215]! } + public var Passport_FieldPhoneHelp: String { return self._s[2216]! } + public var Weekday_ShortSunday: String { return self._s[2217]! } + public var Passport_InfoFAQ_URL: String { return self._s[2218]! } + public var ContactInfo_Job: String { return self._s[2220]! } + public var UserInfo_InviteBotToGroup: String { return self._s[2221]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[2222]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2223]! } + public var Invite_ChannelsTooMuch: String { return self._s[2224]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2225]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2226]! } + public var CallFeedback_ReasonNoise: String { return self._s[2227]! } + public var Appearance_AppIconDefault: String { return self._s[2229]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[2230]! } + public var MediaPicker_AddCaption: String { return self._s[2231]! } + public var CallSettings_TabIconDescription: String { return self._s[2232]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2233]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2234]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[2235]! } + public var DialogList_SearchSectionRecent: String { return self._s[2236]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[2237]! } + public var LogoutOptions_ClearCacheText: String { return self._s[2240]! } + public var LastSeen_WithinAWeek: String { return self._s[2241]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[2242]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[2244]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2243]!, self._r[2243]!, [_0]) + return formatWithArgumentRanges(self._s[2245]!, self._r[2245]!, [_0]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2244]! } - public var Conversation_StatusLeftGroup: String { return self._s[2245]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2246]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2248]! } - public var GroupPermission_AddSuccess: String { return self._s[2249]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2251]! } - public var Conversation_ContextMenuCopy: String { return self._s[2252]! } - public var AccessDenied_CallMicrophone: String { return self._s[2253]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2246]! } + public var Conversation_StatusLeftGroup: String { return self._s[2247]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2248]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2250]! } + public var GroupPermission_AddSuccess: String { return self._s[2251]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2253]! } + public var Conversation_ContextMenuCopy: String { return self._s[2254]! } + public var AccessDenied_CallMicrophone: String { return self._s[2255]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2254]!, self._r[2254]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2256]!, self._r[2256]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[2255]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2256]! } - public var Checkout_PaymentMethod_New: String { return self._s[2257]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[2258]! } - public var PhotoEditor_QualityTool: String { return self._s[2259]! } - public var Login_SendCodeViaSms: String { return self._s[2260]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2261]! } - public var Login_EmailNotConfiguredError: String { return self._s[2262]! } - public var SocksProxySetup_Status: String { return self._s[2263]! } - public var PrivacyPolicy_Accept: String { return self._s[2264]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2265]! } - public var Appearance_AppIconClassicX: String { return self._s[2266]! } + public var Login_InvalidFirstNameError: String { return self._s[2257]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2258]! } + public var Checkout_PaymentMethod_New: String { return self._s[2259]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[2260]! } + public var PhotoEditor_QualityTool: String { return self._s[2261]! } + public var Login_SendCodeViaSms: String { return self._s[2262]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2263]! } + public var Login_EmailNotConfiguredError: String { return self._s[2264]! } + public var SocksProxySetup_Status: String { return self._s[2265]! } + public var PrivacyPolicy_Accept: String { return self._s[2266]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2267]! } + public var Appearance_AppIconClassicX: String { return self._s[2268]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2267]!, self._r[2267]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2269]!, self._r[2269]!, [_1, _2, _3]) } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[2268]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2269]! } - public var AutoNightTheme_Automatic: String { return self._s[2270]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2271]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2272]! } - public var Cache_Help: String { return self._s[2273]! } - public var Group_ErrorAccessDenied: String { return self._s[2274]! } - public var Passport_Language_fa: String { return self._s[2275]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2276]! } - public var PrivacySettings_LastSeen: String { return self._s[2277]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[2270]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2271]! } + public var AutoNightTheme_Automatic: String { return self._s[2272]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2273]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2274]! } + public var Cache_Help: String { return self._s[2275]! } + public var Group_ErrorAccessDenied: String { return self._s[2276]! } + public var Passport_Language_fa: String { return self._s[2277]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2278]! } + public var PrivacySettings_LastSeen: String { return self._s[2279]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2278]!, self._r[2278]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2280]!, self._r[2280]!, [_0, _1]) } - public var Preview_SaveGif: String { return self._s[2282]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2283]! } - public var Profile_About: String { return self._s[2284]! } - public var Channel_About_Placeholder: String { return self._s[2285]! } - public var Login_InfoTitle: String { return self._s[2286]! } + public var Preview_SaveGif: String { return self._s[2284]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2285]! } + public var Profile_About: String { return self._s[2286]! } + public var Channel_About_Placeholder: String { return self._s[2287]! } + public var Login_InfoTitle: String { return self._s[2288]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2287]!, self._r[2287]!, [_0]) + return formatWithArgumentRanges(self._s[2289]!, self._r[2289]!, [_0]) } - public var Watch_Suggestion_CantTalk: String { return self._s[2289]! } - public var ContactInfo_Title: String { return self._s[2290]! } - public var Media_ShareThisVideo: String { return self._s[2291]! } - public var Weekday_ShortFriday: String { return self._s[2292]! } - public var AccessDenied_Contacts: String { return self._s[2293]! } - public var Notification_CallIncomingShort: String { return self._s[2294]! } - public var Group_Setup_TypePublic: String { return self._s[2295]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2296]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2297]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2300]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2301]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2302]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2303]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2304]! } - public var DialogList_Typing: String { return self._s[2305]! } - public var CallFeedback_IncludeLogs: String { return self._s[2307]! } - public var Checkout_Phone: String { return self._s[2309]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2312]! } - public var Privacy_Calls_Integration: String { return self._s[2313]! } - public var Notifications_PermissionsAllow: String { return self._s[2314]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2318]! } - public var Settings_ChatSettings: String { return self._s[2319]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2291]! } + public var ContactInfo_Title: String { return self._s[2292]! } + public var Media_ShareThisVideo: String { return self._s[2293]! } + public var Weekday_ShortFriday: String { return self._s[2294]! } + public var AccessDenied_Contacts: String { return self._s[2295]! } + public var Notification_CallIncomingShort: String { return self._s[2296]! } + public var Group_Setup_TypePublic: String { return self._s[2297]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2298]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2299]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2302]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2303]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2304]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2305]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2306]! } + public var DialogList_Typing: String { return self._s[2307]! } + public var CallFeedback_IncludeLogs: String { return self._s[2309]! } + public var Checkout_Phone: String { return self._s[2311]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2314]! } + public var Privacy_Calls_Integration: String { return self._s[2315]! } + public var Notifications_PermissionsAllow: String { return self._s[2316]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2320]! } + public var Settings_ChatSettings: String { return self._s[2321]! } public func PUSH_MESSAGE_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2320]!, self._r[2320]!, [_1]) + return formatWithArgumentRanges(self._s[2322]!, self._r[2322]!, [_1]) } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2321]!, self._r[2321]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2323]!, self._r[2323]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2323]! } + public var GroupRemoved_DeleteUser: String { return self._s[2325]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2324]!, self._r[2324]!, [_0]) + return formatWithArgumentRanges(self._s[2326]!, self._r[2326]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2325]!, self._r[2325]!, [_1]) + return formatWithArgumentRanges(self._s[2327]!, self._r[2327]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2326]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2327]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2329]! } - public var Conversation_Unblock: String { return self._s[2330]! } - public var PrivacySettings_DataSettings: String { return self._s[2331]! } - public var Group_PublicLink_Info: String { return self._s[2332]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2333]! } + public var Login_ContinueWithLocalization: String { return self._s[2328]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2329]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2331]! } + public var Conversation_Unblock: String { return self._s[2332]! } + public var PrivacySettings_DataSettings: String { return self._s[2333]! } + public var Group_PublicLink_Info: String { return self._s[2334]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2335]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2334]!, self._r[2334]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2336]!, self._r[2336]!, [_0, _1]) } - public var PrivacySettings_Passcode: String { return self._s[2337]! } - public var Call_Mute: String { return self._s[2338]! } - public var Passport_Language_dz: String { return self._s[2339]! } - public var Passport_Language_tk: String { return self._s[2340]! } + public var PrivacySettings_Passcode: String { return self._s[2339]! } + public var Call_Mute: String { return self._s[2340]! } + public var Passport_Language_dz: String { return self._s[2341]! } + public var Passport_Language_tk: String { return self._s[2342]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2341]!, self._r[2341]!, [_0]) + return formatWithArgumentRanges(self._s[2343]!, self._r[2343]!, [_0]) } - public var Settings_Search: String { return self._s[2342]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2343]! } - public var Conversation_ContextMenuReply: String { return self._s[2344]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2345]! } - public var Tour_Title1: String { return self._s[2346]! } - public var Conversation_ClearGroupHistory: String { return self._s[2348]! } - public var WallpaperPreview_Motion: String { return self._s[2349]! } + public var Settings_Search: String { return self._s[2344]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2345]! } + public var Conversation_ContextMenuReply: String { return self._s[2346]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2347]! } + public var Tour_Title1: String { return self._s[2348]! } + public var Conversation_ClearGroupHistory: String { return self._s[2350]! } + public var WallpaperPreview_Motion: String { return self._s[2351]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2350]!, self._r[2350]!, [_0]) + return formatWithArgumentRanges(self._s[2352]!, self._r[2352]!, [_0]) } - public var Call_RateCall: String { return self._s[2351]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2352]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2353]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2354]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2356]! } + public var Call_RateCall: String { return self._s[2353]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2354]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2355]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2356]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2358]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2358]!, self._r[2358]!, [_0]) + return formatWithArgumentRanges(self._s[2360]!, self._r[2360]!, [_0]) } - public var Compose_Create: String { return self._s[2359]! } - public var Contacts_InviteToTelegram: String { return self._s[2360]! } - public var GroupInfo_Notifications: String { return self._s[2361]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2363]! } - public var Month_GenApril: String { return self._s[2364]! } - public var Appearance_AutoNightTheme: String { return self._s[2365]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2367]! } - public var Login_CodeSentSms: String { return self._s[2369]! } + public var Compose_Create: String { return self._s[2361]! } + public var Contacts_InviteToTelegram: String { return self._s[2362]! } + public var GroupInfo_Notifications: String { return self._s[2363]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2365]! } + public var Month_GenApril: String { return self._s[2366]! } + public var Appearance_AutoNightTheme: String { return self._s[2367]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2369]! } + public var Login_CodeSentSms: String { return self._s[2371]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2370]!, self._r[2370]!, [_0]) + return formatWithArgumentRanges(self._s[2372]!, self._r[2372]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2371]! } - public var LogoutOptions_ContactSupportText: String { return self._s[2372]! } - public var Passport_Language_hr: String { return self._s[2373]! } - public var Common_ActionNotAllowedError: String { return self._s[2374]! } + public var EmptyGroupInfo_Line3: String { return self._s[2373]! } + public var LogoutOptions_ContactSupportText: String { return self._s[2374]! } + public var Passport_Language_hr: String { return self._s[2375]! } + public var Common_ActionNotAllowedError: String { return self._s[2376]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2375]!, self._r[2375]!, [_0]) + return formatWithArgumentRanges(self._s[2377]!, self._r[2377]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2376]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2377]! } - public var Privacy_SecretChatsTitle: String { return self._s[2378]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2380]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2381]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2382]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[2383]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[2384]! } - public var Preview_DeleteGif: String { return self._s[2385]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2386]! } - public var Group_ErrorNotMutualContact: String { return self._s[2387]! } - public var Notification_MessageLifetime5s: String { return self._s[2388]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2378]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2379]! } + public var Privacy_SecretChatsTitle: String { return self._s[2380]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2382]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2383]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2384]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[2385]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[2386]! } + public var Preview_DeleteGif: String { return self._s[2387]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2388]! } + public var Group_ErrorNotMutualContact: String { return self._s[2389]! } + public var Notification_MessageLifetime5s: String { return self._s[2390]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2389]!, self._r[2389]!, [_0]) + return formatWithArgumentRanges(self._s[2391]!, self._r[2391]!, [_0]) } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2391]! } - public var ReportSpam_DeleteThisChat: String { return self._s[2392]! } - public var Passport_Address_AddBankStatement: String { return self._s[2393]! } - public var Notification_CallIncoming: String { return self._s[2394]! } - public var Compose_NewGroupTitle: String { return self._s[2395]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2397]! } - public var Passport_Address_Postcode: String { return self._s[2399]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2393]! } + public var ReportSpam_DeleteThisChat: String { return self._s[2394]! } + public var Passport_Address_AddBankStatement: String { return self._s[2395]! } + public var Notification_CallIncoming: String { return self._s[2396]! } + public var Compose_NewGroupTitle: String { return self._s[2397]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2399]! } + public var Passport_Address_Postcode: String { return self._s[2401]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2400]!, self._r[2400]!, [_0]) + return formatWithArgumentRanges(self._s[2402]!, self._r[2402]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2401]! } - public var WallpaperColors_Title: String { return self._s[2402]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2403]! } - public var GroupPermission_Duration: String { return self._s[2404]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2403]! } + public var WallpaperColors_Title: String { return self._s[2404]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2405]! } + public var GroupPermission_Duration: String { return self._s[2406]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2405]!, self._r[2405]!, [_0]) + return formatWithArgumentRanges(self._s[2407]!, self._r[2407]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2406]! } - public var Username_Placeholder: String { return self._s[2407]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2408]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2409]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2410]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2408]! } + public var Username_Placeholder: String { return self._s[2409]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2410]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2411]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2412]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2412]!, self._r[2412]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2414]!, self._r[2414]!, [_1, _2]) } - public var Passport_PasswordDescription: String { return self._s[2413]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2414]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2415]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2416]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2417]! } - public var Conversation_ContextMenuMore: String { return self._s[2418]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2419]! } - public var CallSettings_TabIcon: String { return self._s[2420]! } - public var KeyCommand_Find: String { return self._s[2421]! } - public var Message_PinnedGame: String { return self._s[2422]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2424]! } - public var Login_CallRequestState2: String { return self._s[2426]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2428]! } + public var Passport_PasswordDescription: String { return self._s[2415]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2416]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2417]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2418]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2419]! } + public var Conversation_ContextMenuMore: String { return self._s[2420]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2421]! } + public var CallSettings_TabIcon: String { return self._s[2422]! } + public var KeyCommand_Find: String { return self._s[2423]! } + public var Message_PinnedGame: String { return self._s[2424]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2426]! } + public var Login_CallRequestState2: String { return self._s[2428]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2430]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2430]!, self._r[2430]!, [_0]) + return formatWithArgumentRanges(self._s[2432]!, self._r[2432]!, [_0]) } - public var WallpaperPreview_Blurred: String { return self._s[2431]! } - public var Conversation_InstantPagePreview: String { return self._s[2432]! } + public var WallpaperPreview_Blurred: String { return self._s[2433]! } + public var Conversation_InstantPagePreview: String { return self._s[2434]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2433]!, self._r[2433]!, [_0]) + return formatWithArgumentRanges(self._s[2435]!, self._r[2435]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2436]! } - public var WallpaperSearch_ColorRed: String { return self._s[2437]! } - public var GroupPermission_NoPinMessages: String { return self._s[2438]! } - public var Passport_Language_es: String { return self._s[2439]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2441]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2442]! } + public var SecretTimer_VideoDescription: String { return self._s[2438]! } + public var WallpaperSearch_ColorRed: String { return self._s[2439]! } + public var GroupPermission_NoPinMessages: String { return self._s[2440]! } + public var Passport_Language_es: String { return self._s[2441]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2443]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2444]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2443]!, self._r[2443]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2445]!, self._r[2445]!, [_1, _2]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[2444]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2445]! } - public var Watch_UserInfo_Unmute: String { return self._s[2446]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2447]! } - public var AccessDenied_CameraRestricted: String { return self._s[2449]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[2446]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2447]! } + public var Watch_UserInfo_Unmute: String { return self._s[2448]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2449]! } + public var AccessDenied_CameraRestricted: String { return self._s[2451]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2450]!, self._r[2450]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2452]!, self._r[2452]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2452]! } - public var Settings_CopyUsername: String { return self._s[2453]! } - public var Contacts_SearchLabel: String { return self._s[2454]! } - public var Map_OpenInYandexNavigator: String { return self._s[2456]! } - public var PasscodeSettings_EncryptData: String { return self._s[2457]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2458]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2459]! } - public var DialogList_AdNoticeAlert: String { return self._s[2460]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2462]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2463]! } - public var Localization_LanguageCustom: String { return self._s[2464]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2465]! } - public var CallFeedback_Title: String { return self._s[2466]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2469]! } - public var Conversation_InfoGroup: String { return self._s[2470]! } - public var Compose_NewMessage: String { return self._s[2471]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2472]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2473]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2474]! } + public var ChatList_ReadAll: String { return self._s[2454]! } + public var Settings_CopyUsername: String { return self._s[2455]! } + public var Contacts_SearchLabel: String { return self._s[2456]! } + public var Map_OpenInYandexNavigator: String { return self._s[2458]! } + public var PasscodeSettings_EncryptData: String { return self._s[2459]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2460]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2461]! } + public var DialogList_AdNoticeAlert: String { return self._s[2462]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2464]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2465]! } + public var Localization_LanguageCustom: String { return self._s[2466]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2467]! } + public var CallFeedback_Title: String { return self._s[2468]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2471]! } + public var Conversation_InfoGroup: String { return self._s[2472]! } + public var Compose_NewMessage: String { return self._s[2473]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2474]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2475]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2476]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2475]!, self._r[2475]!, [_0]) + return formatWithArgumentRanges(self._s[2477]!, self._r[2477]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2476]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2477]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2478]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2479]! } - public var Channel_BlackList_Title: String { return self._s[2480]! } - public var UserInfo_PhoneCall: String { return self._s[2481]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2483]! } - public var State_connecting: String { return self._s[2484]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2478]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2479]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2480]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2481]! } + public var Channel_BlackList_Title: String { return self._s[2482]! } + public var UserInfo_PhoneCall: String { return self._s[2483]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2485]! } + public var State_connecting: String { return self._s[2486]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2485]!, self._r[2485]!, [_0]) + return formatWithArgumentRanges(self._s[2487]!, self._r[2487]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2486]! } - public var Passport_Identity_EditPassport: String { return self._s[2487]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2489]! } - public var Localization_EnglishLanguageName: String { return self._s[2490]! } - public var Share_AuthDescription: String { return self._s[2491]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2492]! } - public var Passport_Identity_Surname: String { return self._s[2493]! } - public var Compose_TokenListPlaceholder: String { return self._s[2494]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2495]! } - public var Settings_AboutEmpty: String { return self._s[2496]! } - public var Conversation_Unmute: String { return self._s[2497]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[2499]! } + public var Notifications_GroupNotifications: String { return self._s[2488]! } + public var Passport_Identity_EditPassport: String { return self._s[2489]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2491]! } + public var Localization_EnglishLanguageName: String { return self._s[2492]! } + public var Share_AuthDescription: String { return self._s[2493]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2494]! } + public var Passport_Identity_Surname: String { return self._s[2495]! } + public var Compose_TokenListPlaceholder: String { return self._s[2496]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2497]! } + public var Settings_AboutEmpty: String { return self._s[2498]! } + public var Conversation_Unmute: String { return self._s[2499]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[2501]! } public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2500]!, self._r[2500]!, [_1]) + return formatWithArgumentRanges(self._s[2502]!, self._r[2502]!, [_1]) } - public var Login_CodeSentCall: String { return self._s[2501]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2503]! } - public var ChatSettings_Appearance: String { return self._s[2504]! } - public var Appearance_PickAccentColor: String { return self._s[2505]! } + public var Login_CodeSentCall: String { return self._s[2503]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2505]! } + public var ChatSettings_Appearance: String { return self._s[2506]! } + public var Appearance_PickAccentColor: String { return self._s[2507]! } public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2506]!, self._r[2506]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2508]!, self._r[2508]!, [_1, _2]) } public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2507]!, self._r[2507]!, [_1]) + return formatWithArgumentRanges(self._s[2509]!, self._r[2509]!, [_1]) } - public var Notification_CallMissed: String { return self._s[2508]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2509]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2510]! } - public var ChatAdmins_AdminLabel: String { return self._s[2512]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2513]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2515]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2516]! } - public var Month_GenJune: String { return self._s[2517]! } - public var Watch_Location_Current: String { return self._s[2518]! } - public var Conversation_TitleMute: String { return self._s[2519]! } + public var Notification_CallMissed: String { return self._s[2510]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2511]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2512]! } + public var ChatAdmins_AdminLabel: String { return self._s[2514]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2515]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2517]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2518]! } + public var Month_GenJune: String { return self._s[2519]! } + public var Watch_Location_Current: String { return self._s[2520]! } + public var Conversation_TitleMute: String { return self._s[2521]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2520]!, self._r[2520]!, [_1]) + return formatWithArgumentRanges(self._s[2522]!, self._r[2522]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2521]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2523]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2522]!, self._r[2522]!, [_0]) + return formatWithArgumentRanges(self._s[2524]!, self._r[2524]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2523]! } - public var MaskStickerSettings_Info: String { return self._s[2524]! } + public var Call_ReportPlaceholder: String { return self._s[2525]! } + public var MaskStickerSettings_Info: String { return self._s[2526]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2525]!, self._r[2525]!, [_0]) + return formatWithArgumentRanges(self._s[2527]!, self._r[2527]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2526]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2528]! } - public var Contacts_ShareTelegram: String { return self._s[2529]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2530]! } - public var Channel_ErrorAccessDenied: String { return self._s[2531]! } - public var UserInfo_ScamBotWarning: String { return self._s[2533]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2534]! } - public var Call_ConnectionErrorTitle: String { return self._s[2535]! } - public var UserInfo_NotificationsEnable: String { return self._s[2536]! } - public var ArchivedChats_IntroText1: String { return self._s[2537]! } - public var Tour_Text4: String { return self._s[2540]! } - public var WallpaperSearch_Recent: String { return self._s[2541]! } - public var GroupInfo_ScamGroupWarning: String { return self._s[2542]! } - public var Profile_MessageLifetime2s: String { return self._s[2544]! } - public var Notification_MessageLifetime2s: String { return self._s[2545]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2528]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2530]! } + public var Contacts_ShareTelegram: String { return self._s[2531]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2532]! } + public var Channel_ErrorAccessDenied: String { return self._s[2533]! } + public var UserInfo_ScamBotWarning: String { return self._s[2535]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2536]! } + public var Call_ConnectionErrorTitle: String { return self._s[2537]! } + public var UserInfo_NotificationsEnable: String { return self._s[2538]! } + public var ArchivedChats_IntroText1: String { return self._s[2539]! } + public var Tour_Text4: String { return self._s[2542]! } + public var WallpaperSearch_Recent: String { return self._s[2543]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[2544]! } + public var Profile_MessageLifetime2s: String { return self._s[2546]! } + public var Notification_MessageLifetime2s: String { return self._s[2547]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2546]!, self._r[2546]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2548]!, self._r[2548]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2547]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2548]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2549]! } + public var Cache_ClearCache: String { return self._s[2549]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2550]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2551]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2553]!, self._r[2553]!, [_0]) - } - public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2555]!, self._r[2555]!, [_0]) } - public var LocalGroup_Text: String { return self._s[2556]! } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2557]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2558]! } - public var ChatList_UnarchiveAction: String { return self._s[2559]! } - public var AutoNightTheme_Title: String { return self._s[2560]! } - public var InstantPage_FeedbackButton: String { return self._s[2561]! } - public var Passport_FieldAddress: String { return self._s[2562]! } - public var Month_ShortMarch: String { return self._s[2563]! } + public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2557]!, self._r[2557]!, [_0]) + } + public var LocalGroup_Text: String { return self._s[2558]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2559]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2560]! } + public var ChatList_UnarchiveAction: String { return self._s[2561]! } + public var AutoNightTheme_Title: String { return self._s[2562]! } + public var InstantPage_FeedbackButton: String { return self._s[2563]! } + public var Passport_FieldAddress: String { return self._s[2564]! } + public var Month_ShortMarch: String { return self._s[2565]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2564]!, self._r[2564]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2566]!, self._r[2566]!, [_1, _2]) } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2565]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2566]! } - public var Passport_FloodError: String { return self._s[2567]! } - public var SecretGif_Title: String { return self._s[2568]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2569]! } - public var Passport_Language_th: String { return self._s[2571]! } - public var Passport_Address_Address: String { return self._s[2572]! } - public var Login_InvalidLastNameError: String { return self._s[2573]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2574]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2575]! } - public var SettingsSearch_FAQ: String { return self._s[2576]! } - public var ShareMenu_Send: String { return self._s[2577]! } - public var WallpaperSearch_ColorYellow: String { return self._s[2579]! } - public var Month_GenNovember: String { return self._s[2581]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2583]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2567]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2568]! } + public var Passport_FloodError: String { return self._s[2569]! } + public var SecretGif_Title: String { return self._s[2570]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2571]! } + public var Passport_Language_th: String { return self._s[2573]! } + public var Passport_Address_Address: String { return self._s[2574]! } + public var Login_InvalidLastNameError: String { return self._s[2575]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2576]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2577]! } + public var SettingsSearch_FAQ: String { return self._s[2578]! } + public var ShareMenu_Send: String { return self._s[2579]! } + public var WallpaperSearch_ColorYellow: String { return self._s[2581]! } + public var Month_GenNovember: String { return self._s[2583]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2585]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2584]!, self._r[2584]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2586]!, self._r[2586]!, [_1, _2]) } - public var Checkout_Email: String { return self._s[2585]! } - public var NotificationsSound_Tritone: String { return self._s[2586]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2588]! } + public var Checkout_Email: String { return self._s[2587]! } + public var NotificationsSound_Tritone: String { return self._s[2588]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2590]! } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2591]!, self._r[2591]!, [_1]) + return formatWithArgumentRanges(self._s[2593]!, self._r[2593]!, [_1]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[2592]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2594]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2593]!, self._r[2593]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2595]!, self._r[2595]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[2594]! } - public var Notification_Exceptions_Add: String { return self._s[2595]! } - public var DialogList_You: String { return self._s[2596]! } - public var MediaPicker_Send: String { return self._s[2599]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2600]! } - public var Call_AudioRouteSpeaker: String { return self._s[2601]! } - public var Watch_UserInfo_Title: String { return self._s[2602]! } - public var Appearance_AccentColor: String { return self._s[2603]! } + public var ChatList_UndoArchiveTitle: String { return self._s[2596]! } + public var Notification_Exceptions_Add: String { return self._s[2597]! } + public var DialogList_You: String { return self._s[2598]! } + public var MediaPicker_Send: String { return self._s[2601]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2602]! } + public var Call_AudioRouteSpeaker: String { return self._s[2603]! } + public var Watch_UserInfo_Title: String { return self._s[2604]! } + public var Appearance_AccentColor: String { return self._s[2605]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2604]!, self._r[2604]!, [_0]) + return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2605]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2607]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2608]!, self._r[2608]!, [_1, _2]) } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2607]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2608]! } - public var Notification_CallOutgoing: String { return self._s[2609]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2610]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2611]! } - public var Call_RecordingDisabledMessage: String { return self._s[2612]! } - public var Message_Game: String { return self._s[2613]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[2614]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2615]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2616]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2617]! } - public var Date_DialogDateFormat: String { return self._s[2618]! } - public var WallpaperColors_SetCustomColor: String { return self._s[2619]! } - public var Notifications_InAppNotifications: String { return self._s[2620]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[2609]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[2610]! } + public var Notification_CallOutgoing: String { return self._s[2611]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2612]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2613]! } + public var Call_RecordingDisabledMessage: String { return self._s[2614]! } + public var Message_Game: String { return self._s[2615]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[2616]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2617]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2618]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2619]! } + public var Date_DialogDateFormat: String { return self._s[2620]! } + public var WallpaperColors_SetCustomColor: String { return self._s[2621]! } + public var Notifications_InAppNotifications: String { return self._s[2622]! } public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2621]!, self._r[2621]!, [_0]) + return formatWithArgumentRanges(self._s[2623]!, self._r[2623]!, [_0]) } public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2622]!, self._r[2622]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[2623]! } + public var NewContact_Title: String { return self._s[2625]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_0]) + return formatWithArgumentRanges(self._s[2626]!, self._r[2626]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[2625]! } + public var Conversation_ViewContactDetails: String { return self._s[2627]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2627]!, self._r[2627]!, [_1]) + return formatWithArgumentRanges(self._s[2629]!, self._r[2629]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2628]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2629]! } - public var PrivacySettings_Title: String { return self._s[2630]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2633]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[2634]! } - public var Contacts_PhoneNumber: String { return self._s[2635]! } - public var Map_ShowPlaces: String { return self._s[2637]! } - public var ChatAdmins_Title: String { return self._s[2638]! } - public var InstantPage_Reference: String { return self._s[2640]! } - public var ReportGroupLocation_Text: String { return self._s[2641]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2630]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2631]! } + public var PrivacySettings_Title: String { return self._s[2632]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2635]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[2636]! } + public var Contacts_PhoneNumber: String { return self._s[2637]! } + public var Map_ShowPlaces: String { return self._s[2639]! } + public var ChatAdmins_Title: String { return self._s[2640]! } + public var InstantPage_Reference: String { return self._s[2642]! } + public var ReportGroupLocation_Text: String { return self._s[2643]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2642]!, self._r[2642]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2644]!, self._r[2644]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[2643]! } - public var Watch_UserInfo_Block: String { return self._s[2644]! } - public var ChatSettings_Stickers: String { return self._s[2645]! } - public var ChatSettings_DownloadInBackground: String { return self._s[2646]! } + public var Camera_FlashOff: String { return self._s[2645]! } + public var Watch_UserInfo_Block: String { return self._s[2646]! } + public var ChatSettings_Stickers: String { return self._s[2647]! } + public var ChatSettings_DownloadInBackground: String { return self._s[2648]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2647]!, self._r[2647]!, [_0]) + return formatWithArgumentRanges(self._s[2649]!, self._r[2649]!, [_0]) } - public var Settings_ViewPhoto: String { return self._s[2648]! } - public var Login_CheckOtherSessionMessages: String { return self._s[2649]! } - public var AutoDownloadSettings_Cellular: String { return self._s[2650]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2651]! } + public var Settings_ViewPhoto: String { return self._s[2650]! } + public var Login_CheckOtherSessionMessages: String { return self._s[2651]! } + public var AutoDownloadSettings_Cellular: String { return self._s[2652]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2653]! } public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2653]!, self._r[2653]!, [_0]) + return formatWithArgumentRanges(self._s[2655]!, self._r[2655]!, [_0]) } - public var Privacy_DeleteDrafts: String { return self._s[2654]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2655]! } + public var Privacy_DeleteDrafts: String { return self._s[2656]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2657]! } public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2656]!, self._r[2656]!, [_0]) + return formatWithArgumentRanges(self._s[2658]!, self._r[2658]!, [_0]) } - public var DialogList_SavedMessagesHelp: String { return self._s[2657]! } - public var DialogList_SavedMessages: String { return self._s[2658]! } - public var GroupInfo_UpgradeButton: String { return self._s[2659]! } - public var DialogList_Pin: String { return self._s[2661]! } + public var DialogList_SavedMessagesHelp: String { return self._s[2659]! } + public var DialogList_SavedMessages: String { return self._s[2660]! } + public var GroupInfo_UpgradeButton: String { return self._s[2661]! } + public var DialogList_Pin: String { return self._s[2663]! } public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2662]!, self._r[2662]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2664]!, self._r[2664]!, [_0, _1]) } public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2663]!, self._r[2663]!, [_0]) + return formatWithArgumentRanges(self._s[2665]!, self._r[2665]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[2664]! } - public var UserInfo_NotificationsDisable: String { return self._s[2665]! } - public var Paint_Outlined: String { return self._s[2666]! } - public var Activity_PlayingGame: String { return self._s[2667]! } - public var SearchImages_NoImagesFound: String { return self._s[2668]! } - public var SocksProxySetup_ProxyType: String { return self._s[2669]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[2671]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[2672]! } - public var Settings_AppLanguage: String { return self._s[2673]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[2674]! } - public var Common_ChoosePhoto: String { return self._s[2675]! } - public var CallFeedback_ReasonEcho: String { return self._s[2676]! } + public var Notification_Exceptions_AlwaysOn: String { return self._s[2666]! } + public var UserInfo_NotificationsDisable: String { return self._s[2667]! } + public var Paint_Outlined: String { return self._s[2668]! } + public var Activity_PlayingGame: String { return self._s[2669]! } + public var SearchImages_NoImagesFound: String { return self._s[2670]! } + public var SocksProxySetup_ProxyType: String { return self._s[2671]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[2673]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[2674]! } + public var Settings_AppLanguage: String { return self._s[2675]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[2676]! } + public var Common_ChoosePhoto: String { return self._s[2677]! } + public var CallFeedback_ReasonEcho: String { return self._s[2678]! } public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2677]!, self._r[2677]!, [_1]) + return formatWithArgumentRanges(self._s[2679]!, self._r[2679]!, [_1]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[2678]! } - public var Activity_UploadingVideo: String { return self._s[2679]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2680]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2681]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[2682]! } - public var Checkout_PayWithTouchId: String { return self._s[2683]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2684]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[2680]! } + public var Activity_UploadingVideo: String { return self._s[2681]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2682]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2683]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[2684]! } + public var Checkout_PayWithTouchId: String { return self._s[2685]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2686]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2686]!, self._r[2686]!, [_1]) + return formatWithArgumentRanges(self._s[2688]!, self._r[2688]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[2687]! } + public var Notifications_ExceptionsNone: String { return self._s[2689]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2688]!, self._r[2688]!, [_0]) + return formatWithArgumentRanges(self._s[2690]!, self._r[2690]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2689]!, self._r[2689]!, [_1]) + return formatWithArgumentRanges(self._s[2691]!, self._r[2691]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[2691]! } - public var Passport_Address_Region: String { return self._s[2694]! } - public var ChatList_DeleteChat: String { return self._s[2695]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[2696]! } - public var PhotoEditor_TiltShift: String { return self._s[2697]! } - public var Settings_FAQ_URL: String { return self._s[2698]! } - public var Passport_Language_sl: String { return self._s[2699]! } - public var Settings_PrivacySettings: String { return self._s[2701]! } - public var SharedMedia_TitleLink: String { return self._s[2702]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[2703]! } - public var Settings_SetProfilePhoto: String { return self._s[2704]! } - public var Channel_About_Help: String { return self._s[2705]! } - public var Contacts_PermissionsEnable: String { return self._s[2706]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2707]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[2708]! } - public var CallFeedback_ReasonInterruption: String { return self._s[2710]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[2711]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[2712]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[2713]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[2714]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[2716]! } - public var Map_OpenInYandexMaps: String { return self._s[2718]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[2719]! } - public var PhotoEditor_SaturationTool: String { return self._s[2720]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[2693]! } + public var Passport_Address_Region: String { return self._s[2696]! } + public var ChatList_DeleteChat: String { return self._s[2697]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[2698]! } + public var PhotoEditor_TiltShift: String { return self._s[2699]! } + public var Settings_FAQ_URL: String { return self._s[2700]! } + public var Passport_Language_sl: String { return self._s[2701]! } + public var Settings_PrivacySettings: String { return self._s[2703]! } + public var SharedMedia_TitleLink: String { return self._s[2704]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[2705]! } + public var Settings_SetProfilePhoto: String { return self._s[2706]! } + public var Channel_About_Help: String { return self._s[2707]! } + public var Contacts_PermissionsEnable: String { return self._s[2708]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2709]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[2710]! } + public var CallFeedback_ReasonInterruption: String { return self._s[2712]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[2713]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[2714]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[2715]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[2716]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[2718]! } + public var Map_OpenInYandexMaps: String { return self._s[2720]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[2721]! } + public var PhotoEditor_SaturationTool: String { return self._s[2722]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2721]!, self._r[2721]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2723]!, self._r[2723]!, [_1, _2]) } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[2722]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2723]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[2724]! } - public var Appearance_TextSize: String { return self._s[2725]! } + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[2724]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2725]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[2726]! } + public var Appearance_TextSize: String { return self._s[2727]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2726]!, self._r[2726]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2728]!, self._r[2728]!, [_1, "\(_2)"]) } - public var Channel_Username_InvalidTooShort: String { return self._s[2728]! } + public var Channel_Username_InvalidTooShort: String { return self._s[2730]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2729]!, self._r[2729]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2731]!, self._r[2731]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2730]!, self._r[2730]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2732]!, self._r[2732]!, [_1, _2, _3]) } - public var GroupInfo_PublicLinkAdd: String { return self._s[2731]! } - public var Passport_PassportInformation: String { return self._s[2734]! } - public var WatchRemote_AlertTitle: String { return self._s[2735]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2736]! } - public var ConvertToSupergroup_HelpText: String { return self._s[2738]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[2733]! } + public var Passport_PassportInformation: String { return self._s[2736]! } + public var WatchRemote_AlertTitle: String { return self._s[2737]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2738]! } + public var ConvertToSupergroup_HelpText: String { return self._s[2740]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2739]!, self._r[2739]!, [_0]) + return formatWithArgumentRanges(self._s[2741]!, self._r[2741]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2740]!, self._r[2740]!, [_1]) + return formatWithArgumentRanges(self._s[2742]!, self._r[2742]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2741]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2743]! } - public var AccessDenied_CameraDisabled: String { return self._s[2744]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2743]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2745]! } + public var AccessDenied_CameraDisabled: String { return self._s[2746]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2745]!, self._r[2745]!, [_0]) + return formatWithArgumentRanges(self._s[2747]!, self._r[2747]!, [_0]) } - public var PhotoEditor_ContrastTool: String { return self._s[2748]! } + public var PhotoEditor_ContrastTool: String { return self._s[2750]! } public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2749]!, self._r[2749]!, [_1]) + return formatWithArgumentRanges(self._s[2751]!, self._r[2751]!, [_1]) } - public var DialogList_Draft: String { return self._s[2750]! } - public var Privacy_TopPeersDelete: String { return self._s[2752]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[2753]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2754]! } - public var WebSearch_RecentSectionClear: String { return self._s[2755]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[2757]! } - public var Common_Done: String { return self._s[2759]! } - public var AuthSessions_EmptyText: String { return self._s[2760]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[2761]! } - public var Tour_Title5: String { return self._s[2762]! } + public var DialogList_Draft: String { return self._s[2752]! } + public var Privacy_TopPeersDelete: String { return self._s[2754]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[2755]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2756]! } + public var WebSearch_RecentSectionClear: String { return self._s[2757]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[2759]! } + public var Common_Done: String { return self._s[2761]! } + public var AuthSessions_EmptyText: String { return self._s[2762]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[2763]! } + public var Tour_Title5: String { return self._s[2764]! } public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2763]!, self._r[2763]!, [_0]) + return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2764]! } - public var Conversation_LinkDialogSave: String { return self._s[2765]! } - public var GroupInfo_ActionRestrict: String { return self._s[2766]! } - public var Checkout_Title: String { return self._s[2767]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[2769]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[2771]! } - public var Notification_RenamedGroup: String { return self._s[2772]! } - public var PeopleNearby_Groups: String { return self._s[2773]! } - public var Checkout_PayWithFaceId: String { return self._s[2774]! } - public var Channel_BanList_BlockedTitle: String { return self._s[2775]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2777]! } - public var Checkout_WebConfirmation_Title: String { return self._s[2778]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[2779]! } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2766]! } + public var Conversation_LinkDialogSave: String { return self._s[2767]! } + public var GroupInfo_ActionRestrict: String { return self._s[2768]! } + public var Checkout_Title: String { return self._s[2769]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[2771]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[2773]! } + public var Notification_RenamedGroup: String { return self._s[2774]! } + public var PeopleNearby_Groups: String { return self._s[2775]! } + public var Checkout_PayWithFaceId: String { return self._s[2776]! } + public var Channel_BanList_BlockedTitle: String { return self._s[2777]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2779]! } + public var Checkout_WebConfirmation_Title: String { return self._s[2780]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[2781]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2780]!, self._r[2780]!, [_0]) + return formatWithArgumentRanges(self._s[2782]!, self._r[2782]!, [_0]) } - public var Profile_AddToExisting: String { return self._s[2782]! } + public var Profile_AddToExisting: String { return self._s[2784]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2785]!, self._r[2785]!, [_0, _1]) } - public var Cache_Files: String { return self._s[2785]! } - public var Permissions_PrivacyPolicy: String { return self._s[2786]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[2787]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2788]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[2790]! } - public var Calls_NoCallsPlaceholder: String { return self._s[2792]! } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2793]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2795]! } + public var Cache_Files: String { return self._s[2787]! } + public var Permissions_PrivacyPolicy: String { return self._s[2788]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[2789]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2790]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[2792]! } + public var Calls_NoCallsPlaceholder: String { return self._s[2794]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2795]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2797]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2796]!, self._r[2796]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2798]!, self._r[2798]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2797]! } - public var Passport_FieldAddressHelp: String { return self._s[2798]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2799]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2799]! } + public var Passport_FieldAddressHelp: String { return self._s[2800]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2801]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2800]!, self._r[2800]!, [_0]) + return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[2801]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[2803]! } - public var Login_UnknownError: String { return self._s[2804]! } - public var Group_UpgradeNoticeText2: String { return self._s[2806]! } - public var Watch_Compose_AddContact: String { return self._s[2807]! } - public var Web_Error: String { return self._s[2808]! } - public var Gif_Search: String { return self._s[2809]! } - public var Profile_MessageLifetime1h: String { return self._s[2810]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2811]! } - public var Channel_Username_CheckingUsername: String { return self._s[2812]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[2813]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[2814]! } - public var Channel_AboutItem: String { return self._s[2815]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2817]! } - public var GroupInfo_SharedMedia: String { return self._s[2818]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[2803]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[2805]! } + public var Login_UnknownError: String { return self._s[2806]! } + public var Group_UpgradeNoticeText2: String { return self._s[2808]! } + public var Watch_Compose_AddContact: String { return self._s[2809]! } + public var Web_Error: String { return self._s[2810]! } + public var Gif_Search: String { return self._s[2811]! } + public var Profile_MessageLifetime1h: String { return self._s[2812]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2813]! } + public var Channel_Username_CheckingUsername: String { return self._s[2814]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[2815]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[2816]! } + public var Channel_AboutItem: String { return self._s[2817]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2819]! } + public var GroupInfo_SharedMedia: String { return self._s[2820]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2819]!, self._r[2819]!, [_1]) - } - public var Call_PhoneCallInProgressMessage: String { return self._s[2820]! } - public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[2822]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2823]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[2824]! } - public var CreatePoll_AddOption: String { return self._s[2825]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2826]! } - public var Group_UpgradeNoticeHeader: String { return self._s[2827]! } - public var Channel_Management_AddModerator: String { return self._s[2828]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[2829]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[2830]! } - public var NotificationsSound_Hello: String { return self._s[2831]! } - public var SocksProxySetup_SavedProxies: String { return self._s[2832]! } - public var Channel_Stickers_Placeholder: String { return self._s[2834]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[2822]! } + public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2823]!, self._r[2823]!, [_1]) + } + public var ChatList_UndoArchiveRevealedText: String { return self._s[2824]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2825]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[2826]! } + public var CreatePoll_AddOption: String { return self._s[2827]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2828]! } + public var Group_UpgradeNoticeHeader: String { return self._s[2829]! } + public var Channel_Management_AddModerator: String { return self._s[2830]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[2831]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[2832]! } + public var NotificationsSound_Hello: String { return self._s[2833]! } + public var SocksProxySetup_SavedProxies: String { return self._s[2834]! } + public var Channel_Stickers_Placeholder: String { return self._s[2836]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2835]!, self._r[2835]!, [_0]) + return formatWithArgumentRanges(self._s[2837]!, self._r[2837]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2836]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[2837]! } - public var ContactInfo_BirthdayLabel: String { return self._s[2838]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2839]! } - public var AutoDownloadSettings_Channels: String { return self._s[2840]! } - public var Passport_Language_mn: String { return self._s[2841]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[2844]! } - public var Passport_Language_ja: String { return self._s[2846]! } - public var Settings_About_Title: String { return self._s[2847]! } - public var Settings_NotificationsAndSounds: String { return self._s[2848]! } - public var ChannelInfo_DeleteGroup: String { return self._s[2849]! } - public var Settings_BlockedUsers: String { return self._s[2850]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2838]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[2839]! } + public var ContactInfo_BirthdayLabel: String { return self._s[2840]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2841]! } + public var AutoDownloadSettings_Channels: String { return self._s[2842]! } + public var Passport_Language_mn: String { return self._s[2843]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[2846]! } + public var Passport_Language_ja: String { return self._s[2848]! } + public var Settings_About_Title: String { return self._s[2849]! } + public var Settings_NotificationsAndSounds: String { return self._s[2850]! } + public var ChannelInfo_DeleteGroup: String { return self._s[2851]! } + public var Settings_BlockedUsers: String { return self._s[2852]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2851]!, self._r[2851]!, [_0]) + return formatWithArgumentRanges(self._s[2853]!, self._r[2853]!, [_0]) } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[2852]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[2853]! } - public var Channel_Username_Title: String { return self._s[2854]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[2854]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[2855]! } + public var Channel_Username_Title: String { return self._s[2856]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2855]!, self._r[2855]!, [_0]) + return formatWithArgumentRanges(self._s[2857]!, self._r[2857]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[2857]! } - public var AppleWatch_Title: String { return self._s[2858]! } - public var Activity_RecordingVideoMessage: String { return self._s[2859]! } + public var AttachmentMenu_File: String { return self._s[2859]! } + public var AppleWatch_Title: String { return self._s[2860]! } + public var Activity_RecordingVideoMessage: String { return self._s[2861]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2860]!, self._r[2860]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2862]!, self._r[2862]!, [_1, _2]) } - public var Weekday_Saturday: String { return self._s[2861]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[2862]! } - public var Profile_CreateEncryptedChatError: String { return self._s[2863]! } - public var Common_Next: String { return self._s[2865]! } - public var Channel_Stickers_YourStickers: String { return self._s[2867]! } - public var Call_AudioRouteHeadphones: String { return self._s[2868]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2870]! } - public var Watch_Contacts_NoResults: String { return self._s[2872]! } - public var PhotoEditor_TintTool: String { return self._s[2875]! } - public var LoginPassword_ResetAccount: String { return self._s[2877]! } - public var Settings_SavedMessages: String { return self._s[2878]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[2879]! } - public var Bot_GenericSupportStatus: String { return self._s[2880]! } - public var StickerPack_Add: String { return self._s[2881]! } - public var Checkout_TotalAmount: String { return self._s[2882]! } - public var Your_cards_number_is_invalid: String { return self._s[2883]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[2884]! } + public var Weekday_Saturday: String { return self._s[2863]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[2864]! } + public var Profile_CreateEncryptedChatError: String { return self._s[2865]! } + public var Common_Next: String { return self._s[2867]! } + public var Channel_Stickers_YourStickers: String { return self._s[2869]! } + public var Call_AudioRouteHeadphones: String { return self._s[2870]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2872]! } + public var Watch_Contacts_NoResults: String { return self._s[2874]! } + public var PhotoEditor_TintTool: String { return self._s[2877]! } + public var LoginPassword_ResetAccount: String { return self._s[2879]! } + public var Settings_SavedMessages: String { return self._s[2880]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[2881]! } + public var Bot_GenericSupportStatus: String { return self._s[2882]! } + public var StickerPack_Add: String { return self._s[2883]! } + public var Checkout_TotalAmount: String { return self._s[2884]! } + public var Your_cards_number_is_invalid: String { return self._s[2885]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[2886]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2885]!, self._r[2885]!, [_0]) + return formatWithArgumentRanges(self._s[2887]!, self._r[2887]!, [_0]) } public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2886]!, self._r[2886]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2888]!, self._r[2888]!, [_1, _2]) } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2887]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2889]! } public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2889]!, self._r[2889]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2891]!, self._r[2891]!, [_1, _2]) } public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2890]!, self._r[2890]!, [_0]) + return formatWithArgumentRanges(self._s[2892]!, self._r[2892]!, [_0]) } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[2891]! } - public var StickerPack_Share: String { return self._s[2892]! } - public var Passport_DeleteAddress: String { return self._s[2893]! } - public var Settings_Passport: String { return self._s[2894]! } - public var SharedMedia_EmptyFilesText: String { return self._s[2895]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[2896]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2897]! } - public var Contacts_PermissionsText: String { return self._s[2898]! } - public var Group_Setup_HistoryVisible: String { return self._s[2899]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[2901]! } - public var SocksProxySetup_Title: String { return self._s[2902]! } - public var Notification_Mute1h: String { return self._s[2903]! } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[2893]! } + public var StickerPack_Share: String { return self._s[2894]! } + public var Passport_DeleteAddress: String { return self._s[2895]! } + public var Settings_Passport: String { return self._s[2896]! } + public var SharedMedia_EmptyFilesText: String { return self._s[2897]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[2898]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2899]! } + public var Contacts_PermissionsText: String { return self._s[2900]! } + public var Group_Setup_HistoryVisible: String { return self._s[2901]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[2903]! } + public var SocksProxySetup_Title: String { return self._s[2904]! } + public var Notification_Mute1h: String { return self._s[2905]! } public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2904]!, self._r[2904]!, [_0]) + return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[2905]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[2907]! } public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_1]) + return formatWithArgumentRanges(self._s[2908]!, self._r[2908]!, [_1]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[2907]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2910]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2912]! } - public var DialogList_NoMessagesText: String { return self._s[2913]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[2914]! } - public var Privacy_Calls_P2PHelp: String { return self._s[2915]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[2917]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[2918]! } - public var Common_TakePhotoOrVideo: String { return self._s[2919]! } - public var Call_StatusBusy: String { return self._s[2920]! } - public var Conversation_PinnedMessage: String { return self._s[2921]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2922]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2923]! } - public var Undo_ChatCleared: String { return self._s[2924]! } - public var AppleWatch_ReplyPresets: String { return self._s[2925]! } - public var Passport_DiscardMessageDescription: String { return self._s[2927]! } - public var Login_NetworkError: String { return self._s[2928]! } + public var FastTwoStepSetup_PasswordSection: String { return self._s[2909]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2912]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2914]! } + public var DialogList_NoMessagesText: String { return self._s[2915]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[2916]! } + public var Privacy_Calls_P2PHelp: String { return self._s[2917]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[2919]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[2920]! } + public var Common_TakePhotoOrVideo: String { return self._s[2921]! } + public var Call_StatusBusy: String { return self._s[2922]! } + public var Conversation_PinnedMessage: String { return self._s[2923]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2924]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2925]! } + public var Undo_ChatCleared: String { return self._s[2926]! } + public var AppleWatch_ReplyPresets: String { return self._s[2927]! } + public var Passport_DiscardMessageDescription: String { return self._s[2929]! } + public var Login_NetworkError: String { return self._s[2930]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2929]!, self._r[2929]!, [_0]) + return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2930]!, self._r[2930]!, [_0]) + return formatWithArgumentRanges(self._s[2932]!, self._r[2932]!, [_0]) } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2931]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2933]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2933]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2935]! } public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2935]!, self._r[2935]!, [_0]) + return formatWithArgumentRanges(self._s[2937]!, self._r[2937]!, [_0]) } - public var Call_ConnectionErrorMessage: String { return self._s[2936]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[2937]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[2939]! } - public var ConversationMedia_Title: String { return self._s[2940]! } - public var EncryptionKey_Title: String { return self._s[2942]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2943]! } - public var Notification_Exceptions_AddException: String { return self._s[2944]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[2945]! } - public var Profile_MessageLifetime1m: String { return self._s[2946]! } + public var Call_ConnectionErrorMessage: String { return self._s[2938]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[2939]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[2941]! } + public var ConversationMedia_Title: String { return self._s[2942]! } + public var EncryptionKey_Title: String { return self._s[2944]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2945]! } + public var Notification_Exceptions_AddException: String { return self._s[2946]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[2947]! } + public var Profile_MessageLifetime1m: String { return self._s[2948]! } public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2947]!, self._r[2947]!, [_1]) + return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1]) } - public var Month_GenMay: String { return self._s[2948]! } + public var Month_GenMay: String { return self._s[2950]! } public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_0]) + return formatWithArgumentRanges(self._s[2951]!, self._r[2951]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[2950]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2951]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[2952]! } - public var Conversation_EmptyPlaceholder: String { return self._s[2954]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[2955]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[2956]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[2957]! } - public var Camera_TapAndHoldForVideo: String { return self._s[2958]! } - public var Channel_JoinChannel: String { return self._s[2960]! } - public var Appearance_Animations: String { return self._s[2963]! } + public var PeopleNearby_Users: String { return self._s[2952]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2953]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[2954]! } + public var Conversation_EmptyPlaceholder: String { return self._s[2956]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[2957]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[2958]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[2959]! } + public var Camera_TapAndHoldForVideo: String { return self._s[2960]! } + public var Channel_JoinChannel: String { return self._s[2962]! } + public var Appearance_Animations: String { return self._s[2965]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2964]!, self._r[2964]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2966]!, self._r[2966]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[2966]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[2968]! } - public var Passport_Address_Street: String { return self._s[2969]! } - public var Conversation_AddContact: String { return self._s[2970]! } - public var Login_PhonePlaceholder: String { return self._s[2971]! } - public var Channel_Members_InviteLink: String { return self._s[2973]! } - public var Bot_Stop: String { return self._s[2974]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[2976]! } - public var Notification_PassportValueAddress: String { return self._s[2977]! } - public var Month_ShortJuly: String { return self._s[2978]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2979]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[2980]! } - public var Passport_Identity_ReverseSide: String { return self._s[2981]! } - public var Watch_Stickers_Recents: String { return self._s[2984]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2986]! } - public var Map_SendThisLocation: String { return self._s[2987]! } + public var Stickers_GroupStickers: String { return self._s[2968]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[2970]! } + public var Passport_Address_Street: String { return self._s[2971]! } + public var Conversation_AddContact: String { return self._s[2972]! } + public var Login_PhonePlaceholder: String { return self._s[2973]! } + public var Channel_Members_InviteLink: String { return self._s[2975]! } + public var Bot_Stop: String { return self._s[2976]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[2978]! } + public var Notification_PassportValueAddress: String { return self._s[2979]! } + public var Month_ShortJuly: String { return self._s[2980]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2981]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[2982]! } + public var Passport_Identity_ReverseSide: String { return self._s[2983]! } + public var Watch_Stickers_Recents: String { return self._s[2986]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2988]! } + public var Map_SendThisLocation: String { return self._s[2989]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2988]!, self._r[2988]!, [_0]) + return formatWithArgumentRanges(self._s[2990]!, self._r[2990]!, [_0]) } public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2989]!, self._r[2989]!, [_0]) - } - public var ConvertToSupergroup_Note: String { return self._s[2990]! } - public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_0]) } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2992]! } + public var ConvertToSupergroup_Note: String { return self._s[2992]! } + public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2993]!, self._r[2993]!, [_0]) + } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2994]! } public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2993]!, self._r[2993]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2995]!, self._r[2995]!, [_0, _1]) } - public var Login_CallRequestState3: String { return self._s[2995]! } - public var Wallpaper_SearchShort: String { return self._s[2996]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[2998]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[2999]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3000]! } + public var Login_CallRequestState3: String { return self._s[2997]! } + public var Wallpaper_SearchShort: String { return self._s[2998]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3000]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3001]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3002]! } public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3001]!, self._r[3001]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_1, _2]) } - public var Channel_AdminLogFilter_Title: String { return self._s[3002]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3006]! } + public var Channel_AdminLogFilter_Title: String { return self._s[3004]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3008]! } public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3007]!, self._r[3007]!, [_0]) - } - public var Passport_CorrectErrors: String { return self._s[3008]! } - public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3009]!, self._r[3009]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3010]! } - public var Channel_DiscussionGroup: String { return self._s[3011]! } + public var Passport_CorrectErrors: String { return self._s[3010]! } + public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3011]!, self._r[3011]!, [_0]) + } + public var Map_SendMyCurrentLocation: String { return self._s[3012]! } + public var Channel_DiscussionGroup: String { return self._s[3013]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3012]!, self._r[3012]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3014]!, self._r[3014]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3013]! } - public var Permissions_NotificationsText_v0: String { return self._s[3014]! } - public var Appearance_AppIcon: String { return self._s[3015]! } - public var LoginPassword_FloodError: String { return self._s[3016]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3018]! } + public var SharedMedia_SearchNoResults: String { return self._s[3015]! } + public var Permissions_NotificationsText_v0: String { return self._s[3016]! } + public var Appearance_AppIcon: String { return self._s[3017]! } + public var LoginPassword_FloodError: String { return self._s[3018]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3020]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3019]!, self._r[3019]!, [_0]) - } - public var Passport_Language_bn: String { return self._s[3020]! } - public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_0]) } - public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3022]!, self._r[3022]!, [_0]) - } - public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Passport_Language_bn: String { return self._s[3022]! } + public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3023]!, self._r[3023]!, [_0]) } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3026]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3028]! } - public var Contacts_PermissionsAllow: String { return self._s[3029]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3030]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3031]! } - public var WallpaperPreview_Pattern: String { return self._s[3032]! } - public var Paint_Duplicate: String { return self._s[3033]! } - public var Passport_Address_Country: String { return self._s[3034]! } - public var Notification_RenamedChannel: String { return self._s[3036]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3037]! } - public var Group_MessagePhotoUpdated: String { return self._s[3038]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3039]! } - public var Conversation_ContextMenuBan: String { return self._s[3040]! } - public var TwoStepAuth_EmailSent: String { return self._s[3041]! } - public var MessagePoll_NoVotes: String { return self._s[3042]! } - public var Passport_Language_is: String { return self._s[3043]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3045]! } - public var Tour_Text5: String { return self._s[3046]! } + public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3024]!, self._r[3024]!, [_0]) + } + public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3025]!, self._r[3025]!, [_0]) + } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3028]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3030]! } + public var Contacts_PermissionsAllow: String { return self._s[3031]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3032]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3033]! } + public var WallpaperPreview_Pattern: String { return self._s[3034]! } + public var Paint_Duplicate: String { return self._s[3035]! } + public var Passport_Address_Country: String { return self._s[3036]! } + public var Notification_RenamedChannel: String { return self._s[3038]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3039]! } + public var Group_MessagePhotoUpdated: String { return self._s[3040]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3041]! } + public var Conversation_ContextMenuBan: String { return self._s[3042]! } + public var TwoStepAuth_EmailSent: String { return self._s[3043]! } + public var MessagePoll_NoVotes: String { return self._s[3044]! } + public var Passport_Language_is: String { return self._s[3045]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3047]! } + public var Tour_Text5: String { return self._s[3048]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3048]!, self._r[3048]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3050]!, self._r[3050]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3049]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3050]! } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3051]! } - public var Paint_Edit: String { return self._s[3053]! } - public var Undo_DeletedGroup: String { return self._s[3056]! } - public var LoginPassword_ForgotPassword: String { return self._s[3057]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3058]! } + public var Undo_SecretChatDeleted: String { return self._s[3051]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3052]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3053]! } + public var Paint_Edit: String { return self._s[3055]! } + public var Undo_DeletedGroup: String { return self._s[3058]! } + public var LoginPassword_ForgotPassword: String { return self._s[3059]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3060]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3059]!, self._r[3059]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3061]!, self._r[3061]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3060]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3061]! } - public var Passport_Language_uz: String { return self._s[3062]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[3063]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3064]! } - public var Map_StopLiveLocation: String { return self._s[3066]! } - public var PasscodeSettings_Help: String { return self._s[3068]! } - public var NotificationsSound_Input: String { return self._s[3069]! } - public var Share_Title: String { return self._s[3072]! } - public var LogoutOptions_Title: String { return self._s[3073]! } - public var Login_TermsOfServiceAgree: String { return self._s[3074]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3075]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3076]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3077]! } - public var EnterPasscode_EnterTitle: String { return self._s[3078]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3062]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3063]! } + public var Passport_Language_uz: String { return self._s[3064]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[3065]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3066]! } + public var Map_StopLiveLocation: String { return self._s[3068]! } + public var PasscodeSettings_Help: String { return self._s[3070]! } + public var NotificationsSound_Input: String { return self._s[3071]! } + public var Share_Title: String { return self._s[3074]! } + public var LogoutOptions_Title: String { return self._s[3075]! } + public var Login_TermsOfServiceAgree: String { return self._s[3076]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3077]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3078]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3079]! } + public var EnterPasscode_EnterTitle: String { return self._s[3080]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3079]!, self._r[3079]!, [_0]) + return formatWithArgumentRanges(self._s[3081]!, self._r[3081]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3080]! } - public var Conversation_AddToContacts: String { return self._s[3081]! } - public var NotificationsSound_Keys: String { return self._s[3082]! } + public var Settings_CopyPhoneNumber: String { return self._s[3082]! } + public var Conversation_AddToContacts: String { return self._s[3083]! } + public var NotificationsSound_Keys: String { return self._s[3084]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3083]!, self._r[3083]!, [_0]) + return formatWithArgumentRanges(self._s[3085]!, self._r[3085]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[3084]! } - public var Message_Video: String { return self._s[3085]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3086]! } + public var Notification_MessageLifetime1w: String { return self._s[3086]! } + public var Message_Video: String { return self._s[3087]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3088]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3087]!, self._r[3087]!, [_1]) + return formatWithArgumentRanges(self._s[3089]!, self._r[3089]!, [_1]) } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3090]!, self._r[3090]!, [_0]) + return formatWithArgumentRanges(self._s[3092]!, self._r[3092]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3091]!, self._r[3091]!, [_0]) + return formatWithArgumentRanges(self._s[3093]!, self._r[3093]!, [_0]) } - public var Passport_Language_mk: String { return self._s[3092]! } - public var CreatePoll_CancelConfirmation: String { return self._s[3093]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3095]! } - public var PrivacyPolicy_Decline: String { return self._s[3096]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3097]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3098]! } - public var Permissions_SiriAllow_v0: String { return self._s[3100]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3101]! } + public var Passport_Language_mk: String { return self._s[3094]! } + public var CreatePoll_CancelConfirmation: String { return self._s[3095]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3097]! } + public var PrivacyPolicy_Decline: String { return self._s[3098]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3099]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3100]! } + public var Permissions_SiriAllow_v0: String { return self._s[3102]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3103]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3102]!, self._r[3102]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3104]!, self._r[3104]!, [_1, "\(_2)"]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3103]!, self._r[3103]!, [_0]) + return formatWithArgumentRanges(self._s[3105]!, self._r[3105]!, [_0]) } - public var Paint_Regular: String { return self._s[3104]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3105]! } - public var SocksProxySetup_ShareLink: String { return self._s[3106]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3107]! } - public var GroupInfo_InviteByLink: String { return self._s[3109]! } - public var MessageTimer_Custom: String { return self._s[3110]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3111]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3113]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3114]! } - public var Channel_Username_InvalidTaken: String { return self._s[3115]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3116]! } - public var Settings_ChatBackground: String { return self._s[3117]! } - public var Channel_Subscribers_Title: String { return self._s[3118]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3119]! } - public var Watch_ConnectionDescription: String { return self._s[3120]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3124]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3125]! } - public var EditProfile_Title: String { return self._s[3126]! } - public var NotificationsSound_Bamboo: String { return self._s[3128]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3130]! } - public var Login_SmsRequestState2: String { return self._s[3131]! } - public var Passport_Language_ar: String { return self._s[3132]! } + public var Paint_Regular: String { return self._s[3106]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3107]! } + public var SocksProxySetup_ShareLink: String { return self._s[3108]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3109]! } + public var GroupInfo_InviteByLink: String { return self._s[3111]! } + public var MessageTimer_Custom: String { return self._s[3112]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3113]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3115]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3116]! } + public var Channel_Username_InvalidTaken: String { return self._s[3117]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3118]! } + public var Settings_ChatBackground: String { return self._s[3119]! } + public var Channel_Subscribers_Title: String { return self._s[3120]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3121]! } + public var Watch_ConnectionDescription: String { return self._s[3122]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3126]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3127]! } + public var EditProfile_Title: String { return self._s[3128]! } + public var NotificationsSound_Bamboo: String { return self._s[3130]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3132]! } + public var Login_SmsRequestState2: String { return self._s[3133]! } + public var Passport_Language_ar: String { return self._s[3134]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3133]!, self._r[3133]!, [_0]) + return formatWithArgumentRanges(self._s[3135]!, self._r[3135]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3134]! } - public var Conversation_MessageDialogEdit: String { return self._s[3135]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3136]! } + public var Conversation_MessageDialogEdit: String { return self._s[3137]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3136]!, self._r[3136]!, [_1]) + return formatWithArgumentRanges(self._s[3138]!, self._r[3138]!, [_1]) } - public var Common_Close: String { return self._s[3137]! } - public var GroupInfo_PublicLink: String { return self._s[3138]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3139]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3140]! } + public var Common_Close: String { return self._s[3139]! } + public var GroupInfo_PublicLink: String { return self._s[3140]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3141]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3142]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3144]!, self._r[3144]!, [_0]) - } - public var UserInfo_About_Placeholder: String { return self._s[3145]! } - public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3146]!, self._r[3146]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3147]! } - public var Channel_Info_Banned: String { return self._s[3149]! } + public var UserInfo_About_Placeholder: String { return self._s[3147]! } + public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3148]!, self._r[3148]!, [_0]) + } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3149]! } + public var Channel_Info_Banned: String { return self._s[3151]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3150]!, self._r[3150]!, [_0]) + return formatWithArgumentRanges(self._s[3152]!, self._r[3152]!, [_0]) } - public var Appearance_Other: String { return self._s[3151]! } - public var Passport_Language_my: String { return self._s[3152]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3153]! } + public var Appearance_Other: String { return self._s[3153]! } + public var Passport_Language_my: String { return self._s[3154]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3155]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3154]!, self._r[3154]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3156]!, self._r[3156]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3155]! } - public var Preview_CopyAddress: String { return self._s[3156]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3157]! } + public var Preview_CopyAddress: String { return self._s[3158]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3157]!, self._r[3157]!, [_0]) + return formatWithArgumentRanges(self._s[3159]!, self._r[3159]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3158]! } - public var UserInfo_BotSettings: String { return self._s[3159]! } - public var LiveLocation_MenuStopAll: String { return self._s[3161]! } - public var Passport_PasswordCreate: String { return self._s[3162]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3163]! } - public var Message_PinnedLocationMessage: String { return self._s[3164]! } - public var Map_Satellite: String { return self._s[3165]! } - public var Watch_Message_Unsupported: String { return self._s[3166]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3167]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3168]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3160]! } + public var UserInfo_BotSettings: String { return self._s[3161]! } + public var LiveLocation_MenuStopAll: String { return self._s[3163]! } + public var Passport_PasswordCreate: String { return self._s[3164]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3165]! } + public var Message_PinnedLocationMessage: String { return self._s[3166]! } + public var Map_Satellite: String { return self._s[3167]! } + public var Watch_Message_Unsupported: String { return self._s[3168]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3169]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3170]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3169]!, self._r[3169]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3171]!, self._r[3171]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3170]!, self._r[3170]!, [_0]) + return formatWithArgumentRanges(self._s[3172]!, self._r[3172]!, [_0]) } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3171]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3172]! } - public var NotificationsSound_None: String { return self._s[3173]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3175]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3176]! } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3173]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3174]! } + public var NotificationsSound_None: String { return self._s[3175]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3177]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3178]! } public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3177]!, self._r[3177]!, [_1]) + return formatWithArgumentRanges(self._s[3179]!, self._r[3179]!, [_1]) } - public var Cache_Indexing: String { return self._s[3178]! } - public var DialogList_RecentTitlePeople: String { return self._s[3180]! } - public var DialogList_EncryptionRejected: String { return self._s[3181]! } - public var GroupInfo_Administrators: String { return self._s[3182]! } - public var Passport_ScanPassportHelp: String { return self._s[3183]! } - public var Application_Name: String { return self._s[3184]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3185]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3187]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3188]! } + public var Cache_Indexing: String { return self._s[3180]! } + public var DialogList_RecentTitlePeople: String { return self._s[3182]! } + public var DialogList_EncryptionRejected: String { return self._s[3183]! } + public var GroupInfo_Administrators: String { return self._s[3184]! } + public var Passport_ScanPassportHelp: String { return self._s[3185]! } + public var Application_Name: String { return self._s[3186]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3187]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3189]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3190]! } public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3189]!, self._r[3189]!, [_0]) + return formatWithArgumentRanges(self._s[3191]!, self._r[3191]!, [_0]) } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3190]!, self._r[3190]!, [_0]) + return formatWithArgumentRanges(self._s[3192]!, self._r[3192]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3191]! } - public var Privacy_ChatsTitle: String { return self._s[3192]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3193]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3194]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3195]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3196]! } - public var Group_LinkedChannel: String { return self._s[3197]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3198]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3199]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3200]! } - public var Channel_Setup_TypePublic: String { return self._s[3203]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3193]! } + public var Privacy_ChatsTitle: String { return self._s[3194]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3195]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3196]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3197]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3198]! } + public var Group_LinkedChannel: String { return self._s[3199]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3200]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3201]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3202]! } + public var Channel_Setup_TypePublic: String { return self._s[3205]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3204]!, self._r[3204]!, [_0]) + return formatWithArgumentRanges(self._s[3206]!, self._r[3206]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[3206]! } - public var Map_OpenInMaps: String { return self._s[3208]! } + public var Channel_TypeSetup_Title: String { return self._s[3208]! } + public var Map_OpenInMaps: String { return self._s[3210]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3209]!, self._r[3209]!, [_1]) + return formatWithArgumentRanges(self._s[3211]!, self._r[3211]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[3211]! } + public var NotificationsSound_Tremolo: String { return self._s[3213]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3212]!, self._r[3212]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3214]!, self._r[3214]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3213]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3214]! } - public var Passport_PasswordHelp: String { return self._s[3215]! } - public var Login_CodeExpiredError: String { return self._s[3216]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3217]! } - public var Conversation_TitleUnmute: String { return self._s[3218]! } - public var Passport_Identity_ScansHelp: String { return self._s[3219]! } - public var Passport_Language_lo: String { return self._s[3220]! } - public var Camera_FlashAuto: String { return self._s[3221]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[3222]! } - public var Common_Cancel: String { return self._s[3223]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[3224]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3225]! } - public var Appearance_TintAllColors: String { return self._s[3226]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3215]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3216]! } + public var Passport_PasswordHelp: String { return self._s[3217]! } + public var Login_CodeExpiredError: String { return self._s[3218]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3219]! } + public var Conversation_TitleUnmute: String { return self._s[3220]! } + public var Passport_Identity_ScansHelp: String { return self._s[3221]! } + public var Passport_Language_lo: String { return self._s[3222]! } + public var Camera_FlashAuto: String { return self._s[3223]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[3224]! } + public var Common_Cancel: String { return self._s[3225]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[3226]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3227]! } + public var Appearance_TintAllColors: String { return self._s[3228]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3227]!, self._r[3227]!, [_1]) + return formatWithArgumentRanges(self._s[3229]!, self._r[3229]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[3228]! } - public var ChatSettings_Title: String { return self._s[3230]! } - public var Passport_PasswordReset: String { return self._s[3231]! } - public var SocksProxySetup_TypeNone: String { return self._s[3232]! } - public var PhoneNumberHelp_Help: String { return self._s[3234]! } - public var Checkout_EnterPassword: String { return self._s[3235]! } - public var Share_AuthTitle: String { return self._s[3237]! } - public var Activity_UploadingDocument: String { return self._s[3238]! } - public var State_Connecting: String { return self._s[3239]! } - public var Profile_MessageLifetime1w: String { return self._s[3240]! } - public var Conversation_ContextMenuReport: String { return self._s[3241]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3242]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3243]! } - public var AuthSessions_Terminate: String { return self._s[3244]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3245]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3246]! } - public var PhotoEditor_Set: String { return self._s[3247]! } - public var EmptyGroupInfo_Title: String { return self._s[3248]! } - public var Login_PadPhoneHelp: String { return self._s[3249]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3251]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3253]! } - public var NotificationsSound_Complete: String { return self._s[3254]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3255]! } - public var Group_Info_AdminLog: String { return self._s[3256]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3257]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3258]! } - public var Conversation_Admin: String { return self._s[3260]! } - public var Conversation_GifTooltip: String { return self._s[3261]! } - public var Passport_NotLoggedInMessage: String { return self._s[3262]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[3230]! } + public var ChatSettings_Title: String { return self._s[3232]! } + public var Passport_PasswordReset: String { return self._s[3233]! } + public var SocksProxySetup_TypeNone: String { return self._s[3234]! } + public var PhoneNumberHelp_Help: String { return self._s[3236]! } + public var Checkout_EnterPassword: String { return self._s[3237]! } + public var Share_AuthTitle: String { return self._s[3239]! } + public var Activity_UploadingDocument: String { return self._s[3240]! } + public var State_Connecting: String { return self._s[3241]! } + public var Profile_MessageLifetime1w: String { return self._s[3242]! } + public var Conversation_ContextMenuReport: String { return self._s[3243]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3244]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3245]! } + public var AuthSessions_Terminate: String { return self._s[3246]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3247]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3248]! } + public var PhotoEditor_Set: String { return self._s[3249]! } + public var EmptyGroupInfo_Title: String { return self._s[3250]! } + public var Login_PadPhoneHelp: String { return self._s[3251]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3253]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3255]! } + public var NotificationsSound_Complete: String { return self._s[3256]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3257]! } + public var Group_Info_AdminLog: String { return self._s[3258]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3259]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3260]! } + public var Conversation_Admin: String { return self._s[3262]! } + public var Conversation_GifTooltip: String { return self._s[3263]! } + public var Passport_NotLoggedInMessage: String { return self._s[3264]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3263]!, self._r[3263]!, [_0]) + return formatWithArgumentRanges(self._s[3265]!, self._r[3265]!, [_0]) } - public var Profile_MessageLifetimeForever: String { return self._s[3264]! } - public var SharedMedia_EmptyTitle: String { return self._s[3266]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3268]! } - public var Username_Help: String { return self._s[3269]! } - public var DialogList_LanguageTooltip: String { return self._s[3271]! } - public var Map_LoadError: String { return self._s[3272]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3273]! } - public var Channel_AdminLog_AddMembers: String { return self._s[3274]! } - public var ArchivedChats_IntroTitle2: String { return self._s[3275]! } - public var Notification_Exceptions_NewException: String { return self._s[3276]! } - public var TwoStepAuth_EmailTitle: String { return self._s[3277]! } - public var WatchRemote_AlertText: String { return self._s[3278]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[3281]! } + public var Profile_MessageLifetimeForever: String { return self._s[3266]! } + public var SharedMedia_EmptyTitle: String { return self._s[3268]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3270]! } + public var Username_Help: String { return self._s[3271]! } + public var DialogList_LanguageTooltip: String { return self._s[3273]! } + public var Map_LoadError: String { return self._s[3274]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3275]! } + public var Channel_AdminLog_AddMembers: String { return self._s[3276]! } + public var ArchivedChats_IntroTitle2: String { return self._s[3277]! } + public var Notification_Exceptions_NewException: String { return self._s[3278]! } + public var TwoStepAuth_EmailTitle: String { return self._s[3279]! } + public var WatchRemote_AlertText: String { return self._s[3280]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[3283]! } public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3282]!, self._r[3282]!, [_0]) + return formatWithArgumentRanges(self._s[3284]!, self._r[3284]!, [_0]) } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3283]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[3284]! } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3285]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[3286]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3285]!, self._r[3285]!, [_0]) + return formatWithArgumentRanges(self._s[3287]!, self._r[3287]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3286]!, self._r[3286]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3288]!, self._r[3288]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[3287]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3288]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[3290]! } - public var ChatList_UndoArchiveText1: String { return self._s[3291]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3292]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3293]! } - public var Cache_ClearNone: String { return self._s[3294]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3295]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3296]! } + public var Group_AdminLog_EmptyText: String { return self._s[3289]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3290]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[3292]! } + public var ChatList_UndoArchiveText1: String { return self._s[3293]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3294]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3295]! } + public var Cache_ClearNone: String { return self._s[3296]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3297]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3298]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3297]!, self._r[3297]!, [_0]) - } - public var Passport_Identity_Country: String { return self._s[3298]! } - public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3299]!, self._r[3299]!, [_0]) } - public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3300]!, self._r[3300]!, [_0]) + public var Passport_Identity_Country: String { return self._s[3300]! } + public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3301]!, self._r[3301]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[3301]! } - public var AccessDenied_Settings: String { return self._s[3302]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3303]! } - public var Month_ShortMay: String { return self._s[3304]! } - public var Compose_NewGroup: String { return self._s[3305]! } - public var Group_Setup_TypePrivate: String { return self._s[3307]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3309]! } - public var Appearance_ThemeDayClassic: String { return self._s[3310]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3311]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3312]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3313]! } - public var Conversation_typing: String { return self._s[3315]! } - public var Paint_Masks: String { return self._s[3316]! } - public var Contacts_DeselectAll: String { return self._s[3317]! } - public var Username_InvalidTaken: String { return self._s[3318]! } - public var Call_StatusNoAnswer: String { return self._s[3319]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3320]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3321]! } - public var Passport_Identity_Selfie: String { return self._s[3322]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3323]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3324]! } - public var Conversation_ClearSecretHistory: String { return self._s[3325]! } - public var PeopleNearby_Description: String { return self._s[3327]! } - public var NetworkUsageSettings_Title: String { return self._s[3328]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3330]! } + public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3302]!, self._r[3302]!, [_0]) + } + public var Exceptions_AddToExceptions: String { return self._s[3303]! } + public var AccessDenied_Settings: String { return self._s[3304]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3305]! } + public var Month_ShortMay: String { return self._s[3306]! } + public var Compose_NewGroup: String { return self._s[3307]! } + public var Group_Setup_TypePrivate: String { return self._s[3309]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3311]! } + public var Appearance_ThemeDayClassic: String { return self._s[3312]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3313]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3314]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3315]! } + public var Conversation_typing: String { return self._s[3317]! } + public var Paint_Masks: String { return self._s[3318]! } + public var Contacts_DeselectAll: String { return self._s[3319]! } + public var Username_InvalidTaken: String { return self._s[3320]! } + public var Call_StatusNoAnswer: String { return self._s[3321]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3322]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3323]! } + public var Passport_Identity_Selfie: String { return self._s[3324]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3325]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3326]! } + public var Conversation_ClearSecretHistory: String { return self._s[3327]! } + public var PeopleNearby_Description: String { return self._s[3329]! } + public var NetworkUsageSettings_Title: String { return self._s[3330]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3332]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3332]!, self._r[3332]!, [_0]) + return formatWithArgumentRanges(self._s[3334]!, self._r[3334]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3333]!, self._r[3333]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3335]!, self._r[3335]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3335]! } - public var Map_LiveLocationTitle: String { return self._s[3336]! } - public var Login_InfoAvatarAdd: String { return self._s[3337]! } - public var Passport_Identity_FilesView: String { return self._s[3338]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3339]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3340]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3337]! } + public var Map_LiveLocationTitle: String { return self._s[3338]! } + public var Login_InfoAvatarAdd: String { return self._s[3339]! } + public var Passport_Identity_FilesView: String { return self._s[3340]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3341]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3342]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3341]!, self._r[3341]!, [_0]) + return formatWithArgumentRanges(self._s[3343]!, self._r[3343]!, [_0]) } - public var ContactInfo_PhoneNumberHidden: String { return self._s[3342]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[3343]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3344]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[3344]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3345]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3346]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3345]!, self._r[3345]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3347]!, self._r[3347]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3346]! } - public var Tour_Title2: String { return self._s[3347]! } - public var Conversation_FileOpenIn: String { return self._s[3348]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3349]! } - public var Wallpaper_Set: String { return self._s[3350]! } - public var Passport_Identity_Translations: String { return self._s[3352]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3348]! } + public var Tour_Title2: String { return self._s[3349]! } + public var Conversation_FileOpenIn: String { return self._s[3350]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3351]! } + public var Wallpaper_Set: String { return self._s[3352]! } + public var Passport_Identity_Translations: String { return self._s[3354]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3353]!, self._r[3353]!, [_0]) + return formatWithArgumentRanges(self._s[3355]!, self._r[3355]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3354]! } + public var Channel_LeaveChannel: String { return self._s[3356]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3355]!, self._r[3355]!, [_1]) + return formatWithArgumentRanges(self._s[3357]!, self._r[3357]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3356]! } - public var PhotoEditor_HighlightsTint: String { return self._s[3357]! } - public var Passport_Email_Delete: String { return self._s[3358]! } - public var Conversation_Mute: String { return self._s[3360]! } - public var Channel_AddBotAsAdmin: String { return self._s[3361]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3363]! } - public var Channel_Management_LabelOwner: String { return self._s[3365]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3358]! } + public var PhotoEditor_HighlightsTint: String { return self._s[3359]! } + public var Passport_Email_Delete: String { return self._s[3360]! } + public var Conversation_Mute: String { return self._s[3362]! } + public var Channel_AddBotAsAdmin: String { return self._s[3363]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3365]! } + public var Channel_Management_LabelOwner: String { return self._s[3367]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3366]!, self._r[3366]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3368]!, self._r[3368]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[3367]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[3368]! } - public var Common_No: String { return self._s[3369]! } - public var Weekday_Sunday: String { return self._s[3370]! } - public var Notification_Reply: String { return self._s[3371]! } - public var Conversation_ViewMessage: String { return self._s[3372]! } + public var Calls_CallTabDescription: String { return self._s[3369]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[3370]! } + public var Common_No: String { return self._s[3371]! } + public var Weekday_Sunday: String { return self._s[3372]! } + public var Notification_Reply: String { return self._s[3373]! } + public var Conversation_ViewMessage: String { return self._s[3374]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3373]!, self._r[3373]!, [_0]) + return formatWithArgumentRanges(self._s[3375]!, self._r[3375]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3374]!, self._r[3374]!, [_0]) + return formatWithArgumentRanges(self._s[3376]!, self._r[3376]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3375]! } - public var Message_PinnedDocumentMessage: String { return self._s[3376]! } - public var DialogList_TabTitle: String { return self._s[3378]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[3379]! } - public var Passport_FieldEmail: String { return self._s[3380]! } - public var Conversation_UnpinMessageAlert: String { return self._s[3381]! } - public var Passport_Address_TypeBankStatement: String { return self._s[3382]! } - public var Passport_Identity_ExpiryDate: String { return self._s[3383]! } - public var Privacy_Calls_P2P: String { return self._s[3384]! } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3377]! } + public var Message_PinnedDocumentMessage: String { return self._s[3378]! } + public var DialogList_TabTitle: String { return self._s[3380]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[3381]! } + public var Passport_FieldEmail: String { return self._s[3382]! } + public var Conversation_UnpinMessageAlert: String { return self._s[3383]! } + public var Passport_Address_TypeBankStatement: String { return self._s[3384]! } + public var Passport_Identity_ExpiryDate: String { return self._s[3385]! } + public var Privacy_Calls_P2P: String { return self._s[3386]! } public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3386]!, self._r[3386]!, [_0]) + return formatWithArgumentRanges(self._s[3388]!, self._r[3388]!, [_0]) } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[3387]! } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[3389]! } public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3388]!, self._r[3388]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3390]!, self._r[3390]!, [_1, _2]) } - public var Stickers_ClearRecent: String { return self._s[3389]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3390]! } - public var Passport_InfoText: String { return self._s[3391]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3392]! } + public var Stickers_ClearRecent: String { return self._s[3391]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3392]! } + public var Passport_InfoText: String { return self._s[3393]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3394]! } public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3393]!, self._r[3393]!, [_0]) + return formatWithArgumentRanges(self._s[3395]!, self._r[3395]!, [_0]) } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3394]!, self._r[3394]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3396]!, self._r[3396]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3395]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[3396]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[3398]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3399]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3397]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[3398]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[3400]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3401]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3400]!, self._r[3400]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3402]!, self._r[3402]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3402]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3404]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3404]!, self._r[3404]!, [_0]) + return formatWithArgumentRanges(self._s[3406]!, self._r[3406]!, [_0]) } - public var DialogList_Unread: String { return self._s[3405]! } + public var DialogList_Unread: String { return self._s[3407]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3406]!, self._r[3406]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3408]!, self._r[3408]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[3407]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3408]! } + public var User_DeletedAccount: String { return self._s[3409]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3410]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3409]!, self._r[3409]!, [_0]) + return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[3410]! } - public var SharedMedia_CategoryMedia: String { return self._s[3411]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3412]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3413]! } - public var Watch_ChatList_Compose: String { return self._s[3414]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3415]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3416]! } - public var Watch_Microphone_Access: String { return self._s[3417]! } - public var Group_Setup_HistoryHeader: String { return self._s[3418]! } - public var Map_SetThisLocation: String { return self._s[3419]! } - public var Activity_UploadingPhoto: String { return self._s[3420]! } - public var Conversation_Edit: String { return self._s[3422]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3423]! } - public var Login_TermsOfServiceDecline: String { return self._s[3424]! } - public var Message_PinnedContactMessage: String { return self._s[3425]! } + public var UserInfo_NotificationsDefault: String { return self._s[3412]! } + public var SharedMedia_CategoryMedia: String { return self._s[3413]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3414]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3415]! } + public var Watch_ChatList_Compose: String { return self._s[3416]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3417]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3418]! } + public var Watch_Microphone_Access: String { return self._s[3419]! } + public var Group_Setup_HistoryHeader: String { return self._s[3420]! } + public var Map_SetThisLocation: String { return self._s[3421]! } + public var Activity_UploadingPhoto: String { return self._s[3422]! } + public var Conversation_Edit: String { return self._s[3424]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3425]! } + public var Login_TermsOfServiceDecline: String { return self._s[3426]! } + public var Message_PinnedContactMessage: String { return self._s[3427]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3426]!, self._r[3426]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3428]!, self._r[3428]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3427]!, self._r[3427]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3429]!, self._r[3429]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[3428]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3430]! } + public var Appearance_LargeEmoji: String { return self._s[3430]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3432]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3431]!, self._r[3431]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3433]!, self._r[3433]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3432]! } - public var Message_PinnedPhotoMessage: String { return self._s[3433]! } - public var Passport_FieldPhone: String { return self._s[3434]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3435]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[3436]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3438]! } - public var Conversation_Call: String { return self._s[3439]! } - public var Common_TakePhoto: String { return self._s[3441]! } - public var Channel_NotificationLoading: String { return self._s[3442]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3434]! } + public var Message_PinnedPhotoMessage: String { return self._s[3435]! } + public var Passport_FieldPhone: String { return self._s[3436]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3437]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[3438]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3440]! } + public var Conversation_Call: String { return self._s[3441]! } + public var Common_TakePhoto: String { return self._s[3443]! } + public var Channel_NotificationLoading: String { return self._s[3444]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3443]!, self._r[3443]!, [_0]) + return formatWithArgumentRanges(self._s[3445]!, self._r[3445]!, [_0]) } public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3444]!, self._r[3444]!, [_1]) + return formatWithArgumentRanges(self._s[3446]!, self._r[3446]!, [_1]) } - public var Permissions_SiriTitle_v0: String { return self._s[3445]! } + public var Permissions_SiriTitle_v0: String { return self._s[3447]! } public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3446]!, self._r[3446]!, [_0]) + return formatWithArgumentRanges(self._s[3448]!, self._r[3448]!, [_0]) } - public var Channel_MessagePhotoRemoved: String { return self._s[3447]! } - public var Common_edit: String { return self._s[3448]! } - public var PrivacySettings_AuthSessions: String { return self._s[3449]! } - public var Month_ShortJune: String { return self._s[3450]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3451]! } - public var Call_ReportSend: String { return self._s[3452]! } - public var Watch_LastSeen_JustNow: String { return self._s[3453]! } - public var Notifications_MessageNotifications: String { return self._s[3454]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3455]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3457]! } - public var Group_Status: String { return self._s[3458]! } + public var Channel_MessagePhotoRemoved: String { return self._s[3449]! } + public var Common_edit: String { return self._s[3450]! } + public var PrivacySettings_AuthSessions: String { return self._s[3451]! } + public var Month_ShortJune: String { return self._s[3452]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3453]! } + public var Call_ReportSend: String { return self._s[3454]! } + public var Watch_LastSeen_JustNow: String { return self._s[3455]! } + public var Notifications_MessageNotifications: String { return self._s[3456]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3457]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3459]! } + public var Group_Status: String { return self._s[3460]! } public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3459]!, self._r[3459]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3461]!, self._r[3461]!, [_0, _1]) } - public var TextFormat_AddLinkTitle: String { return self._s[3460]! } - public var ShareMenu_ShareTo: String { return self._s[3461]! } - public var Conversation_Moderate_Ban: String { return self._s[3462]! } + public var TextFormat_AddLinkTitle: String { return self._s[3462]! } + public var ShareMenu_ShareTo: String { return self._s[3463]! } + public var Conversation_Moderate_Ban: String { return self._s[3464]! } public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3463]!, self._r[3463]!, [_0]) + return formatWithArgumentRanges(self._s[3465]!, self._r[3465]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3464]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3465]! } + public var SharedMedia_ViewInChat: String { return self._s[3466]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3467]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3466]!, self._r[3466]!, [_1]) + return formatWithArgumentRanges(self._s[3468]!, self._r[3468]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3467]!, self._r[3467]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3469]!, self._r[3469]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3469]!, self._r[3469]!, [_0]) + return formatWithArgumentRanges(self._s[3471]!, self._r[3471]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3470]! } - public var Appearance_ReduceMotion: String { return self._s[3471]! } + public var Map_OpenInHereMaps: String { return self._s[3472]! } + public var Appearance_ReduceMotion: String { return self._s[3473]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3472]!, self._r[3472]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3474]!, self._r[3474]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3473]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3474]! } - public var PhotoEditor_Skip: String { return self._s[3475]! } - public func MessageTimer_Days(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3475]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3476]! } + public var PhotoEditor_Skip: String { return self._s[3477]! } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Weeks(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedContacts(_ value: Int32) -> String { + public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortDays(_ value: Int32) -> String { + public func Watch_UserInfo_Mute(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Generic(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Call_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) + } + public func QuickSend_Photos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Map_ETAMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPhotos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(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 = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) @@ -4061,396 +4069,390 @@ public final class PresentationStrings { let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func Call_Minutes(_ value: Int32) -> String { + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Months(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_SelectedChats(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, _1, _2) } - public func QuickSend_Photos(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) } - public func Call_Seconds(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ForwardedMessages(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, _0, _1) } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_ShareVideo(_ value: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func MessageTimer_Months(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Hours(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusMembers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) } public func UserCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func Media_SharePhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteFor_Days(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Days(_ value: Int32) -> String { + public func ForwardedAudios(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) } public func MessageTimer_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendGif(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func SharedMedia_Link(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func Call_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, _1, _2) } public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedFiles(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(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 { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2) } public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Passport_Scans(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) } public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) } public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _1, _2) + public func ForwardedContacts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Video(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(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 = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, _1, _2) + public func ForwardedMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func Conversation_StatusMembers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, _0, _1) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _1, _2) } - public func SharedMedia_File(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedPhotos(_ value: Int32) -> String { + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) } - public func Media_SharePhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, _1, _2) } public init(primaryComponent: PresentationStringsComponent, secondaryComponent: PresentationStringsComponent?, groupingSeparator: String) { diff --git a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift index 0e43e63e08..28767e4fa3 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift @@ -18,21 +18,21 @@ public final class PresentationThemeGradientColors { } } -public final class PresentationThemeAuth { - public let introStartButtonColor: UIColor - public let introDotColor: UIColor +public final class PresentationThemeIntro { + public let startButtonColor: UIColor + public let dotColor: UIColor - public init(introStartButtonColor: UIColor, introDotColor: UIColor) { - self.introStartButtonColor = introStartButtonColor - self.introDotColor = introDotColor + public init(startButtonColor: UIColor, dotColor: UIColor) { + self.startButtonColor = startButtonColor + self.dotColor = dotColor } } public final class PresentationThemePasscode { public let backgroundColors: PresentationThemeGradientColors - public let buttonColor: UIColor? + public let buttonColor: UIColor - public init(backgroundColors: PresentationThemeGradientColors, buttonColor: UIColor?) { + public init(backgroundColors: PresentationThemeGradientColors, buttonColor: UIColor) { self.backgroundColors = backgroundColors self.buttonColor = buttonColor } @@ -62,7 +62,7 @@ public final class PresentationThemeRootTabBar { } } -public enum PresentationThemeStatusBarStyle: Int32, Codable { +public enum PresentationThemeStatusBarStyle: Int32 { case black = 0 case white = 1 @@ -149,7 +149,7 @@ public final class PresentationThemeRootController { } } -public enum PresentationThemeActionSheetBackgroundType: Int32, Codable { +public enum PresentationThemeActionSheetBackgroundType: Int32 { case light case dark } @@ -260,12 +260,14 @@ public final class PresentationThemeFillStrokeForeground { public final class PresentationInputFieldTheme { public let backgroundColor: UIColor + public let strokeColor: UIColor public let placeholderColor: UIColor public let primaryColor: UIColor public let controlColor: UIColor - public init(backgroundColor: UIColor, placeholderColor: UIColor, primaryColor: UIColor, controlColor: UIColor) { + public init(backgroundColor: UIColor, strokeColor: UIColor, placeholderColor: UIColor, primaryColor: UIColor, controlColor: UIColor) { self.backgroundColor = backgroundColor + self.strokeColor = strokeColor self.placeholderColor = placeholderColor self.primaryColor = primaryColor self.controlColor = controlColor @@ -646,7 +648,7 @@ public final class PresentationThemeServiceMessage { } } -public enum PresentationThemeKeyboardColor: Int32, Codable { +public enum PresentationThemeKeyboardColor: Int32 { case light = 0 case dark = 1 @@ -664,25 +666,17 @@ public final class PresentationThemeChatInputPanelMediaRecordingControl { public let buttonColor: UIColor public let micLevelColor: UIColor public let activeIconColor: UIColor - public let panelControlFillColor: UIColor - public let panelControlStrokeColor: UIColor - public let panelControlContentPrimaryColor: UIColor - public let panelControlContentAccentColor: UIColor - init(buttonColor: UIColor, micLevelColor: UIColor, activeIconColor: UIColor, panelControlFillColor: UIColor, panelControlStrokeColor: UIColor, panelControlContentPrimaryColor: UIColor, panelControlContentAccentColor: UIColor) { + init(buttonColor: UIColor, micLevelColor: UIColor, activeIconColor: UIColor) { self.buttonColor = buttonColor self.micLevelColor = micLevelColor self.activeIconColor = activeIconColor - self.panelControlFillColor = panelControlFillColor - self.panelControlStrokeColor = panelControlStrokeColor - self.panelControlContentPrimaryColor = panelControlContentPrimaryColor - self.panelControlContentAccentColor = panelControlContentAccentColor } } public final class PresentationThemeChatInputPanel { public let panelBackgroundColor: UIColor - public let panelStrokeColor: UIColor + public let panelSeparatorColor: UIColor public let panelControlAccentColor: UIColor public let panelControlColor: UIColor public let panelControlDisabledColor: UIColor @@ -700,9 +694,9 @@ public final class PresentationThemeChatInputPanel { public let keyboardColor: PresentationThemeKeyboardColor public let mediaRecordingControl: PresentationThemeChatInputPanelMediaRecordingControl - public init(panelBackgroundColor: UIColor, panelStrokeColor: UIColor, panelControlAccentColor: UIColor, panelControlColor: UIColor, panelControlDisabledColor: UIColor, panelControlDestructiveColor: UIColor, inputBackgroundColor: UIColor, inputStrokeColor: UIColor, inputPlaceholderColor: UIColor, inputTextColor: UIColor, inputControlColor: UIColor, actionControlFillColor: UIColor, actionControlForegroundColor: UIColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, mediaRecordingDotColor: UIColor, keyboardColor: PresentationThemeKeyboardColor, mediaRecordingControl: PresentationThemeChatInputPanelMediaRecordingControl) { + public init(panelBackgroundColor: UIColor, panelSeparatorColor: UIColor, panelControlAccentColor: UIColor, panelControlColor: UIColor, panelControlDisabledColor: UIColor, panelControlDestructiveColor: UIColor, inputBackgroundColor: UIColor, inputStrokeColor: UIColor, inputPlaceholderColor: UIColor, inputTextColor: UIColor, inputControlColor: UIColor, actionControlFillColor: UIColor, actionControlForegroundColor: UIColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, mediaRecordingDotColor: UIColor, keyboardColor: PresentationThemeKeyboardColor, mediaRecordingControl: PresentationThemeChatInputPanelMediaRecordingControl) { self.panelBackgroundColor = panelBackgroundColor - self.panelStrokeColor = panelStrokeColor + self.panelSeparatorColor = panelSeparatorColor self.panelControlAccentColor = panelControlAccentColor self.panelControlColor = panelControlColor self.panelControlDisabledColor = panelControlDisabledColor @@ -804,7 +798,7 @@ public final class PresentationThemeChat { } } -public enum PresentationThemeExpandedNotificationBackgroundType: Int32, Codable { +public enum PresentationThemeExpandedNotificationBackgroundType: Int32 { case light case dark } @@ -886,13 +880,31 @@ public enum PresentationThemeName: Equatable { } } } + + public var string: String { + switch self { + case let .builtin(name): + switch name { + case .day: + return "Day" + case .dayClassic: + return "Classic" + case .nightGrayscale: + return "Night" + case .nightAccent: + return "Night" + } + case let .custom(name): + return name + } + } } public final class PresentationTheme: Equatable { public let name: PresentationThemeName public let author: String? public let overallDarkAppearance: Bool - public let auth: PresentationThemeAuth + public let intro: PresentationThemeIntro public let passcode: PresentationThemePasscode public let rootController: PresentationThemeRootController public let list: PresentationThemeList @@ -903,11 +915,11 @@ public final class PresentationTheme: Equatable { public let resourceCache: PresentationsResourceCache = PresentationsResourceCache() - public init(name: PresentationThemeName, author: String?, overallDarkAppearance: Bool, auth: PresentationThemeAuth, passcode: PresentationThemePasscode, rootController: PresentationThemeRootController, list: PresentationThemeList, chatList: PresentationThemeChatList, chat: PresentationThemeChat, actionSheet: PresentationThemeActionSheet, inAppNotification: PresentationThemeInAppNotification) { + public init(name: PresentationThemeName, author: String?, overallDarkAppearance: Bool, intro: PresentationThemeIntro, passcode: PresentationThemePasscode, rootController: PresentationThemeRootController, list: PresentationThemeList, chatList: PresentationThemeChatList, chat: PresentationThemeChat, actionSheet: PresentationThemeActionSheet, inAppNotification: PresentationThemeInAppNotification) { self.name = name self.author = author self.overallDarkAppearance = overallDarkAppearance - self.auth = auth + self.intro = intro self.passcode = passcode self.rootController = rootController self.list = list diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift new file mode 100644 index 0000000000..0acbfdeda0 --- /dev/null +++ b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift @@ -0,0 +1,1423 @@ +import Foundation +import UIKit + +public enum PresentationThemeColorDecodingError: Error { + case generic +} + +private func decodeColor(_ values: KeyedDecodingContainer, _ key: Key) throws -> UIColor { + if let value = try? values.decode(String.self, forKey: key) { + if value.lowercased() == "clear" { + return UIColor.clear + } else if let color = UIColor(hexString: value) { + return color + } + } + throw PresentationThemeColorDecodingError.generic +} + +private func encodeColor(_ values: inout KeyedEncodingContainer, _ value: UIColor, _ key: Key) throws { + if value == UIColor.clear { + try values.encode("clear", forKey: key) + } else if value.alpha < 1.0 { + try values.encode(String(format: "%08x", value.argb), forKey: key) + } else { + try values.encode(String(format: "%06x", value.rgb), forKey: key) + } +} + +extension PresentationThemeStatusBarStyle: Codable { + public init(from decoder: Decoder) throws { + let values = try decoder.singleValueContainer() + if let value = try? values.decode(String.self) { + switch value.lowercased() { + case "black": + self = .black + case "white": + self = .white + default: + self = .black + } + } else { + self = .black + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .black: + try container.encode("black") + case .white: + try container.encode("white") + } + } +} + +extension PresentationThemeActionSheetBackgroundType: Codable { + public init(from decoder: Decoder) throws { + let values = try decoder.singleValueContainer() + if let value = try? values.decode(String.self) { + switch value.lowercased() { + case "light": + self = .light + case "dark": + self = .dark + default: + self = .light + } + } else { + self = .light + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .light: + try container.encode("light") + case .dark: + try container.encode("dark") + } + } +} + +extension PresentationThemeKeyboardColor: Codable { + public init(from decoder: Decoder) throws { + let values = try decoder.singleValueContainer() + if let value = try? values.decode(String.self) { + switch value.lowercased() { + case "light": + self = .light + case "dark": + self = .dark + default: + self = .light + } + } else { + self = .light + } + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .light: + try container.encode("light") + case .dark: + try container.encode("dark") + } + } +} + +extension PresentationThemeExpandedNotificationBackgroundType: Codable { + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case .light: + try container.encode("light") + case .dark: + try container.encode("dark") + } + } +} + +extension PresentationThemeGradientColors: Codable { + enum CodingKeys: String, CodingKey { + case top + case bottom + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(topColor: try decodeColor(values, .top), + bottomColor: try decodeColor(values, .bottom)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.topColor, .top) + try encodeColor(&values, self.bottomColor, .bottom) + } +} + +extension PresentationThemeIntro: Codable { + enum CodingKeys: String, CodingKey { + case startButton + case dot + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(startButtonColor: try decodeColor(values, .startButton), + dotColor: try decodeColor(values, .dot)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.startButtonColor, .startButton) + try encodeColor(&values, self.dotColor, .dot) + } +} + +extension PresentationThemePasscode: Codable { + enum CodingKeys: String, CodingKey { + case bg + case button + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColors: try values.decode(PresentationThemeGradientColors.self, forKey: .bg), + buttonColor: try decodeColor(values, .button)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.backgroundColors, forKey: .bg) + try encodeColor(&values, self.buttonColor, .button) + } +} + +extension PresentationThemeRootTabBar: Codable { + enum CodingKeys: String, CodingKey { + case background + case separator + case icon + case selectedIcon + case text + case selectedText + case badgeBackground + case badgeStroke + case badgeText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColor: try decodeColor(values, .background), + separatorColor: try decodeColor(values, .separator), + iconColor: try decodeColor(values, .icon), + selectedIconColor: try decodeColor(values, .selectedIcon), + textColor: try decodeColor(values, .text), + selectedTextColor: try decodeColor(values, .selectedText), + badgeBackgroundColor: try decodeColor(values, .badgeBackground), + badgeStrokeColor: try decodeColor(values, .badgeStroke), + badgeTextColor: try decodeColor(values, .badgeText)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.backgroundColor, .background) + try encodeColor(&values, self.separatorColor, .separator) + try encodeColor(&values, self.iconColor, .icon) + try encodeColor(&values, self.selectedIconColor, .selectedIcon) + try encodeColor(&values, self.textColor, .text) + try encodeColor(&values, self.selectedTextColor, .selectedText) + try encodeColor(&values, self.badgeBackgroundColor, .badgeBackground) + try encodeColor(&values, self.badgeStrokeColor, .badgeStroke) + try encodeColor(&values, self.badgeTextColor, .badgeText) + } +} + +extension PresentationThemeRootNavigationBar: Codable { + enum CodingKeys: String, CodingKey { + case button + case disabledButton + case primaryText + case secondaryText + case control + case accentText + case background + case separator + case badgeFill + case badgeStroke + case badgeText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(buttonColor: try decodeColor(values, .button), + disabledButtonColor: try decodeColor(values, .disabledButton), + primaryTextColor: try decodeColor(values, .primaryText), + secondaryTextColor: try decodeColor(values, .secondaryText), + controlColor: try decodeColor(values, .control), + accentTextColor: try decodeColor(values, .accentText), + backgroundColor: try decodeColor(values, .background), + separatorColor: try decodeColor(values, .separator), + badgeBackgroundColor: try decodeColor(values, .badgeFill), + badgeStrokeColor: try decodeColor(values, .badgeStroke), + badgeTextColor: try decodeColor(values, .badgeText)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.buttonColor, .button) + try encodeColor(&values, self.disabledButtonColor, .disabledButton) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try encodeColor(&values, self.secondaryTextColor, .secondaryText) + try encodeColor(&values, self.controlColor, .control) + try encodeColor(&values, self.accentTextColor, .accentText) + try encodeColor(&values, self.backgroundColor, .background) + try encodeColor(&values, self.separatorColor, .separator) + try encodeColor(&values, self.badgeBackgroundColor, .badgeFill) + try encodeColor(&values, self.badgeStrokeColor, .badgeStroke) + try encodeColor(&values, self.badgeTextColor, .badgeText) + } +} + +extension PresentationThemeNavigationSearchBar: Codable { + enum CodingKeys: String, CodingKey { + case background + case accent + case inputFill + case inputText + case inputPlaceholderText + case inputIcon + case inputClearButton + case separator + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColor: try decodeColor(values, .background), + accentColor: try decodeColor(values, .accent), + inputFillColor: try decodeColor(values, .inputFill), + inputTextColor: try decodeColor(values, .inputText), + inputPlaceholderTextColor: try decodeColor(values, .inputPlaceholderText), + inputIconColor: try decodeColor(values, .inputIcon), + inputClearButtonColor: try decodeColor(values, .inputClearButton), + separatorColor: try decodeColor(values, .separator)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.backgroundColor, .background) + try encodeColor(&values, self.accentColor, .accent) + try encodeColor(&values, self.inputFillColor, .inputFill) + try encodeColor(&values, self.inputTextColor, .inputText) + try encodeColor(&values, self.inputPlaceholderTextColor, .inputPlaceholderText) + try encodeColor(&values, self.inputIconColor, .inputIcon) + try encodeColor(&values, self.inputClearButtonColor, .inputClearButton) + try encodeColor(&values, self.separatorColor, .separator) + } +} + +extension PresentationThemeRootController: Codable { + enum CodingKeys: String, CodingKey { + case statusBar + case tabBar + case navBar + case searchBar + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(statusBarStyle: try values.decode(PresentationThemeStatusBarStyle.self, forKey: .statusBar), + tabBar: try values.decode(PresentationThemeRootTabBar.self, forKey: .tabBar), + navigationBar: try values.decode(PresentationThemeRootNavigationBar.self, forKey: .navBar), + navigationSearchBar: try values.decode(PresentationThemeNavigationSearchBar.self, forKey: .searchBar)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.statusBarStyle, forKey: .statusBar) + try values.encode(self.tabBar, forKey: .tabBar) + try values.encode(self.navigationBar, forKey: .navBar) + try values.encode(self.navigationSearchBar, forKey: .searchBar) + } +} + +extension PresentationThemeActionSheet: Codable { + enum CodingKeys: String, CodingKey { + case dim + case bgType + case opaqueItemBg + case itemBg + case opaqueItemHighlightedBg + case itemHighlightedBg + case opaqueItemSeparator + case standardActionText + case destructiveActionText + case disabledActionText + case primaryText + case secondaryText + case controlAccent + case inputBg + case inputHollowBg + case inputBorder + case inputPlaceholder + case inputText + case inputClearButton + case checkContent + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(dimColor: try decodeColor(values, .dim), + backgroundType: try values.decode(PresentationThemeActionSheetBackgroundType.self, forKey: .bgType), + opaqueItemBackgroundColor: try decodeColor(values, .opaqueItemBg), + itemBackgroundColor: try decodeColor(values, .itemBg), + opaqueItemHighlightedBackgroundColor: try decodeColor(values, .opaqueItemHighlightedBg), + itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBg), + opaqueItemSeparatorColor: try decodeColor(values, .opaqueItemSeparator), + standardActionTextColor: try decodeColor(values, .standardActionText), + destructiveActionTextColor: try decodeColor(values, .destructiveActionText), + disabledActionTextColor: try decodeColor(values, .disabledActionText), + primaryTextColor: try decodeColor(values, .primaryText), + secondaryTextColor: try decodeColor(values, .secondaryText), + controlAccentColor: try decodeColor(values, .controlAccent), + inputBackgroundColor: try decodeColor(values, .inputBg), + inputHollowBackgroundColor: try decodeColor(values, .inputHollowBg), + inputBorderColor: try decodeColor(values, .inputBorder), + inputPlaceholderColor: try decodeColor(values, .inputPlaceholder), + inputTextColor: try decodeColor(values, .inputText), + inputClearButtonColor: try decodeColor(values, .inputClearButton), + checkContentColor: try decodeColor(values, .checkContent)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.dimColor, .dim) + try values.encode(self.backgroundType, forKey: .bgType) + try encodeColor(&values, self.opaqueItemBackgroundColor, .opaqueItemBg) + try encodeColor(&values, self.itemBackgroundColor, .itemBg) + try encodeColor(&values, self.opaqueItemHighlightedBackgroundColor, .opaqueItemHighlightedBg) + try encodeColor(&values, self.opaqueItemSeparatorColor, .opaqueItemSeparator) + try encodeColor(&values, self.standardActionTextColor, .standardActionText) + try encodeColor(&values, self.destructiveActionTextColor, .destructiveActionText) + try encodeColor(&values, self.disabledActionTextColor, .disabledActionText) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try encodeColor(&values, self.secondaryTextColor, .secondaryText) + try encodeColor(&values, self.controlAccentColor, .controlAccent) + try encodeColor(&values, self.inputBackgroundColor, .inputBg) + try encodeColor(&values, self.inputHollowBackgroundColor, .inputHollowBg) + try encodeColor(&values, self.inputBorderColor, .inputBorder) + try encodeColor(&values, self.inputPlaceholderColor, .inputPlaceholder) + try encodeColor(&values, self.inputTextColor, .inputText) + try encodeColor(&values, self.inputClearButtonColor, .inputClearButton) + try encodeColor(&values, self.checkContentColor, .checkContent) + } +} + +extension PresentationThemeSwitch: Codable { + enum CodingKeys: String, CodingKey { + case frame + case handle + case content + case positive + case negative + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(frameColor: try decodeColor(values, .frame), + handleColor: try decodeColor(values, .handle), + contentColor: try decodeColor(values, .content), + positiveColor: try decodeColor(values, .positive), + negativeColor: try decodeColor(values, .negative)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.frameColor, .frame) + try encodeColor(&values, self.handleColor, .handle) + try encodeColor(&values, self.contentColor, .content) + try encodeColor(&values, self.positiveColor, .positive) + try encodeColor(&values, self.negativeColor, .negative) + } +} + +extension PresentationThemeFillForeground: Codable { + enum CodingKeys: String, CodingKey { + case bg + case fg + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fillColor: try decodeColor(values, .bg), + foregroundColor: try decodeColor(values, .fg)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fillColor, .bg) + try encodeColor(&values, self.foregroundColor, .fg) + } +} + +extension PresentationThemeItemDisclosureActions: Codable { + enum CodingKeys: String, CodingKey { + case neutral1 + case neutral2 + case destructive + case constructive + case accent + case warning + case inactive + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(neutral1: try values.decode(PresentationThemeFillForeground.self, forKey: .neutral1), + neutral2: try values.decode(PresentationThemeFillForeground.self, forKey: .neutral2), + destructive: try values.decode(PresentationThemeFillForeground.self, forKey: .destructive), + constructive: try values.decode(PresentationThemeFillForeground.self, forKey: .constructive), + accent: try values.decode(PresentationThemeFillForeground.self, forKey: .accent), + warning: try values.decode(PresentationThemeFillForeground.self, forKey: .warning), + inactive: try values.decode(PresentationThemeFillForeground.self, forKey: .inactive)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.neutral1, forKey: .neutral1) + try values.encode(self.neutral2, forKey: .neutral2) + try values.encode(self.destructive, forKey: .destructive) + try values.encode(self.constructive, forKey: .constructive) + try values.encode(self.accent, forKey: .accent) + try values.encode(self.warning, forKey: .warning) + try values.encode(self.inactive, forKey: .inactive) + } +} + +extension PresentationThemeFillStrokeForeground: Codable { + enum CodingKeys: String, CodingKey { + case bg + case stroke + case fg + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fillColor: try decodeColor(values, .bg), + strokeColor: try decodeColor(values, .stroke), + foregroundColor: try decodeColor(values, .fg)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fillColor, .bg) + try encodeColor(&values, self.strokeColor, .stroke) + try encodeColor(&values, self.foregroundColor, .fg) + } +} + +extension PresentationInputFieldTheme: Codable { + enum CodingKeys: String, CodingKey { + case bg + case stroke + case placeholder + case primary + case control + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColor: try decodeColor(values, .bg), + strokeColor: try decodeColor(values, .stroke), + placeholderColor: try decodeColor(values, .placeholder), + primaryColor: try decodeColor(values, .primary), + controlColor: try decodeColor(values, .control)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.backgroundColor, .bg) + try encodeColor(&values, self.strokeColor, .stroke) + try encodeColor(&values, self.placeholderColor, .placeholder) + try encodeColor(&values, self.primaryColor, .primary) + try encodeColor(&values, self.controlColor, .control) + } +} + +extension PresentationThemeList: Codable { + enum CodingKeys: String, CodingKey { + case blocksBg + case plainBg + case primaryText + case secondaryText + case disabledText + case accent + case highlighted + case destructive + case placeholderText + case itemBlocksBg + case itemHighlightedBg + case blocksSeparator + case plainSeparator + case disclosureArrow + case sectionHeaderText + case freeText + case freeTextError + case freeTextSuccess + case freeMonoIcon + case `switch` + case disclosureActions + case check + case controlSecondary + case freeInputField + case mediaPlaceholder + case scrollIndicator + case pageIndicatorInactive + case inputClearButton + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(blocksBackgroundColor: try decodeColor(values, .blocksBg), + plainBackgroundColor: try decodeColor(values, .plainBg), + itemPrimaryTextColor: try decodeColor(values, .primaryText), + itemSecondaryTextColor: try decodeColor(values, .secondaryText), + itemDisabledTextColor: try decodeColor(values, .disabledText), + itemAccentColor: try decodeColor(values, .accent), + itemHighlightedColor: try decodeColor(values, .highlighted), + itemDestructiveColor: try decodeColor(values, .destructive), + itemPlaceholderTextColor: try decodeColor(values, .placeholderText), + itemBlocksBackgroundColor: try decodeColor(values, .itemBlocksBg), + itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBg), + itemBlocksSeparatorColor: try decodeColor(values, .blocksSeparator), + itemPlainSeparatorColor: try decodeColor(values, .plainSeparator), + disclosureArrowColor: try decodeColor(values, .disclosureArrow), + sectionHeaderTextColor: try decodeColor(values, .sectionHeaderText), + freeTextColor: try decodeColor(values, .freeText), + freeTextErrorColor: try decodeColor(values, .freeTextError), + freeTextSuccessColor: try decodeColor(values, .freeTextSuccess), + freeMonoIconColor: try decodeColor(values, .freeMonoIcon), + itemSwitchColors: try values.decode(PresentationThemeSwitch.self, forKey: .switch), + itemDisclosureActions: try values.decode(PresentationThemeItemDisclosureActions.self, forKey: .disclosureActions), + itemCheckColors: try values.decode(PresentationThemeFillStrokeForeground.self, forKey: .check), + controlSecondaryColor: try decodeColor(values, .controlSecondary), + freeInputField: try values.decode(PresentationInputFieldTheme.self, forKey: .freeInputField), + mediaPlaceholderColor: try decodeColor(values, .mediaPlaceholder), + scrollIndicatorColor: try decodeColor(values, .scrollIndicator), + pageIndicatorInactiveColor: try decodeColor(values, .pageIndicatorInactive), + inputClearButtonColor: try decodeColor(values, .inputClearButton)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.blocksBackgroundColor, .blocksBg) + try encodeColor(&values, self.plainBackgroundColor, .plainBg) + try encodeColor(&values, self.itemPrimaryTextColor, .primaryText) + try encodeColor(&values, self.itemSecondaryTextColor, .secondaryText) + try encodeColor(&values, self.itemDisabledTextColor, .disabledText) + try encodeColor(&values, self.itemAccentColor, .accent) + try encodeColor(&values, self.itemHighlightedColor, .highlighted) + try encodeColor(&values, self.itemDestructiveColor, .destructive) + try encodeColor(&values, self.itemPlaceholderTextColor, .placeholderText) + try encodeColor(&values, self.itemBlocksBackgroundColor, .itemBlocksBg) + try encodeColor(&values, self.itemHighlightedBackgroundColor, .itemHighlightedBg) + try encodeColor(&values, self.itemBlocksSeparatorColor, .blocksSeparator) + try encodeColor(&values, self.itemPlainSeparatorColor, .plainSeparator) + try encodeColor(&values, self.disclosureArrowColor, .disclosureArrow) + try encodeColor(&values, self.sectionHeaderTextColor, .sectionHeaderText) + try encodeColor(&values, self.freeTextColor, .freeText) + try encodeColor(&values, self.freeTextErrorColor, .freeTextError) + try encodeColor(&values, self.freeTextSuccessColor, .freeTextSuccess) + try encodeColor(&values, self.freeMonoIconColor, .freeMonoIcon) + try values.encode(self.itemSwitchColors, forKey: .`switch`) + try values.encode(self.itemDisclosureActions, forKey: .disclosureActions) + try values.encode(self.itemCheckColors, forKey: .check) + try encodeColor(&values, self.controlSecondaryColor, .controlSecondary) + try values.encode(self.freeInputField, forKey: .freeInputField) + try encodeColor(&values, self.mediaPlaceholderColor, .mediaPlaceholder) + try encodeColor(&values, self.scrollIndicatorColor, .scrollIndicator) + try encodeColor(&values, self.pageIndicatorInactiveColor, .pageIndicatorInactive) + try encodeColor(&values, self.inputClearButtonColor, .inputClearButton) + } +} + +extension PresentationThemeArchiveAvatarColors: Codable { + enum CodingKeys: String, CodingKey { + case background + case foreground + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColors: try values.decode(PresentationThemeGradientColors.self, forKey: .background), + foregroundColor: try decodeColor(values, .foreground)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.backgroundColors, forKey: .background) + try encodeColor(&values, self.foregroundColor, .foreground) + } +} + +extension PresentationThemeChatList: Codable { + enum CodingKeys: String, CodingKey { + case bg + case itemSeparator + case itemBg + case pinnedItemBg + case itemHighlightedBg + case itemSelectedBg + case title + case secretTitle + case dateText + case authorName + case messageText + case messageDraftText + case checkmark + case pendingIndicator + case failedFill + case failedFg + case muteIcon + case unreadBadgeActiveBg + case unreadBadgeActiveText + case unreadBadgeInactiveBg + case unreadBadgeInactiveText + case pinnedBadge + case pinnedSearchBar + case regularSearchBar + case sectionHeaderBg + case sectionHeaderText + case searchBarKeyboard + case verifiedIconBg + case verifiedIconFg + case secretIcon + case pinnedArchiveAvatar + case unpinnedArchiveAvatar + case onlineDot + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColor: try decodeColor(values, .bg), + itemSeparatorColor: try decodeColor(values, .itemSeparator), + itemBackgroundColor: try decodeColor(values, .itemBg), + pinnedItemBackgroundColor: try decodeColor(values, .pinnedItemBg), + itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBg), + itemSelectedBackgroundColor: try decodeColor(values, .itemSelectedBg), + titleColor: try decodeColor(values, .title), + secretTitleColor: try decodeColor(values, .secretTitle), + dateTextColor: try decodeColor(values, .dateText), + authorNameColor: try decodeColor(values, .authorName), + messageTextColor: try decodeColor(values, .messageText), + messageDraftTextColor: try decodeColor(values, .messageDraftText), + checkmarkColor: try decodeColor(values, .checkmark), + pendingIndicatorColor: try decodeColor(values, .pendingIndicator), + failedFillColor: try decodeColor(values, .failedFill), + failedForegroundColor: try decodeColor(values, .failedFg), + muteIconColor: try decodeColor(values, .muteIcon), + unreadBadgeActiveBackgroundColor: try decodeColor(values, .unreadBadgeActiveBg), + unreadBadgeActiveTextColor: try decodeColor(values, .unreadBadgeActiveText), + unreadBadgeInactiveBackgroundColor: try decodeColor(values, .unreadBadgeInactiveBg), + unreadBadgeInactiveTextColor: try decodeColor(values, .unreadBadgeInactiveText), + pinnedBadgeColor: try decodeColor(values, .pinnedBadge), + pinnedSearchBarColor: try decodeColor(values, .pinnedSearchBar), + regularSearchBarColor: try decodeColor(values, .regularSearchBar), + sectionHeaderFillColor: try decodeColor(values, .sectionHeaderBg), + sectionHeaderTextColor: try decodeColor(values, .sectionHeaderText), + searchBarKeyboardColor: try values.decode(PresentationThemeKeyboardColor.self, forKey: .searchBarKeyboard), + verifiedIconFillColor: try decodeColor(values, .verifiedIconBg), + verifiedIconForegroundColor: try decodeColor(values, .verifiedIconFg), + secretIconColor: try decodeColor(values, .secretIcon), + pinnedArchiveAvatarColor: try values.decode(PresentationThemeArchiveAvatarColors.self, forKey: .pinnedArchiveAvatar), + unpinnedArchiveAvatarColor: try values.decode(PresentationThemeArchiveAvatarColors.self, forKey: .unpinnedArchiveAvatar), + onlineDotColor: try decodeColor(values, .onlineDot)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.backgroundColor, .bg) + try encodeColor(&values, self.itemSeparatorColor, .itemSeparator) + try encodeColor(&values, self.itemBackgroundColor, .itemBg) + try encodeColor(&values, self.pinnedItemBackgroundColor, .pinnedItemBg) + try encodeColor(&values, self.itemHighlightedBackgroundColor, .itemHighlightedBg) + try encodeColor(&values, self.itemSelectedBackgroundColor, .itemSelectedBg) + try encodeColor(&values, self.titleColor, .title) + try encodeColor(&values, self.secretTitleColor, .secretTitle) + try encodeColor(&values, self.dateTextColor, .dateText) + try encodeColor(&values, self.authorNameColor, .authorName) + try encodeColor(&values, self.messageTextColor, .messageText) + try encodeColor(&values, self.messageDraftTextColor, .messageDraftText) + try encodeColor(&values, self.checkmarkColor, .checkmark) + try encodeColor(&values, self.pendingIndicatorColor, .pendingIndicator) + try encodeColor(&values, self.failedFillColor, .failedFill) + try encodeColor(&values, self.failedForegroundColor, .failedFg) + try encodeColor(&values, self.muteIconColor, .muteIcon) + try encodeColor(&values, self.unreadBadgeActiveBackgroundColor, .unreadBadgeActiveBg) + try encodeColor(&values, self.unreadBadgeActiveTextColor, .unreadBadgeActiveText) + try encodeColor(&values, self.unreadBadgeInactiveBackgroundColor, .unreadBadgeInactiveBg) + try encodeColor(&values, self.unreadBadgeInactiveTextColor, .unreadBadgeInactiveText) + try encodeColor(&values, self.pinnedBadgeColor, .pinnedBadge) + try encodeColor(&values, self.pinnedSearchBarColor, .pinnedSearchBar) + try encodeColor(&values, self.regularSearchBarColor, .regularSearchBar) + try encodeColor(&values, self.sectionHeaderFillColor, .sectionHeaderBg) + try encodeColor(&values, self.sectionHeaderTextColor, .sectionHeaderText) + try values.encode(self.searchBarKeyboardColor, forKey: .searchBarKeyboard) + try encodeColor(&values, self.verifiedIconFillColor, .verifiedIconBg) + try encodeColor(&values, self.verifiedIconForegroundColor, .verifiedIconFg) + try encodeColor(&values, self.secretIconColor, .secretIcon) + try values.encode(self.pinnedArchiveAvatarColor, forKey: .pinnedArchiveAvatar) + try values.encode(self.unpinnedArchiveAvatarColor, forKey: .unpinnedArchiveAvatar) + try encodeColor(&values, self.onlineDotColor, .onlineDot) + } +} + +extension PresentationThemeBubbleColorComponents: Codable { + enum CodingKeys: String, CodingKey { + case bg + case highlightedBg + case stroke + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fill: try decodeColor(values, .bg), + highlightedFill: try decodeColor(values, .highlightedBg), + stroke: try decodeColor(values, .stroke)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fill, .bg) + try encodeColor(&values, self.highlightedFill, .highlightedBg) + try encodeColor(&values, self.stroke, .stroke) + } +} + +extension PresentationThemeBubbleColor: Codable { + enum CodingKeys: String, CodingKey { + case withWp + case withoutWp + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(withWallpaper: try values.decode(PresentationThemeBubbleColorComponents.self, forKey: .withWp), + withoutWallpaper: try values.decode(PresentationThemeBubbleColorComponents.self, forKey: .withoutWp)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.withWallpaper, forKey: .withWp) + try values.encode(self.withoutWallpaper, forKey: .withoutWp) + } +} + +extension PresentationThemeVariableColor: Codable { + enum CodingKeys: String, CodingKey { + case withWp + case withoutWp + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(withWallpaper: try decodeColor(values, .withWp), + withoutWallpaper: try decodeColor(values, .withoutWp)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.withWallpaper, .withWp) + try encodeColor(&values, self.withoutWallpaper, .withoutWp) + } +} + +extension PresentationThemeChatBubblePolls: Codable { + enum CodingKeys: String, CodingKey { + case radioButton + case radioProgress + case highlight + case separator + case bar + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(radioButton: try decodeColor(values, .radioButton), + radioProgress: try decodeColor(values, .radioProgress), + highlight: try decodeColor(values, .highlight), + separator: try decodeColor(values, .separator), + bar: try decodeColor(values, .bar)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.radioButton, .radioButton) + try encodeColor(&values, self.radioProgress, .radioProgress) + try encodeColor(&values, self.highlight, .highlight) + try encodeColor(&values, self.separator, .separator) + try encodeColor(&values, self.bar, .bar) + } +} + +extension PresentationThemePartedColors: Codable { + enum CodingKeys: String, CodingKey { + case bubble + case primaryText + case secondaryText + case linkText + case linkHighlight + case scam + case textHighlight + case accentText + case accentControl + case mediaActiveControl + case mediaInactiveControl + case pendingActivity + case fileTitle + case fileDescription + case fileDuration + case mediaPlaceholder + case polls + case actionButtonsBg + case actionButtonsStroke + case actionButtonsText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(bubble: try values.decode(PresentationThemeBubbleColor.self, forKey: .bubble), + primaryTextColor: try decodeColor(values, .primaryText), + secondaryTextColor: try decodeColor(values, .secondaryText), + linkTextColor: try decodeColor(values, .linkText), + linkHighlightColor: try decodeColor(values, .linkHighlight), + scamColor: try decodeColor(values, .scam), + textHighlightColor: try decodeColor(values, .textHighlight), + accentTextColor: try decodeColor(values, .accentText), + accentControlColor: try decodeColor(values, .accentControl), + mediaActiveControlColor: try decodeColor(values, .mediaActiveControl), + mediaInactiveControlColor: try decodeColor(values, .mediaInactiveControl), + pendingActivityColor: try decodeColor(values, .pendingActivity), + fileTitleColor: try decodeColor(values, .fileTitle), + fileDescriptionColor: try decodeColor(values, .fileDescription), + fileDurationColor: try decodeColor(values, .fileDuration), + mediaPlaceholderColor: try decodeColor(values, .mediaPlaceholder), + polls: try values.decode(PresentationThemeChatBubblePolls.self, forKey: .polls), + actionButtonsFillColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsBg), + actionButtonsStrokeColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsStroke), + actionButtonsTextColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsText)) + } + + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.bubble, forKey: .bubble) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try encodeColor(&values, self.secondaryTextColor, .secondaryText) + try encodeColor(&values, self.linkTextColor, .linkText) + try encodeColor(&values, self.linkHighlightColor, .linkHighlight) + try encodeColor(&values, self.scamColor, .scam) + try encodeColor(&values, self.textHighlightColor, .textHighlight) + try encodeColor(&values, self.accentTextColor, .accentText) + try encodeColor(&values, self.accentControlColor, .accentControl) + try encodeColor(&values, self.mediaActiveControlColor, .mediaActiveControl) + try encodeColor(&values, self.mediaInactiveControlColor, .mediaInactiveControl) + try encodeColor(&values, self.pendingActivityColor, .pendingActivity) + try encodeColor(&values, self.fileTitleColor, .fileTitle) + try encodeColor(&values, self.fileDescriptionColor, .fileDescription) + try encodeColor(&values, self.fileDurationColor, .fileDuration) + try encodeColor(&values, self.mediaPlaceholderColor, .mediaPlaceholder) + try values.encode(self.polls, forKey: .polls) + try values.encode(self.actionButtonsFillColor, forKey: .actionButtonsBg) + try values.encode(self.actionButtonsStrokeColor, forKey: .actionButtonsStroke) + try values.encode(self.actionButtonsTextColor, forKey: .actionButtonsText) + } +} + +extension PresentationThemeChatMessage: Codable { + enum CodingKeys: String, CodingKey { + case incoming + case outgoing + case freeform + case infoPrimaryText + case infoLinkText + case outgoingCheck + case mediaDateAndStatusBg + case mediaDateAndStatusText + case shareButtonBg + case shareButtonStroke + case shareButtonFg + case mediaOverlayControl + case selectionControl + case deliveryFailed + case mediaHighlightOverlay + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(incoming: try values.decode(PresentationThemePartedColors.self, forKey: .incoming), + outgoing: try values.decode(PresentationThemePartedColors.self, forKey: .outgoing), + freeform: try values.decode(PresentationThemeBubbleColor.self, forKey: .freeform), + infoPrimaryTextColor: try decodeColor(values, .infoPrimaryText), + infoLinkTextColor: try decodeColor(values, .infoLinkText), + outgoingCheckColor: try decodeColor(values, .outgoingCheck), + mediaDateAndStatusFillColor: try decodeColor(values, .mediaDateAndStatusBg), + mediaDateAndStatusTextColor: try decodeColor(values, .mediaDateAndStatusText), + shareButtonFillColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonBg), + shareButtonStrokeColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonStroke), + shareButtonForegroundColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonFg), + mediaOverlayControlColors: try values.decode(PresentationThemeFillForeground.self, forKey: .mediaOverlayControl), + selectionControlColors: try values.decode(PresentationThemeFillStrokeForeground.self, forKey: .selectionControl), + deliveryFailedColors: try values.decode(PresentationThemeFillForeground.self, forKey: .deliveryFailed), + mediaHighlightOverlayColor: try decodeColor(values, .mediaHighlightOverlay)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.incoming, forKey: .incoming) + try values.encode(self.outgoing, forKey: .outgoing) + try values.encode(self.freeform, forKey: .freeform) + try encodeColor(&values, self.infoPrimaryTextColor, .infoPrimaryText) + try encodeColor(&values, self.infoLinkTextColor, .infoLinkText) + try encodeColor(&values, self.outgoingCheckColor, .outgoingCheck) + try encodeColor(&values, self.mediaDateAndStatusFillColor, .mediaDateAndStatusBg) + try encodeColor(&values, self.mediaDateAndStatusTextColor, .mediaDateAndStatusText) + try values.encode(self.shareButtonFillColor, forKey: .shareButtonBg) + try values.encode(self.shareButtonStrokeColor, forKey: .shareButtonStroke) + try values.encode(self.shareButtonForegroundColor, forKey: .shareButtonFg) + try values.encode(self.mediaOverlayControlColors, forKey: .mediaOverlayControl) + try values.encode(self.selectionControlColors, forKey: .selectionControl) + try values.encode(self.deliveryFailedColors, forKey: .deliveryFailed) + try encodeColor(&values, self.mediaHighlightOverlayColor, .mediaHighlightOverlay) + } +} + +extension PresentationThemeServiceMessageColorComponents: Codable { + enum CodingKeys: String, CodingKey { + case bg + case primaryText + case linkHighlight + case scam + case dateFillStatic + case dateFillFloat + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fill: try decodeColor(values, .bg), + primaryText: try decodeColor(values, .primaryText), + linkHighlight: try decodeColor(values, .linkHighlight), + scam: try decodeColor(values, .scam), + dateFillStatic: try decodeColor(values, .dateFillStatic), + dateFillFloating: try decodeColor(values, .dateFillFloat)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fill, .bg) + try encodeColor(&values, self.primaryText, .primaryText) + try encodeColor(&values, self.linkHighlight, .linkHighlight) + try encodeColor(&values, self.scam, .scam) + try encodeColor(&values, self.dateFillStatic, .dateFillStatic) + try encodeColor(&values, self.dateFillFloating, .dateFillFloat) + } +} + +extension PresentationThemeServiceMessageColor: Codable { + enum CodingKeys: String, CodingKey { + case withDefaultWp + case withCustomWp + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(withDefaultWallpaper: try values.decode(PresentationThemeServiceMessageColorComponents.self, forKey: .withDefaultWp), + withCustomWallpaper: try values.decode(PresentationThemeServiceMessageColorComponents.self, forKey: .withCustomWp)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.withDefaultWallpaper, forKey: .withDefaultWp) + try values.encode(self.withCustomWallpaper, forKey: .withCustomWp) + } +} + +extension PresentationThemeServiceMessage: Codable { + enum CodingKeys: String, CodingKey { + case components + case unreadBarBg + case unreadBarStroke + case unreadBarText + case dateText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(components: try values.decode(PresentationThemeServiceMessageColor.self, forKey: .components), + unreadBarFillColor: try decodeColor(values, .unreadBarBg), + unreadBarStrokeColor: try decodeColor(values, .unreadBarStroke), + unreadBarTextColor: try decodeColor(values, .unreadBarText), + dateTextColor: try values.decode(PresentationThemeVariableColor.self, forKey: .dateText)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.components, forKey: .components) + try encodeColor(&values, self.unreadBarFillColor, .unreadBarBg) + try encodeColor(&values, self.unreadBarStrokeColor, .unreadBarStroke) + try encodeColor(&values, self.unreadBarTextColor, .unreadBarText) + try values.encode(self.dateTextColor, forKey: .dateText) + } +} + +extension PresentationThemeChatInputPanelMediaRecordingControl: Codable { + enum CodingKeys: String, CodingKey { + case button + case micLevel + case activeIcon + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(buttonColor: try decodeColor(values, .button), + micLevelColor: try decodeColor(values, .micLevel), + activeIconColor: try decodeColor(values, .activeIcon)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.buttonColor, .button) + try encodeColor(&values, self.micLevelColor, .micLevel) + try encodeColor(&values, self.activeIconColor, .activeIcon) + } +} + +extension PresentationThemeChatInputPanel: Codable { + enum CodingKeys: String, CodingKey { + case panelBg + case panelSeparator + case panelControlAccent + case panelControl + case panelControlDisabled + case panelControlDestructive + case inputBg + case inputStroke + case inputPlaceholder + case inputText + case inputControl + case actionControlBg + case actionControlFg + case primaryText + case secondaryText + case mediaRecordDot + case keyboard + case mediaRecordControl + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(panelBackgroundColor: try decodeColor(values, .panelBg), + panelSeparatorColor: try decodeColor(values, .panelSeparator), + panelControlAccentColor: try decodeColor(values, .panelControlAccent), + panelControlColor: try decodeColor(values, .panelControl), + panelControlDisabledColor: try decodeColor(values, .panelControlDisabled), + panelControlDestructiveColor: try decodeColor(values, .panelControlDestructive), + inputBackgroundColor: try decodeColor(values, .inputBg), + inputStrokeColor: try decodeColor(values, .inputStroke), + inputPlaceholderColor: try decodeColor(values, .inputPlaceholder), + inputTextColor: try decodeColor(values, .inputText), + inputControlColor: try decodeColor(values, .inputControl), + actionControlFillColor: try decodeColor(values, .actionControlBg), + actionControlForegroundColor: try decodeColor(values, .actionControlFg), + primaryTextColor: try decodeColor(values, .primaryText), + secondaryTextColor: try decodeColor(values, .secondaryText), + mediaRecordingDotColor: try decodeColor(values, .mediaRecordDot), + keyboardColor: try values.decode(PresentationThemeKeyboardColor.self, forKey: .keyboard), + mediaRecordingControl: try values.decode(PresentationThemeChatInputPanelMediaRecordingControl.self, forKey: .mediaRecordControl)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.panelBackgroundColor, .panelBg) + try encodeColor(&values, self.panelSeparatorColor, .panelSeparator) + try encodeColor(&values, self.panelControlAccentColor, .panelControlAccent) + try encodeColor(&values, self.panelControlColor, .panelControl) + try encodeColor(&values, self.panelControlDisabledColor, .panelControlDisabled) + try encodeColor(&values, self.panelControlDestructiveColor, .panelControlDestructive) + try encodeColor(&values, self.inputBackgroundColor, .inputBg) + try encodeColor(&values, self.inputStrokeColor, .inputStroke) + try encodeColor(&values, self.inputPlaceholderColor, .inputPlaceholder) + try encodeColor(&values, self.inputTextColor, .inputText) + try encodeColor(&values, self.inputControlColor, .inputControl) + try encodeColor(&values, self.actionControlFillColor, .actionControlBg) + try encodeColor(&values, self.actionControlForegroundColor, .actionControlFg) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try encodeColor(&values, self.secondaryTextColor, .secondaryText) + try encodeColor(&values, self.mediaRecordingDotColor, .mediaRecordDot) + try values.encode(self.keyboardColor, forKey: .keyboard) + try values.encode(self.mediaRecordingControl, forKey: .mediaRecordControl) + } +} + +extension PresentationThemeInputMediaPanel: Codable { + enum CodingKeys: String, CodingKey { + case panelSeparator + case panelIcon + case panelHighlightedIconBg + case stickersBg + case stickersSectionText + case stickersSearchBg + case stickersSearchPlaceholder + case stickersSearchPrimary + case stickersSearchControl + case gifsBg + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(panelSeparatorColor: try decodeColor(values, .panelSeparator), + panelIconColor: try decodeColor(values, .panelIcon), + panelHighlightedIconBackgroundColor: try decodeColor(values, .panelHighlightedIconBg), + stickersBackgroundColor: try decodeColor(values, .stickersBg), + stickersSectionTextColor: try decodeColor(values, .stickersSectionText), + stickersSearchBackgroundColor: try decodeColor(values, .stickersSearchBg), + stickersSearchPlaceholderColor: try decodeColor(values, .stickersSearchPlaceholder), + stickersSearchPrimaryColor: try decodeColor(values, .stickersSearchPrimary), + stickersSearchControlColor: try decodeColor(values, .stickersSearchControl), + gifsBackgroundColor: try decodeColor(values, .gifsBg)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.panelSeparatorColor, .panelSeparator) + try encodeColor(&values, self.panelIconColor, .panelIcon) + try encodeColor(&values, self.panelHighlightedIconBackgroundColor, .panelHighlightedIconBg) + try encodeColor(&values, self.stickersBackgroundColor, .stickersBg) + try encodeColor(&values, self.stickersSectionTextColor, .stickersSectionText) + try encodeColor(&values, self.stickersSearchBackgroundColor, .stickersSearchBg) + try encodeColor(&values, self.stickersSearchPlaceholderColor, .stickersSearchPlaceholder) + try encodeColor(&values, self.stickersSearchPrimaryColor, .stickersSearchPrimary) + try encodeColor(&values, self.stickersSearchControlColor, .stickersSearchControl) + try encodeColor(&values, self.gifsBackgroundColor, .gifsBg) + } +} + +extension PresentationThemeInputButtonPanel: Codable { + enum CodingKeys: String, CodingKey { + case panelBg + case panelSeparator + case buttonBg + case buttonStroke + case buttonHighlightedBg + case buttonHighlightedStroke + case buttonText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(panelSeparatorColor: try decodeColor(values, .panelSeparator), + panelBackgroundColor: try decodeColor(values, .panelBg), + buttonFillColor: try decodeColor(values, .buttonBg), + buttonStrokeColor: try decodeColor(values, .buttonStroke), + buttonHighlightedFillColor: try decodeColor(values, .buttonHighlightedBg), + buttonHighlightedStrokeColor: try decodeColor(values, .buttonHighlightedStroke), + buttonTextColor: try decodeColor(values, .buttonText)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.panelBackgroundColor, .panelBg) + try encodeColor(&values, self.panelSeparatorColor, .panelSeparator) + try encodeColor(&values, self.buttonFillColor, .buttonBg) + try encodeColor(&values, self.buttonStrokeColor, .buttonStroke) + try encodeColor(&values, self.buttonHighlightedFillColor, .buttonHighlightedBg) + try encodeColor(&values, self.buttonHighlightedStrokeColor, .buttonHighlightedStroke) + try encodeColor(&values, self.buttonTextColor, .buttonText) + } +} + +extension PresentationThemeChatHistoryNavigation: Codable { + enum CodingKeys: String, CodingKey { + case bg + case stroke + case fg + case badgeBg + case badgeStroke + case badgeText + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fillColor: try decodeColor(values, .bg), + strokeColor: try decodeColor(values, .stroke), + foregroundColor: try decodeColor(values, .fg), + badgeBackgroundColor: try decodeColor(values, .badgeBg), + badgeStrokeColor: try decodeColor(values, .badgeStroke), + badgeTextColor: try decodeColor(values, .badgeText)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fillColor, .bg) + try encodeColor(&values, self.strokeColor, .stroke) + try encodeColor(&values, self.foregroundColor, .fg) + try encodeColor(&values, self.badgeBackgroundColor, .badgeBg) + try encodeColor(&values, self.badgeStrokeColor, .badgeStroke) + try encodeColor(&values, self.badgeTextColor, .badgeText) + } +} + +extension PresentationThemeChat: Codable { + enum CodingKeys: String, CodingKey { + case message + case serviceMessage + case inputPanel + case inputMediaPanel + case inputButtonPanel + case historyNav + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(message: try values.decode(PresentationThemeChatMessage.self, forKey: .message), + serviceMessage: try values.decode(PresentationThemeServiceMessage.self, forKey: .serviceMessage), + inputPanel: try values.decode(PresentationThemeChatInputPanel.self, forKey: .inputPanel), + inputMediaPanel: try values.decode(PresentationThemeInputMediaPanel.self, forKey: .inputMediaPanel), + inputButtonPanel: try values.decode(PresentationThemeInputButtonPanel.self, forKey: .inputButtonPanel), + historyNavigation: try values.decode(PresentationThemeChatHistoryNavigation.self, forKey: .historyNav)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.message, forKey: .message) + try values.encode(self.serviceMessage, forKey: .serviceMessage) + try values.encode(self.inputPanel, forKey: .inputPanel) + try values.encode(self.inputMediaPanel, forKey: .inputMediaPanel) + try values.encode(self.inputButtonPanel, forKey: .inputButtonPanel) + try values.encode(self.historyNavigation, forKey: .historyNav) + } +} + +extension PresentationThemeExpandedNotificationNavigationBar: Codable { + enum CodingKeys: String, CodingKey { + case background + case primaryText + case control + case separator + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundColor: try decodeColor(values, .background), + primaryTextColor: try decodeColor(values, .primaryText), + controlColor: try decodeColor(values, .control), + separatorColor: try decodeColor(values, .separator)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.backgroundColor, .background) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try encodeColor(&values, self.controlColor, .control) + try encodeColor(&values, self.separatorColor, .separator) + } +} + +extension PresentationThemeExpandedNotification: Codable { + enum CodingKeys: String, CodingKey { + case bgType + case navBar + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(backgroundType: try values.decode(PresentationThemeExpandedNotificationBackgroundType.self, forKey: .bgType), + navigationBar: try values.decode(PresentationThemeExpandedNotificationNavigationBar.self, forKey: .navBar)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try values.encode(self.backgroundType, forKey: .bgType) + try values.encode(self.navigationBar, forKey: .navBar) + } +} + +extension PresentationThemeInAppNotification: Codable { + enum CodingKeys: String, CodingKey { + case bg + case primaryText + case expanded + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(fillColor: try decodeColor(values, .bg), + primaryTextColor: try decodeColor(values, .primaryText), + expandedNotification: try values.decode(PresentationThemeExpandedNotification.self, forKey: .expanded)) + } + + public func encode(to encoder: Encoder) throws { + var values = encoder.container(keyedBy: CodingKeys.self) + try encodeColor(&values, self.fillColor, .bg) + try encodeColor(&values, self.primaryTextColor, .primaryText) + try values.encode(self.expandedNotification, forKey: .expanded) + } +} + +extension PresentationThemeName: Codable { + public init(from decoder: Decoder) throws { + let value = try decoder.singleValueContainer() + self = .custom(try value.decode(String.self)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .builtin(name): + switch name { + case .day: + try container.encode("Day") + case .dayClassic: + try container.encode("Classic") + case .nightAccent: + try container.encode("Night Tinted") + case .nightGrayscale: + try container.encode("Night") + } + case let .custom(name): + try container.encode(name) + } + } +} + +extension PresentationTheme: Codable { + enum CodingKeys: String, CodingKey { + case name + case author + case dark + case intro + case passcode + case root + case list + case chatList + case chat + case actionSheet + case notification + } + + public convenience init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + self.init(name: try values.decode(PresentationThemeName.self, forKey: .name), + author: (try? values.decode(String.self, forKey: .author)) ?? nil, + overallDarkAppearance: (try? values.decode(Bool.self, forKey: .dark)) ?? false, + intro: try values.decode(PresentationThemeIntro.self, forKey: .intro), + passcode: try values.decode(PresentationThemePasscode.self, forKey: .passcode), + rootController: try values.decode(PresentationThemeRootController.self, forKey: .root), + list: try values.decode(PresentationThemeList.self, forKey: .list), + chatList: try values.decode(PresentationThemeChatList.self, forKey: .chatList), + chat: try values.decode(PresentationThemeChat.self, forKey: .chat), + actionSheet: try values.decode(PresentationThemeActionSheet.self, forKey: .actionSheet), + inAppNotification: try values.decode(PresentationThemeInAppNotification.self, forKey: .notification)) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(self.name, forKey: .name) + try container.encode(self.author, forKey: .author) + try container.encode(self.overallDarkAppearance, forKey: .dark) + try container.encode(self.intro, forKey: .intro) + try container.encode(self.passcode, forKey: .passcode) + try container.encode(self.rootController, forKey: .root) + try container.encode(self.list, forKey: .list) + try container.encode(self.chatList, forKey: .chatList) + try container.encode(self.chat, forKey: .chat) + try container.encode(self.actionSheet, forKey: .actionSheet) + try container.encode(self.inAppNotification, forKey: .notification) + } +} diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeDecodable.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeDecodable.swift deleted file mode 100644 index b11222eab2..0000000000 --- a/submodules/TelegramPresentationData/Sources/PresentationThemeDecodable.swift +++ /dev/null @@ -1,881 +0,0 @@ -import Foundation -import UIKit - -private func decodeColor(_ values: KeyedDecodingContainer, _ key: Key) throws -> UIColor { - return UIColor(rgb: try values.decode(UInt32.self, forKey: key)) -} - -extension PresentationThemeGradientColors: Decodable { - enum CodingKeys: String, CodingKey { - case topColor - case bottomColor - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(topColor: try decodeColor(values, .topColor), - bottomColor: try decodeColor(values, .bottomColor)) - } -} - -extension PresentationThemeAuth: Decodable { - enum CodingKeys: String, CodingKey { - case introStartButton - case introDot - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(introStartButtonColor: try decodeColor(values, .introStartButton), - introDotColor: try decodeColor(values, .introDot)) - } -} - -extension PresentationThemePasscode: Decodable { - enum CodingKeys: String, CodingKey { - case background - case button - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColors: try values.decode(PresentationThemeGradientColors.self, forKey: .background), - buttonColor: try decodeColor(values, .button)) - } -} - -extension PresentationThemeRootTabBar: Decodable { - enum CodingKeys: String, CodingKey { - case background - case separator - case icon - case selectedIcon - case text - case selectedText - case badgeBackground - case badgeStroke - case badgeText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColor: try decodeColor(values, .background), - separatorColor: try decodeColor(values, .separator), - iconColor: try decodeColor(values, .icon), - selectedIconColor: try decodeColor(values, .selectedIcon), - textColor: try decodeColor(values, .text), - selectedTextColor: try decodeColor(values, .selectedText), - badgeBackgroundColor: try decodeColor(values, .badgeBackground), - badgeStrokeColor: try decodeColor(values, .badgeStroke), - badgeTextColor: try decodeColor(values, .badgeText)) - } -} - -extension PresentationThemeRootNavigationBar: Decodable { - enum CodingKeys: String, CodingKey { - case button - case disabledButton - case primaryText - case secondaryText - case control - case accentText - case background - case separator - case badgeBackground - case badgeStroke - case badgeText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(buttonColor: try decodeColor(values, .button), - disabledButtonColor: try decodeColor(values, .disabledButton), - primaryTextColor: try decodeColor(values, .primaryText), - secondaryTextColor: try decodeColor(values, .secondaryText), - controlColor: try decodeColor(values, .control), - accentTextColor: try decodeColor(values, .accentText), - backgroundColor: try decodeColor(values, .background), - separatorColor: try decodeColor(values, .separator), - badgeBackgroundColor: try decodeColor(values, .badgeBackground), - badgeStrokeColor: try decodeColor(values, .badgeStroke), - badgeTextColor: try decodeColor(values, .badgeText)) - } -} - -extension PresentationThemeNavigationSearchBar: Decodable { - enum CodingKeys: String, CodingKey { - case background - case accent - case inputFill - case inputText - case inputPlaceholderText - case inputIcon - case inputClearButton - case separator - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColor: try decodeColor(values, .background), - accentColor: try decodeColor(values, .accent), - inputFillColor: try decodeColor(values, .inputFill), - inputTextColor: try decodeColor(values, .inputText), - inputPlaceholderTextColor: try decodeColor(values, .inputPlaceholderText), - inputIconColor: try decodeColor(values, .inputIcon), - inputClearButtonColor: try decodeColor(values, .inputClearButton), - separatorColor: try decodeColor(values, .separator)) - } -} - -extension PresentationThemeRootController: Decodable { - enum CodingKeys: String, CodingKey { - case statusBarStyle - case tabBar - case navigationBar - case navigationSearchBar - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(statusBarStyle: try values.decode(PresentationThemeStatusBarStyle.self, forKey: .statusBarStyle), - tabBar: try values.decode(PresentationThemeRootTabBar.self, forKey: .tabBar), - navigationBar: try values.decode(PresentationThemeRootNavigationBar.self, forKey: .navigationBar), - navigationSearchBar: try values.decode(PresentationThemeNavigationSearchBar.self, forKey: .navigationSearchBar)) - } -} - -extension PresentationThemeActionSheet: Decodable { - enum CodingKeys: String, CodingKey { - case dim - case backgroundType - case opaqueItemBackground - case itemBackground - case opaqueItemHighlightedBackground - case itemHighlightedBackground - case opaqueItemSeparator - case standardActionText - case destructiveActionText - case disabledActionText - case primaryText - case secondaryText - case controlAccent - case inputBackground - case inputHollowBackground - case inputBorder - case inputPlaceholder - case inputText - case inputClearButton - case checkContent - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(dimColor: try decodeColor(values, .dim), - backgroundType: try values.decode(PresentationThemeActionSheetBackgroundType.self, forKey: .backgroundType), - opaqueItemBackgroundColor: try decodeColor(values, .opaqueItemBackground), - itemBackgroundColor: try decodeColor(values, .itemBackground), - opaqueItemHighlightedBackgroundColor: try decodeColor(values, .opaqueItemHighlightedBackground), - itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBackground), - opaqueItemSeparatorColor: try decodeColor(values, .opaqueItemSeparator), - standardActionTextColor: try decodeColor(values, .standardActionText), - destructiveActionTextColor: try decodeColor(values, .destructiveActionText), - disabledActionTextColor: try decodeColor(values, .disabledActionText), - primaryTextColor: try decodeColor(values, .primaryText), - secondaryTextColor: try decodeColor(values, .secondaryText), - controlAccentColor: try decodeColor(values, .controlAccent), - inputBackgroundColor: try decodeColor(values, .inputBackground), - inputHollowBackgroundColor: try decodeColor(values, .inputHollowBackground), - inputBorderColor: try decodeColor(values, .inputBorder), - inputPlaceholderColor: try decodeColor(values, .inputPlaceholder), - inputTextColor: try decodeColor(values, .inputText), - inputClearButtonColor: try decodeColor(values, .inputClearButton), - checkContentColor: try decodeColor(values, .checkContent)) - } -} - -extension PresentationThemeSwitch: Decodable { - enum CodingKeys: String, CodingKey { - case frame - case handle - case content - case positive - case negative - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(frameColor: try decodeColor(values, .frame), - handleColor: try decodeColor(values, .handle), - contentColor: try decodeColor(values, .content), - positiveColor: try decodeColor(values, .positive), - negativeColor: try decodeColor(values, .negative)) - } -} - -extension PresentationThemeFillForeground: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case foreground - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fillColor: try decodeColor(values, .fill), - foregroundColor: try decodeColor(values, .foreground)) - } -} - -extension PresentationThemeItemDisclosureActions: Decodable { - enum CodingKeys: String, CodingKey { - case neutral1 - case neutral2 - case destructive - case constructive - case accent - case warning - case inactive - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(neutral1: try values.decode(PresentationThemeFillForeground.self, forKey: .neutral1), - neutral2: try values.decode(PresentationThemeFillForeground.self, forKey: .neutral2), - destructive: try values.decode(PresentationThemeFillForeground.self, forKey: .destructive), - constructive: try values.decode(PresentationThemeFillForeground.self, forKey: .constructive), - accent: try values.decode(PresentationThemeFillForeground.self, forKey: .accent), - warning: try values.decode(PresentationThemeFillForeground.self, forKey: .warning), - inactive: try values.decode(PresentationThemeFillForeground.self, forKey: .inactive)) - } -} - -extension PresentationThemeFillStrokeForeground: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case stroke - case foreground - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fillColor: try decodeColor(values, .fill), - strokeColor: try decodeColor(values, .stroke), - foregroundColor: try decodeColor(values, .foreground)) - } -} - -extension PresentationInputFieldTheme: Decodable { - enum CodingKeys: String, CodingKey { - case background - case placeholder - case primary - case control - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColor: try decodeColor(values, .background), - placeholderColor: try decodeColor(values, .placeholder), - primaryColor: try decodeColor(values, .primary), - controlColor: try decodeColor(values, .control)) - } -} - -extension PresentationThemeList: Decodable { - enum CodingKeys: String, CodingKey { - case blocksBackground - case plainBackground - case itemPrimaryText - case itemSecondaryText - case itemDisabledText - case itemAccent - case itemHighlighted - case itemDestructive - case itemPlaceholderText - case itemBlocksBackground - case itemHighlightedBackground - case itemBlocksSeparator - case itemPlainSeparator - case disclosureArrow - case sectionHeaderText - case freeText - case freeTextError - case freeTextSuccess - case freeMonoIcon - case itemSwitch - case itemDisclosureActions - case itemCheck - case controlSecondary - case freeInputField - case mediaPlaceholder - case scrollIndicator - case pageIndicatorInactive - case inputClearButton - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - - self.init(blocksBackgroundColor: try decodeColor(values, .blocksBackground), - plainBackgroundColor: try decodeColor(values, .plainBackground), - itemPrimaryTextColor: try decodeColor(values, .itemPrimaryText), - itemSecondaryTextColor: try decodeColor(values, .itemSecondaryText), - itemDisabledTextColor: try decodeColor(values, .itemDisabledText), - itemAccentColor: try decodeColor(values, .itemAccent), - itemHighlightedColor: try decodeColor(values, .itemHighlighted), - itemDestructiveColor: try decodeColor(values, .itemDestructive), - itemPlaceholderTextColor: try decodeColor(values, .itemPlaceholderText), - itemBlocksBackgroundColor: try decodeColor(values, .itemBlocksBackground), - itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBackground), - itemBlocksSeparatorColor: try decodeColor(values, .itemBlocksSeparator), - itemPlainSeparatorColor: try decodeColor(values, .itemPlainSeparator), - disclosureArrowColor: try decodeColor(values, .disclosureArrow), - sectionHeaderTextColor: try decodeColor(values, .sectionHeaderText), - freeTextColor: try decodeColor(values, .freeText), - freeTextErrorColor: try decodeColor(values, .freeTextError), - freeTextSuccessColor: try decodeColor(values, .freeTextSuccess), - freeMonoIconColor: try decodeColor(values, .freeMonoIcon), - itemSwitchColors: try values.decode(PresentationThemeSwitch.self, forKey: .itemSwitch), - itemDisclosureActions: try values.decode(PresentationThemeItemDisclosureActions.self, forKey: .itemDisclosureActions), - itemCheckColors: try values.decode(PresentationThemeFillStrokeForeground.self, forKey: .itemCheck), - controlSecondaryColor: try decodeColor(values, .controlSecondary), - freeInputField: try values.decode(PresentationInputFieldTheme.self, forKey: .freeInputField), - mediaPlaceholderColor: try decodeColor(values, .mediaPlaceholder), - scrollIndicatorColor: try decodeColor(values, .scrollIndicator), - pageIndicatorInactiveColor: try decodeColor(values, .pageIndicatorInactive), - inputClearButtonColor: try decodeColor(values, .inputClearButton)) - } -} - -extension PresentationThemeArchiveAvatarColors: Decodable { - enum CodingKeys: String, CodingKey { - case background - case foreground - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColors: try values.decode(PresentationThemeGradientColors.self, forKey: .background), - foregroundColor: try decodeColor(values, .foreground)) - } -} - -extension PresentationThemeChatList: Decodable { - enum CodingKeys: String, CodingKey { - case background - case itemSeparator - case itemBackground - case pinnedItemBackground - case itemHighlightedBackground - case itemSelectedBackground - case title - case secretTitle - case dateText - case authorName - case messageText - case messageDraftText - case checkmark - case pendingIndicator - case failedFill - case failedForeground - case muteIcon - case unreadBadgeActiveBackground - case unreadBadgeActiveText - case unreadBadgeInactiveBackground - case unreadBadgeInactiveText - case pinnedBadge - case pinnedSearchBar - case regularSearchBar - case sectionHeaderFill - case sectionHeaderText - case searchBarKeyboard - case verifiedIconFill - case verifiedIconForeground - case secretIcon - case pinnedArchiveAvatar - case unpinnedArchiveAvatar - case onlineDot - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColor: try decodeColor(values, .background), - itemSeparatorColor: try decodeColor(values, .itemSeparator), - itemBackgroundColor: try decodeColor(values, .itemBackground), - pinnedItemBackgroundColor: try decodeColor(values, .pinnedItemBackground), - itemHighlightedBackgroundColor: try decodeColor(values, .itemHighlightedBackground), - itemSelectedBackgroundColor: try decodeColor(values, .itemSelectedBackground), - titleColor: try decodeColor(values, .title), - secretTitleColor: try decodeColor(values, .secretTitle), - dateTextColor: try decodeColor(values, .dateText), - authorNameColor: try decodeColor(values, .authorName), - messageTextColor: try decodeColor(values, .messageText), - messageDraftTextColor: try decodeColor(values, .messageDraftText), - checkmarkColor: try decodeColor(values, .checkmark), - pendingIndicatorColor: try decodeColor(values, .pendingIndicator), - failedFillColor: try decodeColor(values, .failedFill), - failedForegroundColor: try decodeColor(values, .failedForeground), - muteIconColor: try decodeColor(values, .muteIcon), - unreadBadgeActiveBackgroundColor: try decodeColor(values, .unreadBadgeActiveBackground), - unreadBadgeActiveTextColor: try decodeColor(values, .unreadBadgeActiveText), - unreadBadgeInactiveBackgroundColor: try decodeColor(values, .unreadBadgeInactiveBackground), - unreadBadgeInactiveTextColor: try decodeColor(values, .unreadBadgeInactiveText), - pinnedBadgeColor: try decodeColor(values, .pinnedBadge), - pinnedSearchBarColor: try decodeColor(values, .pinnedSearchBar), - regularSearchBarColor: try decodeColor(values, .regularSearchBar), - sectionHeaderFillColor: try decodeColor(values, .sectionHeaderFill), - sectionHeaderTextColor: try decodeColor(values, .sectionHeaderText), - searchBarKeyboardColor: try values.decode(PresentationThemeKeyboardColor.self, forKey: .searchBarKeyboard), - verifiedIconFillColor: try decodeColor(values, .verifiedIconFill), - verifiedIconForegroundColor: try decodeColor(values, .verifiedIconForeground), - secretIconColor: try decodeColor(values, .secretIcon), - pinnedArchiveAvatarColor: try values.decode(PresentationThemeArchiveAvatarColors.self, forKey: .pinnedArchiveAvatar), - unpinnedArchiveAvatarColor: try values.decode(PresentationThemeArchiveAvatarColors.self, forKey: .unpinnedArchiveAvatar), - onlineDotColor: try decodeColor(values, .onlineDot)) - } -} - -extension PresentationThemeBubbleColorComponents: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case highlightedFill - case stroke - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fill: try decodeColor(values, .fill), - highlightedFill: try decodeColor(values, .highlightedFill), - stroke: try decodeColor(values, .stroke)) - } -} - -extension PresentationThemeBubbleColor: Decodable { - enum CodingKeys: String, CodingKey { - case withWallpaper - case withoutWallpaper - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(withWallpaper: try values.decode(PresentationThemeBubbleColorComponents.self, forKey: .withWallpaper), - withoutWallpaper: try values.decode(PresentationThemeBubbleColorComponents.self, forKey: .withoutWallpaper)) - } -} - -extension PresentationThemeVariableColor: Decodable { - enum CodingKeys: String, CodingKey { - case withWallpaper - case withoutWallpaper - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(withWallpaper: try decodeColor(values, .withWallpaper), - withoutWallpaper: try decodeColor(values, .withoutWallpaper)) - } -} - -extension PresentationThemeChatBubblePolls: Decodable { - enum CodingKeys: String, CodingKey { - case radioButton - case radioProgress - case highlight - case separator - case bar - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(radioButton: try decodeColor(values, .radioButton), - radioProgress: try decodeColor(values, .radioProgress), - highlight: try decodeColor(values, .highlight), - separator: try decodeColor(values, .separator), - bar: try decodeColor(values, .bar)) - } -} - -extension PresentationThemePartedColors: Decodable { - enum CodingKeys: String, CodingKey { - case bubble - case primaryText - case secondaryText - case linkText - case linkHighlight - case scam - case textHighlight - case accentText - case accentControl - case mediaActiveControl - case mediaInactiveControl - case pendingActivity - case fileTitle - case fileDescription - case fileDuration - case mediaPlaceholder - case polls - case actionButtonsFill - case actionButtonsStroke - case actionButtonsText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(bubble: try values.decode(PresentationThemeBubbleColor.self, forKey: .bubble), - primaryTextColor: try decodeColor(values, .primaryText), - secondaryTextColor: try decodeColor(values, .secondaryText), - linkTextColor: try decodeColor(values, .linkText), - linkHighlightColor: try decodeColor(values, .linkHighlight), - scamColor: try decodeColor(values, .scam), - textHighlightColor: try decodeColor(values, .textHighlight), - accentTextColor: try decodeColor(values, .accentText), - accentControlColor: try decodeColor(values, .accentControl), - mediaActiveControlColor: try decodeColor(values, .mediaActiveControl), - mediaInactiveControlColor: try decodeColor(values, .mediaInactiveControl), - pendingActivityColor: try decodeColor(values, .pendingActivity), - fileTitleColor: try decodeColor(values, .fileTitle), - fileDescriptionColor: try decodeColor(values, .fileDescription), - fileDurationColor: try decodeColor(values, .fileDuration), - mediaPlaceholderColor: try decodeColor(values, .mediaPlaceholder), - polls: try values.decode(PresentationThemeChatBubblePolls.self, forKey: .polls), - actionButtonsFillColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsFill), - actionButtonsStrokeColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsStroke), - actionButtonsTextColor: try values.decode(PresentationThemeVariableColor.self, forKey: .actionButtonsText)) - } -} - -extension PresentationThemeChatMessage: Decodable { - enum CodingKeys: String, CodingKey { - case incoming - case outgoing - case freeform - case infoPrimaryText - case infoLinkText - case outgoingCheck - case mediaDateAndStatusFill - case mediaDateAndStatusText - case shareButtonFill - case shareButtonStroke - case shareButtonForeground - case mediaOverlayControl - case selectionControl - case deliveryFailed - case mediaHighlightOverlay - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(incoming: try values.decode(PresentationThemePartedColors.self, forKey: .incoming), - outgoing: try values.decode(PresentationThemePartedColors.self, forKey: .outgoing), - freeform: try values.decode(PresentationThemeBubbleColor.self, forKey: .freeform), - infoPrimaryTextColor: try decodeColor(values, .infoPrimaryText), - infoLinkTextColor: try decodeColor(values, .infoLinkText), - outgoingCheckColor: try decodeColor(values, .outgoingCheck), - mediaDateAndStatusFillColor: try decodeColor(values, .mediaDateAndStatusFill), - mediaDateAndStatusTextColor: try decodeColor(values, .mediaDateAndStatusText), - shareButtonFillColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonFill), - shareButtonStrokeColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonStroke), - shareButtonForegroundColor: try values.decode(PresentationThemeVariableColor.self, forKey: .shareButtonForeground), - mediaOverlayControlColors: try values.decode(PresentationThemeFillForeground.self, forKey: .mediaOverlayControl), - selectionControlColors: try values.decode(PresentationThemeFillStrokeForeground.self, forKey: .selectionControl), - deliveryFailedColors: try values.decode(PresentationThemeFillForeground.self, forKey: .deliveryFailed), - mediaHighlightOverlayColor: try decodeColor(values, .mediaHighlightOverlay)) - } -} - -extension PresentationThemeServiceMessageColorComponents: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case primaryText - case linkHighlight - case scam - case dateFillStatic - case dateFillFloating - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fill: try decodeColor(values, .fill), - primaryText: try decodeColor(values, .primaryText), - linkHighlight: try decodeColor(values, .linkHighlight), - scam: try decodeColor(values, .scam), - dateFillStatic: try decodeColor(values, .dateFillStatic), - dateFillFloating: try decodeColor(values, .dateFillFloating)) - } -} - -extension PresentationThemeServiceMessageColor: Decodable { - enum CodingKeys: String, CodingKey { - case withDefaultWallpaper - case withCustomWallpaper - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(withDefaultWallpaper: try values.decode(PresentationThemeServiceMessageColorComponents.self, forKey: .withDefaultWallpaper), - withCustomWallpaper: try values.decode(PresentationThemeServiceMessageColorComponents.self, forKey: .withCustomWallpaper)) - } -} - -extension PresentationThemeServiceMessage: Decodable { - enum CodingKeys: String, CodingKey { - case components - case unreadBarFill - case unreadBarStroke - case unreadBarText - case dateText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(components: try values.decode(PresentationThemeServiceMessageColor.self, forKey: .components), - unreadBarFillColor: try decodeColor(values, .unreadBarFill), - unreadBarStrokeColor: try decodeColor(values, .unreadBarStroke), - unreadBarTextColor: try decodeColor(values, .unreadBarText), - dateTextColor: try values.decode(PresentationThemeVariableColor.self, forKey: .dateText)) - } -} - -extension PresentationThemeChatInputPanelMediaRecordingControl: Decodable { - enum CodingKeys: String, CodingKey { - case button - case micLevel - case activeIcon - case panelControlFill - case panelControlStroke - case panelControlContentPrimary - case panelControlContentAccent - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(buttonColor: try decodeColor(values, .button), - micLevelColor: try decodeColor(values, .micLevel), - activeIconColor: try decodeColor(values, .activeIcon), - panelControlFillColor: try decodeColor(values, .panelControlFill), - panelControlStrokeColor: try decodeColor(values, .panelControlStroke), - panelControlContentPrimaryColor: try decodeColor(values, .panelControlContentPrimary), - panelControlContentAccentColor: try decodeColor(values, .panelControlContentAccent)) - } -} - -extension PresentationThemeChatInputPanel: Decodable { - enum CodingKeys: String, CodingKey { - case panelBackground - case panelStroke - case panelControlAccent - case panelControl - case panelControlDisabled - case panelControlDestructive - case inputBackground - case inputStroke - case inputPlaceholder - case inputText - case inputControl - case actionControlFill - case actionControlForeground - case primaryText - case secondaryText - case mediaRecordingDot - case keyboard - case mediaRecordingControl - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(panelBackgroundColor: try decodeColor(values, .panelBackground), - panelStrokeColor: try decodeColor(values, .panelStroke), - panelControlAccentColor: try decodeColor(values, .panelControlAccent), - panelControlColor: try decodeColor(values, .panelControl), - panelControlDisabledColor: try decodeColor(values, .panelControlDisabled), - panelControlDestructiveColor: try decodeColor(values, .panelControlDestructive), - inputBackgroundColor: try decodeColor(values, .inputBackground), - inputStrokeColor: try decodeColor(values, .inputStroke), - inputPlaceholderColor: try decodeColor(values, .inputPlaceholder), - inputTextColor: try decodeColor(values, .inputText), - inputControlColor: try decodeColor(values, .inputControl), - actionControlFillColor: try decodeColor(values, .actionControlFill), - actionControlForegroundColor: try decodeColor(values, .actionControlForeground), - primaryTextColor: try decodeColor(values, .primaryText), - secondaryTextColor: try decodeColor(values, .secondaryText), - mediaRecordingDotColor: try decodeColor(values, .mediaRecordingDot), - keyboardColor: try values.decode(PresentationThemeKeyboardColor.self, forKey: .keyboard), - mediaRecordingControl: try values.decode(PresentationThemeChatInputPanelMediaRecordingControl.self, forKey: .mediaRecordingControl)) - } -} - -extension PresentationThemeInputMediaPanel: Decodable { - enum CodingKeys: String, CodingKey { - case panelSeparator - case panelIcon - case panelHighlightedIconBackground - case stickersBackground - case stickersSectionText - case stickersSearchBackground - case stickersSearchPlaceholder - case stickersSearchPrimary - case stickersSearchControl - case gifsBackground - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(panelSeparatorColor: try decodeColor(values, .panelSeparator), - panelIconColor: try decodeColor(values, .panelIcon), - panelHighlightedIconBackgroundColor: try decodeColor(values, .panelHighlightedIconBackground), - stickersBackgroundColor: try decodeColor(values, .stickersBackground), - stickersSectionTextColor: try decodeColor(values, .stickersSectionText), - stickersSearchBackgroundColor: try decodeColor(values, .stickersSearchBackground), - stickersSearchPlaceholderColor: try decodeColor(values, .stickersSearchPlaceholder), - stickersSearchPrimaryColor: try decodeColor(values, .stickersSearchPrimary), - stickersSearchControlColor: try decodeColor(values, .stickersSearchControl), - gifsBackgroundColor: try decodeColor(values, .gifsBackground)) - } -} - -extension PresentationThemeInputButtonPanel: Decodable { - enum CodingKeys: String, CodingKey { - case panelSeparator - case panelBackground - case buttonFill - case buttonStroke - case buttonHighlightedFill - case buttonHighlightedStroke - case buttonText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(panelSeparatorColor: try decodeColor(values, .panelSeparator), - panelBackgroundColor: try decodeColor(values, .panelBackground), - buttonFillColor: try decodeColor(values, .buttonFill), - buttonStrokeColor: try decodeColor(values, .buttonStroke), - buttonHighlightedFillColor: try decodeColor(values, .buttonHighlightedFill), - buttonHighlightedStrokeColor: try decodeColor(values, .buttonHighlightedStroke), - buttonTextColor: try decodeColor(values, .buttonText)) - } -} - -extension PresentationThemeChatHistoryNavigation: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case stroke - case foreground - case badgeBackground - case badgeStroke - case badgeText - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fillColor: try decodeColor(values, .fill), - strokeColor: try decodeColor(values, .stroke), - foregroundColor: try decodeColor(values, .foreground), - badgeBackgroundColor: try decodeColor(values, .badgeBackground), - badgeStrokeColor: try decodeColor(values, .badgeStroke), - badgeTextColor: try decodeColor(values, .badgeText)) - } -} - -extension PresentationThemeChat: Decodable { - enum CodingKeys: String, CodingKey { - case message - case serviceMessage - case inputPanel - case inputMediaPanel - case inputButtonPanel - case historyNavigation - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(message: try values.decode(PresentationThemeChatMessage.self, forKey: .message), - serviceMessage: try values.decode(PresentationThemeServiceMessage.self, forKey: .serviceMessage), - inputPanel: try values.decode(PresentationThemeChatInputPanel.self, forKey: .inputPanel), - inputMediaPanel: try values.decode(PresentationThemeInputMediaPanel.self, forKey: .inputMediaPanel), - inputButtonPanel: try values.decode(PresentationThemeInputButtonPanel.self, forKey: .inputButtonPanel), - historyNavigation: try values.decode(PresentationThemeChatHistoryNavigation.self, forKey: .historyNavigation)) - } -} - -extension PresentationThemeExpandedNotificationNavigationBar: Decodable { - enum CodingKeys: String, CodingKey { - case background - case primaryText - case control - case separator - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundColor: try decodeColor(values, .background), - primaryTextColor: try decodeColor(values, .primaryText), - controlColor: try decodeColor(values, .control), - separatorColor: try decodeColor(values, .separator)) - } -} - -extension PresentationThemeExpandedNotification: Decodable { - enum CodingKeys: String, CodingKey { - case backgroundType - case navigationBar - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(backgroundType: try values.decode(PresentationThemeExpandedNotificationBackgroundType.self, forKey: .backgroundType), - navigationBar: try values.decode(PresentationThemeExpandedNotificationNavigationBar.self, forKey: .navigationBar)) - } -} - -extension PresentationThemeInAppNotification: Decodable { - enum CodingKeys: String, CodingKey { - case fill - case primaryText - case expandedNotification - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(fillColor: try decodeColor(values, .fill), - primaryTextColor: try decodeColor(values, .primaryText), - expandedNotification: try values.decode(PresentationThemeExpandedNotification.self, forKey: .expandedNotification)) - } -} - -extension PresentationThemeName: Decodable { - public init(from decoder: Decoder) throws { - let value = try decoder.singleValueContainer() - self = .custom(try value.decode(String.self)) - } -} - -extension PresentationTheme: Decodable { - enum CodingKeys: String, CodingKey { - case name - case author - case dark - case auth - case passcode - case root - case list - case chatList - case chat - case actionSheet - case inAppNotification - } - - public convenience init(from decoder: Decoder) throws { - let values = try decoder.container(keyedBy: CodingKeys.self) - self.init(name: try values.decode(PresentationThemeName.self, forKey: .name), - author: (try? values.decode(String.self, forKey: .author)) ?? nil, - overallDarkAppearance: (try? values.decode(Bool.self, forKey: .dark)) ?? false, - auth: try values.decode(PresentationThemeAuth.self, forKey: .auth), - passcode: try values.decode(PresentationThemePasscode.self, forKey: .passcode), - rootController: try values.decode(PresentationThemeRootController.self, forKey: .root), - list: try values.decode(PresentationThemeList.self, forKey: .list), - chatList: try values.decode(PresentationThemeChatList.self, forKey: .chatList), - chat: try values.decode(PresentationThemeChat.self, forKey: .chat), - actionSheet: try values.decode(PresentationThemeActionSheet.self, forKey: .actionSheet), - inAppNotification: try values.decode(PresentationThemeInAppNotification.self, forKey: .inAppNotification)) - } -} diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeDecoder.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeDecoder.swift new file mode 100644 index 0000000000..ee3f80624c --- /dev/null +++ b/submodules/TelegramPresentationData/Sources/PresentationThemeDecoder.swift @@ -0,0 +1,550 @@ +import Foundation + +public enum PresentationThemeDecodingError: Error { + case generic + case dataCorrupted + case valueNotFound + case typeMismatch + case keyNotFound +} + +internal protocol _YAMLStringDictionaryDecodableMarker { + static var elementType: Decodable.Type { get } +} + +extension Dictionary : _YAMLStringDictionaryDecodableMarker where Key == String, Value: Decodable { + static var elementType: Decodable.Type { return Value.self } +} + +open class PresentationThemeDecoder { + public init() {} + + open func decode(_ type: T.Type, from data: Data) throws -> T { + let topLevel: Any + do { + topLevel = try JSONSerialization.jsonObject(with: data) + } catch { + throw PresentationThemeDecodingError.dataCorrupted + } + + let decoder = PresentationThemeDecoding(referencing: topLevel) + guard let value = try decoder.unbox(topLevel, as: type) else { + throw PresentationThemeDecodingError.valueNotFound + } + + return value + } +} + +fileprivate class PresentationThemeDecoding : Decoder { + fileprivate var storage: PresentationThemeDecodingStorage + + fileprivate(set) public var codingPath: [CodingKey] + + public var userInfo: [CodingUserInfoKey : Any] { + return [:] + } + + fileprivate init(referencing container: Any, at codingPath: [CodingKey] = []) { + self.storage = PresentationThemeDecodingStorage() + self.storage.push(container: container) + self.codingPath = codingPath + } + + public func container(keyedBy type: Key.Type) throws -> KeyedDecodingContainer { + guard !(self.storage.topContainer is NSNull) else { + throw PresentationThemeDecodingError.valueNotFound + } + + guard let topContainer = self.storage.topContainer as? [String : Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + let container = PresentationThemeKeyedDecodingContainer(referencing: self, wrapping: topContainer) + return KeyedDecodingContainer(container) + } + + public func unkeyedContainer() throws -> UnkeyedDecodingContainer { + guard !(self.storage.topContainer is NSNull) else { + throw PresentationThemeDecodingError.valueNotFound + } + + guard let topContainer = self.storage.topContainer as? [Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + return PresentationThemeUnkeyedDecodingContainer(referencing: self, wrapping: topContainer) + } + + public func singleValueContainer() throws -> SingleValueDecodingContainer { + return self + } +} + +fileprivate struct PresentationThemeDecodingStorage { + private(set) fileprivate var containers: [Any] = [] + + fileprivate init() {} + + fileprivate var count: Int { + return self.containers.count + } + + fileprivate var topContainer: Any { + return self.containers.last! + } + + fileprivate mutating func push(container: __owned Any) { + self.containers.append(container) + } + + fileprivate mutating func popContainer() { + self.containers.removeLast() + } +} + +fileprivate struct PresentationThemeKeyedDecodingContainer : KeyedDecodingContainerProtocol { + typealias Key = K + + private let decoder: PresentationThemeDecoding + private let container: [String : Any] + private(set) public var codingPath: [CodingKey] + + fileprivate init(referencing decoder: PresentationThemeDecoding, wrapping container: [String : Any]) { + self.decoder = decoder + self.container = container + self.codingPath = decoder.codingPath + } + + public var allKeys: [Key] { + return self.container.keys.compactMap { Key(stringValue: $0) } + } + + public func contains(_ key: Key) -> Bool { + return self.container[key.stringValue] != nil + } + + private func _errorDescription(of key: CodingKey) -> String { + return "\(key) (\"\(key.stringValue)\")" + } + + public func decodeNil(forKey key: Key) throws -> Bool { + guard let entry = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + return entry is NSNull + } + + public func decode(_ type: Bool.Type, forKey key: Key) throws -> Bool { + guard let entry = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Bool.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + return value + } + + public func decode(_ type: Int32.Type, forKey key: Key) throws -> Int32 { + guard let entry = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: Int32.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + return value + } + + public func decode(_ type: String.Type, forKey key: Key) throws -> String { + guard let entry = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: String.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + return value + } + + public func decode(_ type: T.Type, forKey key: Key) throws -> T { + guard let entry = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = try self.decoder.unbox(entry, as: type) else { + throw PresentationThemeDecodingError.valueNotFound + } + + return value + } + + public func nestedContainer(keyedBy type: NestedKey.Type, forKey key: Key) throws -> KeyedDecodingContainer { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + guard let dictionary = value as? [String : Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + let container = PresentationThemeKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) + return KeyedDecodingContainer(container) + } + + public func nestedUnkeyedContainer(forKey key: Key) throws -> UnkeyedDecodingContainer { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + guard let value = self.container[key.stringValue] else { + throw PresentationThemeDecodingError.keyNotFound + } + + guard let array = value as? [Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + return PresentationThemeUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) + } + + private func _superDecoder(forKey key: __owned CodingKey) throws -> Decoder { + self.decoder.codingPath.append(key) + defer { self.decoder.codingPath.removeLast() } + + let value: Any = self.container[key.stringValue] ?? NSNull() + return PresentationThemeDecoding(referencing: value, at: self.decoder.codingPath) + } + + public func superDecoder() throws -> Decoder { + return try _superDecoder(forKey: YAMLKey.super) + } + + public func superDecoder(forKey key: Key) throws -> Decoder { + return try _superDecoder(forKey: key) + } +} + +fileprivate struct PresentationThemeUnkeyedDecodingContainer : UnkeyedDecodingContainer { + private let decoder: PresentationThemeDecoding + + private let container: [Any] + + private(set) public var codingPath: [CodingKey] + private(set) public var currentIndex: Int + + fileprivate init(referencing decoder: PresentationThemeDecoding, wrapping container: [Any]) { + self.decoder = decoder + self.container = container + self.codingPath = decoder.codingPath + self.currentIndex = 0 + } + + public var count: Int? { + return self.container.count + } + + public var isAtEnd: Bool { + return self.currentIndex >= self.count! + } + + public mutating func decodeNil() throws -> Bool { + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + if self.container[self.currentIndex] is NSNull { + self.currentIndex += 1 + return true + } else { + return false + } + } + + public mutating func decode(_ type: Bool.Type) throws -> Bool { + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Bool.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: Int32.Type) throws -> Int32 { + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: Int32.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: String.Type) throws -> String { + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: String.self) else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.currentIndex += 1 + return decoded + } + + public mutating func decode(_ type: T.Type) throws -> T { + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard let decoded = try self.decoder.unbox(self.container[self.currentIndex], as: type) else { + throw PresentationThemeDecodingError.valueNotFound + } + + self.currentIndex += 1 + return decoded + } + + public mutating func nestedContainer(keyedBy type: NestedKey.Type) throws -> KeyedDecodingContainer { + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + let value = self.container[self.currentIndex] + guard !(value is NSNull) else { + throw PresentationThemeDecodingError.valueNotFound + } + + guard let dictionary = value as? [String : Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + self.currentIndex += 1 + let container = PresentationThemeKeyedDecodingContainer(referencing: self.decoder, wrapping: dictionary) + return KeyedDecodingContainer(container) + } + + public mutating func nestedUnkeyedContainer() throws -> UnkeyedDecodingContainer { + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + let value = self.container[self.currentIndex] + guard !(value is NSNull) else { + throw PresentationThemeDecodingError.valueNotFound + } + + guard let array = value as? [Any] else { + throw PresentationThemeDecodingError.typeMismatch + } + + self.currentIndex += 1 + return PresentationThemeUnkeyedDecodingContainer(referencing: self.decoder, wrapping: array) + } + + public mutating func superDecoder() throws -> Decoder { + self.decoder.codingPath.append(YAMLKey(index: self.currentIndex)) + defer { self.decoder.codingPath.removeLast() } + + guard !self.isAtEnd else { + throw PresentationThemeDecodingError.valueNotFound + } + + let value = self.container[self.currentIndex] + self.currentIndex += 1 + return PresentationThemeDecoding(referencing: value, at: self.decoder.codingPath) + } +} + +extension PresentationThemeDecoding : SingleValueDecodingContainer { + private func expectNonNull(_ type: T.Type) throws { + guard !self.decodeNil() else { + throw PresentationThemeDecodingError.valueNotFound + } + } + + public func decodeNil() -> Bool { + return self.storage.topContainer is NSNull + } + + public func decode(_ type: Bool.Type) throws -> Bool { + try expectNonNull(Bool.self) + return try self.unbox(self.storage.topContainer, as: Bool.self)! + } + + public func decode(_ type: Int32.Type) throws -> Int32 { + try expectNonNull(Int32.self) + return try self.unbox(self.storage.topContainer, as: Int32.self)! + } + + public func decode(_ type: String.Type) throws -> String { + try expectNonNull(String.self) + return try self.unbox(self.storage.topContainer, as: String.self)! + } + + public func decode(_ type: T.Type) throws -> T { + try expectNonNull(type) + return try self.unbox(self.storage.topContainer, as: type)! + } +} + +extension PresentationThemeDecoding { + fileprivate func unbox(_ value: Any, as type: Bool.Type) throws -> Bool? { + guard !(value is NSNull) else { return nil } + + if let number = value as? NSNumber { + if number === kCFBooleanTrue as NSNumber { + return true + } else if number === kCFBooleanFalse as NSNumber { + return false + } + } + + throw PresentationThemeDecodingError.typeMismatch + } + + fileprivate func unbox(_ value: Any, as type: Int32.Type) throws -> Int32? { + guard !(value is NSNull) else { return nil } + + guard let number = value as? NSNumber, number !== kCFBooleanTrue, number !== kCFBooleanFalse else { + throw PresentationThemeDecodingError.typeMismatch + } + + let int32 = number.int32Value + guard NSNumber(value: int32) == number else { + throw PresentationThemeDecodingError.dataCorrupted + } + + return int32 + } + + fileprivate func unbox(_ value: Any, as type: String.Type) throws -> String? { + guard !(value is NSNull) else { return nil } + + guard let string = value as? String else { + throw PresentationThemeDecodingError.typeMismatch + } + + return string + } + + fileprivate func unbox(_ value: Any, as type: _YAMLStringDictionaryDecodableMarker.Type) throws -> T? { + guard !(value is NSNull) else { return nil } + + var result = [String : Any]() + guard let dict = value as? NSDictionary else { + throw PresentationThemeDecodingError.typeMismatch + } + let elementType = type.elementType + for (key, value) in dict { + let key = key as! String + self.codingPath.append(YAMLKey(stringValue: key, intValue: nil)) + defer { self.codingPath.removeLast() } + + result[key] = try unbox_(value, as: elementType) + } + + return result as? T + } + + fileprivate func unbox(_ value: Any, as type: T.Type) throws -> T? { + return try unbox_(value, as: type) as? T + } + + fileprivate func unbox_(_ value: Any, as type: Decodable.Type) throws -> Any? { + if type == Date.self || type == NSDate.self { + return try self.unbox(value, as: Date.self) + } else if type == Data.self || type == NSData.self { + return try self.unbox(value, as: Data.self) + } else if type == URL.self || type == NSURL.self { + guard let urlString = try self.unbox(value, as: String.self) else { + return nil + } + + guard let url = URL(string: urlString) else { + throw PresentationThemeDecodingError.dataCorrupted + } + return url + } else if type == Decimal.self || type == NSDecimalNumber.self { + return try self.unbox(value, as: Decimal.self) + } else if let stringKeyedDictType = type as? _YAMLStringDictionaryDecodableMarker.Type { + return try self.unbox(value, as: stringKeyedDictType) + } else { + self.storage.push(container: value) + defer { self.storage.popContainer() } + return try type.init(from: self) + } + } +} + +fileprivate struct YAMLKey : CodingKey { + public var stringValue: String + public var intValue: Int? + + public init?(stringValue: String) { + self.stringValue = stringValue + self.intValue = nil + } + + public init?(intValue: Int) { + self.stringValue = "\(intValue)" + self.intValue = intValue + } + + public init(stringValue: String, intValue: Int?) { + self.stringValue = stringValue + self.intValue = intValue + } + + fileprivate init(index: Int) { + self.stringValue = "Index \(index)" + self.intValue = index + } + + fileprivate static let `super` = YAMLKey(stringValue: "super")! +} diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeEncoder.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeEncoder.swift new file mode 100644 index 0000000000..d4938876f3 --- /dev/null +++ b/submodules/TelegramPresentationData/Sources/PresentationThemeEncoder.swift @@ -0,0 +1,274 @@ +import Foundation + +public final class PresentationThemeEncoder { + public init() { + } + + public func encode(_ value: T) throws -> String { + let encoding = PresentationThemeEncoding() + try value.encode(to: encoding) + return encoding.data.formatted + } + + private func stringsFormat(from strings: [(String, String)]) -> String { + let strings = strings.map { "\($0.0): \($0.1)" } + return strings.joined(separator: "\n") + } +} + +private func renderNodes(string: inout String, nodes: [PresentationThemeEncoding.Node], level: Int = 0) { + for node in nodes { + if level > 1 { + string.append(String(repeating: " ", count: level - 1)) + } + switch node.value { + case let .string(value): + if let key = node.key { + string.append("\(key): \(value)\n") + } + case let .subnode(nodes): + if let key = node.key { + string.append("\(key):\n") + } + renderNodes(string: &string, nodes: nodes, level: level + 1) + } + } +} + +fileprivate class PresentationThemeEncoding: Encoder { + fileprivate enum NodeValue { + case string(String) + case subnode([Node]) + } + + fileprivate final class Node { + var key: String? + var value: NodeValue + + init(key: String? = nil, value: NodeValue) { + self.key = key + self.value = value + } + } + + fileprivate final class Data { + private(set) var rootNode = Node(value: .subnode([])) + + func encode(key codingKey: [CodingKey], value: String) { + var currentNode: Node = self.rootNode + for i in 0 ..< codingKey.count { + let key = codingKey[i].stringValue + var found = false + switch currentNode.value { + case var .subnode(nodes): + for node in nodes { + if node.key == key { + currentNode = node + found = true + } + } + if !found { + let newNode: Node + if i == codingKey.count - 1 { + newNode = Node(key: key, value: .string(value)) + } else { + newNode = Node(key: key, value: .subnode([])) + } + nodes.append(newNode) + currentNode.value = .subnode(nodes) + currentNode = newNode + } + case .string: + break + } + } + } + + var formatted: String { + var result = "" + renderNodes(string: &result, nodes: [self.rootNode]) + return result + } + } + + fileprivate var data: Data + var codingPath: [CodingKey] = [] + let userInfo: [CodingUserInfoKey : Any] = [:] + + init(to encodedData: Data = Data()) { + self.data = encodedData + } + + func container(keyedBy type: Key.Type) -> KeyedEncodingContainer { + var container = StringsKeyedEncoding(to: data) + container.codingPath = self.codingPath + return KeyedEncodingContainer(container) + } + + func unkeyedContainer() -> UnkeyedEncodingContainer { + var container = StringsUnkeyedEncoding(to: data) + container.codingPath = self.codingPath + return container + } + + func singleValueContainer() -> SingleValueEncodingContainer { + var container = StringsSingleValueEncoding(to: data) + container.codingPath = self.codingPath + return container + } +} + +fileprivate struct StringsKeyedEncoding: KeyedEncodingContainerProtocol { + private let data: PresentationThemeEncoding.Data + var codingPath: [CodingKey] = [] + + init(to data: PresentationThemeEncoding.Data) { + self.data = data + } + + mutating func encodeNil(forKey key: Key) throws { + } + + mutating func encode(_ value: Bool, forKey key: Key) throws { + self.data.encode(key: codingPath + [key], value: value.description) + } + + mutating func encode(_ value: String, forKey key: Key) throws { + self.data.encode(key: codingPath + [key], value: value) + } + + mutating func encode(_ value: Int32, forKey key: Key) throws { + self.data.encode(key: codingPath + [key], value: value.description) + } + + mutating func encode(_ value: T, forKey key: Key) throws { + let stringsEncoding = PresentationThemeEncoding(to: self.data) + stringsEncoding.codingPath = self.codingPath + [key] + try value.encode(to: stringsEncoding) + } + + mutating func nestedContainer( + keyedBy keyType: NestedKey.Type, + forKey key: Key) -> KeyedEncodingContainer { + var container = StringsKeyedEncoding(to: self.data) + container.codingPath = self.codingPath + [key] + return KeyedEncodingContainer(container) + } + + mutating func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { + var container = StringsUnkeyedEncoding(to: data) + container.codingPath = self.codingPath + [key] + return container + } + + mutating func superEncoder() -> Encoder { + let superKey = Key(stringValue: "super")! + return superEncoder(forKey: superKey) + } + + mutating func superEncoder(forKey key: Key) -> Encoder { + let stringsEncoding = PresentationThemeEncoding(to: self.data) + stringsEncoding.codingPath = self.codingPath + [key] + return stringsEncoding + } +} + +fileprivate struct StringsUnkeyedEncoding: UnkeyedEncodingContainer { + private let data: PresentationThemeEncoding.Data + var codingPath: [CodingKey] = [] + private(set) var count: Int = 0 + + init(to data: PresentationThemeEncoding.Data) { + self.data = data + } + + private mutating func nextIndexedKey() -> CodingKey { + let nextCodingKey = IndexedCodingKey(intValue: count)! + self.count += 1 + return nextCodingKey + } + + private struct IndexedCodingKey: CodingKey { + let intValue: Int? + let stringValue: String + + init?(intValue: Int) { + self.intValue = intValue + self.stringValue = intValue.description + } + + init?(stringValue: String) { + return nil + } + } + + mutating func encodeNil() throws { + } + + mutating func encode(_ value: Bool) throws { + self.data.encode(key: self.codingPath + [self.nextIndexedKey()], value: value.description) + } + + mutating func encode(_ value: String) throws { + self.data.encode(key: self.codingPath + [self.nextIndexedKey()], value: value) + } + + mutating func encode(_ value: Int32) throws { + self.data.encode(key: self.codingPath + [self.nextIndexedKey()], value: value.description) + } + + mutating func encode(_ value: T) throws { + let stringsEncoding = PresentationThemeEncoding(to: self.data) + stringsEncoding.codingPath = self.codingPath + [self.nextIndexedKey()] + try value.encode(to: stringsEncoding) + } + + mutating func nestedContainer( + keyedBy keyType: NestedKey.Type) -> KeyedEncodingContainer { + var container = StringsKeyedEncoding(to: self.data) + container.codingPath = self.codingPath + [self.nextIndexedKey()] + return KeyedEncodingContainer(container) + } + + mutating func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { + var container = StringsUnkeyedEncoding(to: self.data) + container.codingPath = self.codingPath + [self.nextIndexedKey()] + return container + } + + mutating func superEncoder() -> Encoder { + let stringsEncoding = PresentationThemeEncoding(to: self.data) + stringsEncoding.codingPath = self.codingPath + return stringsEncoding + } +} + +fileprivate struct StringsSingleValueEncoding: SingleValueEncodingContainer { + private let data: PresentationThemeEncoding.Data + var codingPath: [CodingKey] = [] + + init(to data: PresentationThemeEncoding.Data) { + self.data = data + } + + mutating func encodeNil() throws { + } + + mutating func encode(_ value: Bool) throws { + self.data.encode(key: self.codingPath, value: value.description) + } + + mutating func encode(_ value: String) throws { + self.data.encode(key: self.codingPath, value: value) + } + + mutating func encode(_ value: Int32) throws { + self.data.encode(key: self.codingPath, value: value.description) + } + + mutating func encode(_ value: T) throws { + let stringsEncoding = PresentationThemeEncoding(to: self.data) + stringsEncoding.codingPath = self.codingPath + try value.encode(to: stringsEncoding) + } +} diff --git a/submodules/TelegramPresentationData/TelegramPresentationData_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramPresentationData/TelegramPresentationData_Xcode.xcodeproj/project.pbxproj index e8517f9b66..a3bd8a10ca 100644 --- a/submodules/TelegramPresentationData/TelegramPresentationData_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramPresentationData/TelegramPresentationData_Xcode.xcodeproj/project.pbxproj @@ -7,7 +7,9 @@ objects = { /* Begin PBXBuildFile section */ - 097A581B22D528680078B73C /* PresentationThemeDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097A581A22D528680078B73C /* PresentationThemeDecodable.swift */; }; + 0957DE1522D88B82001B4D57 /* PresentationThemeEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0957DE1422D88B82001B4D57 /* PresentationThemeEncoder.swift */; }; + 0957DE1922D95E0F001B4D57 /* PresentationThemeDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0957DE1822D95E0F001B4D57 /* PresentationThemeDecoder.swift */; }; + 097A581B22D528680078B73C /* PresentationThemeCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097A581A22D528680078B73C /* PresentationThemeCodable.swift */; }; D0AE31AB22B273F20058D3BC /* TelegramPresentationData.h in Headers */ = {isa = PBXBuildFile; fileRef = D0AE31A922B273F20058D3BC /* TelegramPresentationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; D0AE31B422B2746B0058D3BC /* PresentationStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AE31B122B2746B0058D3BC /* PresentationStrings.swift */; }; D0AE31B522B2746B0058D3BC /* PresentationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AE31B222B2746B0058D3BC /* PresentationData.swift */; }; @@ -32,7 +34,9 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 097A581A22D528680078B73C /* PresentationThemeDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationThemeDecodable.swift; sourceTree = ""; }; + 0957DE1422D88B82001B4D57 /* PresentationThemeEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationThemeEncoder.swift; sourceTree = ""; }; + 0957DE1822D95E0F001B4D57 /* PresentationThemeDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationThemeDecoder.swift; sourceTree = ""; }; + 097A581A22D528680078B73C /* PresentationThemeCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationThemeCodable.swift; sourceTree = ""; }; D0AE31A622B273F20058D3BC /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0AE31A922B273F20058D3BC /* TelegramPresentationData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramPresentationData.h; sourceTree = ""; }; D0AE31AA22B273F20058D3BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -110,7 +114,9 @@ D0AE31B222B2746B0058D3BC /* PresentationData.swift */, D0AE31B122B2746B0058D3BC /* PresentationStrings.swift */, D0AE31B322B2746B0058D3BC /* PresentationTheme.swift */, - 097A581A22D528680078B73C /* PresentationThemeDecodable.swift */, + 097A581A22D528680078B73C /* PresentationThemeCodable.swift */, + 0957DE1422D88B82001B4D57 /* PresentationThemeEncoder.swift */, + 0957DE1822D95E0F001B4D57 /* PresentationThemeDecoder.swift */, D0AE31A922B273F20058D3BC /* TelegramPresentationData.h */, ); path = Sources; @@ -212,8 +218,9 @@ files = ( D0AE31D522B27A780058D3BC /* DefaultPresentationTheme.swift in Sources */, D0AE31D422B27A780058D3BC /* DefaultPresentationStrings.swift in Sources */, - 097A581B22D528680078B73C /* PresentationThemeDecodable.swift in Sources */, + 097A581B22D528680078B73C /* PresentationThemeCodable.swift in Sources */, D0AE31CB22B279D00058D3BC /* NumericFormat.swift in Sources */, + 0957DE1922D95E0F001B4D57 /* PresentationThemeDecoder.swift in Sources */, D0AE31B422B2746B0058D3BC /* PresentationStrings.swift in Sources */, D0AE321422B2826A0058D3BC /* ComponentsThemes.swift in Sources */, D0AE31C522B279720058D3BC /* StringPluralization.swift in Sources */, @@ -223,6 +230,7 @@ D0AE31B522B2746B0058D3BC /* PresentationData.swift in Sources */, D0AE31D322B27A780058D3BC /* DefaultDarkAccentPresentationTheme.swift in Sources */, D0AE31B622B2746B0058D3BC /* PresentationTheme.swift in Sources */, + 0957DE1522D88B82001B4D57 /* PresentationThemeEncoder.swift in Sources */, D0AE31D222B27A780058D3BC /* DefaultDarkPresentationTheme.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/submodules/TelegramUI/TelegramUI/AppDelegate.swift b/submodules/TelegramUI/TelegramUI/AppDelegate.swift index 826bed13de..517cb66171 100644 --- a/submodules/TelegramUI/TelegramUI/AppDelegate.swift +++ b/submodules/TelegramUI/TelegramUI/AppDelegate.swift @@ -1879,8 +1879,8 @@ final class SharedApplicationContext { replyMessageCategory = UNNotificationCategory(identifier: "withReply", actions: [reply], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) replyLegacyMessageCategory = UNNotificationCategory(identifier: "r", actions: [reply], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) replyLegacyMediaMessageCategory = UNNotificationCategory(identifier: "m", actions: [reply], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) - legacyChannelMessageCategory = UNNotificationCategory(identifier: "c", actions: [], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) replyMediaMessageCategory = UNNotificationCategory(identifier: "withReplyMedia", actions: [reply], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) + legacyChannelMessageCategory = UNNotificationCategory(identifier: "c", actions: [], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) muteMessageCategory = UNNotificationCategory(identifier: "withMute", actions: [], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) muteMediaMessageCategory = UNNotificationCategory(identifier: "withMuteMedia", actions: [], intentIdentifiers: [], hiddenPreviewsBodyPlaceholder: hiddenContentString, options: options) } else { @@ -1888,8 +1888,8 @@ final class SharedApplicationContext { replyMessageCategory = UNNotificationCategory(identifier: "withReply", actions: [reply], intentIdentifiers: [], options: []) replyLegacyMessageCategory = UNNotificationCategory(identifier: "r", actions: [reply], intentIdentifiers: [], options: []) replyLegacyMediaMessageCategory = UNNotificationCategory(identifier: "m", actions: [reply], intentIdentifiers: [], options: []) + replyMediaMessageCategory = UNNotificationCategory(identifier: "withReplyMedia", actions: [reply], intentIdentifiers: [], options: []) legacyChannelMessageCategory = UNNotificationCategory(identifier: "c", actions: [], intentIdentifiers: [], options: []) - replyMediaMessageCategory = UNNotificationCategory(identifier: "withReplyMedia", actions: [reply], intentIdentifiers: [], options: []) muteMessageCategory = UNNotificationCategory(identifier: "withMute", actions: [], intentIdentifiers: [], options: []) muteMediaMessageCategory = UNNotificationCategory(identifier: "withMuteMedia", actions: [], intentIdentifiers: [], options: []) } @@ -1905,9 +1905,50 @@ final class SharedApplicationContext { } }) } else { + let reply = UIMutableUserNotificationAction() + reply.identifier = "reply" + reply.title = replyString + reply.isDestructive = false + if #available(iOS 9.0, *) { + reply.isAuthenticationRequired = false + reply.behavior = .textInput + reply.activationMode = .background + } else { + reply.isAuthenticationRequired = true + reply.activationMode = .foreground + } + + let unknownMessageCategory = UIMutableUserNotificationCategory() + unknownMessageCategory.identifier = "unknown" + + let replyMessageCategory = UIMutableUserNotificationCategory() + replyMessageCategory.identifier = "withReply" + replyMessageCategory.setActions([reply], for: .default) + + let replyLegacyMessageCategory = UIMutableUserNotificationCategory() + replyLegacyMessageCategory.identifier = "r" + replyLegacyMessageCategory.setActions([reply], for: .default) + + let replyLegacyMediaMessageCategory = UIMutableUserNotificationCategory() + replyLegacyMediaMessageCategory.identifier = "m" + replyLegacyMediaMessageCategory.setActions([reply], for: .default) + + let replyMediaMessageCategory = UIMutableUserNotificationCategory() + replyMediaMessageCategory.identifier = "withReplyMedia" + replyMediaMessageCategory.setActions([reply], for: .default) + + let legacyChannelMessageCategory = UIMutableUserNotificationCategory() + legacyChannelMessageCategory.identifier = "c" + + let muteMessageCategory = UIMutableUserNotificationCategory() + muteMessageCategory.identifier = "withMute" + + let muteMediaMessageCategory = UIMutableUserNotificationCategory() + muteMediaMessageCategory.identifier = "withMuteMedia" + + let categories = [unknownMessageCategory, replyMessageCategory, replyLegacyMessageCategory, replyLegacyMediaMessageCategory, replyMediaMessageCategory, legacyChannelMessageCategory, muteMessageCategory, muteMediaMessageCategory] let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories:[]) UIApplication.shared.registerUserNotificationSettings(settings) - UIApplication.shared.registerForRemoteNotifications() } } diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSplashController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSplashController.swift index dad2008f1e..1d810fea23 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSplashController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceSplashController.swift @@ -69,7 +69,7 @@ final class AuthorizationSequenceSplashController: ViewController { }) }) - self.controller = RMIntroViewController(backgroundColor: theme.list.plainBackgroundColor, primaryColor: theme.list.itemPrimaryTextColor, buttonColor: theme.auth.introStartButtonColor, accentColor: theme.list.itemAccentColor, regularDotColor: theme.auth.introDotColor, highlightedDotColor: theme.list.itemPrimaryTextColor, suggestedLocalizationSignal: localizationSignal) + self.controller = RMIntroViewController(backgroundColor: theme.list.plainBackgroundColor, primaryColor: theme.list.itemPrimaryTextColor, buttonColor: theme.intro.startButtonColor, accentColor: theme.list.itemAccentColor, regularDotColor: theme.intro.dotColor, highlightedDotColor: theme.list.itemPrimaryTextColor, suggestedLocalizationSignal: localizationSignal) super.init(navigationBarPresentationData: nil) diff --git a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift index 9be192a99a..a1423e2a9d 100644 --- a/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatControllerNode.swift @@ -210,7 +210,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { self.inputPanelBackgroundNode.isLayerBacked = true self.inputPanelBackgroundSeparatorNode = ASDisplayNode() - self.inputPanelBackgroundSeparatorNode.backgroundColor = self.chatPresentationInterfaceState.theme.chat.inputPanel.panelStrokeColor + self.inputPanelBackgroundSeparatorNode.backgroundColor = self.chatPresentationInterfaceState.theme.chat.inputPanel.panelSeparatorColor self.inputPanelBackgroundSeparatorNode.isLayerBacked = true self.navigateButtons = ChatHistoryNavigationButtons(theme: self.chatPresentationInterfaceState.theme) @@ -1364,7 +1364,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate { if themeUpdated { self.inputPanelBackgroundNode.backgroundColor = chatPresentationInterfaceState.theme.chat.inputPanel.panelBackgroundColor - self.inputPanelBackgroundSeparatorNode.backgroundColor = self.chatPresentationInterfaceState.theme.chat.inputPanel.panelStrokeColor + self.inputPanelBackgroundSeparatorNode.backgroundColor = self.chatPresentationInterfaceState.theme.chat.inputPanel.panelSeparatorColor } let keepSendButtonEnabled = chatPresentationInterfaceState.interfaceState.forwardMessageIds != nil || chatPresentationInterfaceState.interfaceState.editMessage != nil diff --git a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift index 5212c983ce..1d852e5574 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMediaInputStickerPackItem.swift @@ -103,7 +103,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode { override var visibility: ListViewItemNodeVisibility { didSet { - self.visibilityStatus = self.visibility != .none && false + self.visibilityStatus = self.visibility != .none } } @@ -190,7 +190,7 @@ final class ChatMediaInputStickerPackItemNode: ListViewItemNode { animatedStickerNode.transform = CATransform3DMakeRotation(CGFloat.pi / 2.0, 0.0, 0.0, 1.0) self.addSubnode(animatedStickerNode) animatedStickerNode.setup(account: account, resource: resource, width: 80, height: 80, mode: .cached) - animatedStickerNode.visibility = self.visibilityStatus && false + animatedStickerNode.visibility = self.visibilityStatus } if let animatedStickerNode = self.animatedStickerNode { animatedStickerNode.frame = CGRect(origin: CGPoint(x: floor((boundingSize.width - imageSize.width) / 2.0) + verticalOffset, y: floor((boundingSize.height - imageSize.height) / 2.0)), size: imageSize) diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageForwardInfoNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageForwardInfoNode.swift index ba3b8ce721..ef2422f254 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageForwardInfoNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageForwardInfoNode.swift @@ -90,7 +90,6 @@ class ChatMessageForwardInfoNode: ASDisplayNode { let (textLayout, textApply) = textNodeLayout(TextNodeLayoutArguments(attributedString: string, backgroundColor: nil, maximumNumberOfLines: 2, truncationType: .end, constrainedSize: CGSize(width: constrainedSize.width - credibilityIconWidth, height: constrainedSize.height), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) return (CGSize(width: textLayout.size.width + credibilityIconWidth, height: textLayout.size.height), { - let node: ChatMessageForwardInfoNode if let maybeNode = maybeNode { node = maybeNode diff --git a/submodules/TelegramUI/TelegramUI/ChatOverlayNavigationBar.swift b/submodules/TelegramUI/TelegramUI/ChatOverlayNavigationBar.swift index a4d474379a..f2aeb99cb5 100644 --- a/submodules/TelegramUI/TelegramUI/ChatOverlayNavigationBar.swift +++ b/submodules/TelegramUI/TelegramUI/ChatOverlayNavigationBar.swift @@ -6,7 +6,7 @@ import Postbox import TelegramCore import TelegramPresentationData -private let titleFont = Font.regular(14.0) +private let titleFont = Font.semibold(14.0) final class ChatOverlayNavigationBar: ASDisplayNode { private let theme: PresentationTheme diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift index 71a6fcb284..1edb702d3c 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift @@ -88,7 +88,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { self.panelBackgroundNode = ASDisplayNode() self.panelBackgroundNode.backgroundColor = self.presentationData.theme.chat.inputPanel.panelBackgroundColor self.panelSeparatorNode = ASDisplayNode() - self.panelSeparatorNode.backgroundColor = self.presentationData.theme.chat.inputPanel.panelStrokeColor + self.panelSeparatorNode.backgroundColor = self.presentationData.theme.chat.inputPanel.panelSeparatorColor self.panelButtonNode = HighlightableButtonNode() self.panelButtonNode.setTitle(self.presentationData.strings.Channel_AdminLog_InfoPanelTitle, with: Font.regular(17.0), with: self.presentationData.theme.chat.inputPanel.panelControlAccentColor, for: []) @@ -394,7 +394,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, - pollActionState: ChatInterfacePollActionState()) + pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(loopAnimatedStickers: false)) self.controllerInteraction = controllerInteraction self.listNode.displayedItemRangeChanged = { [weak self] displayedRange, opaqueTransactionState in @@ -486,7 +486,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings) { self.panelBackgroundNode.backgroundColor = theme.chat.inputPanel.panelBackgroundColor - self.panelSeparatorNode.backgroundColor = theme.chat.inputPanel.panelStrokeColor + self.panelSeparatorNode.backgroundColor = theme.chat.inputPanel.panelSeparatorColor self.panelButtonNode.setTitle(presentationData.strings.Channel_AdminLog_InfoPanelTitle, with: Font.regular(17.0), with: theme.chat.inputPanel.panelControlAccentColor, for: []) } diff --git a/submodules/TelegramUI/TelegramUI/ChatTextLinkEditController.swift b/submodules/TelegramUI/TelegramUI/ChatTextLinkEditController.swift index f05257ea61..9ac41cfba8 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTextLinkEditController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTextLinkEditController.swift @@ -401,10 +401,7 @@ func chatTextLinkEditController(sharedContext: SharedAccountContext, account: Ac guard let contentNode = contentNode else { return } - var updatedLink = contentNode.link - if !updatedLink.hasPrefix("http") && !updatedLink.hasPrefix("https") { - updatedLink = "http://\(updatedLink)" - } + let updatedLink = explicitUrl(contentNode.link) if !updatedLink.isEmpty && isValidUrl(updatedLink) { dismissImpl?(true) apply(updatedLink) diff --git a/submodules/TelegramUI/TelegramUI/DebugController.swift b/submodules/TelegramUI/TelegramUI/DebugController.swift index aa2b0ce6b6..819efdbc99 100644 --- a/submodules/TelegramUI/TelegramUI/DebugController.swift +++ b/submodules/TelegramUI/TelegramUI/DebugController.swift @@ -56,9 +56,8 @@ private enum DebugControllerEntry: ItemListNodeEntry { case resetHoles(PresentationTheme) case resetBiometricsData(PresentationTheme) case optimizeDatabase(PresentationTheme) - case animatedStickers(PresentationTheme) case photoPreview(PresentationTheme, Bool) - case alternateIcon(PresentationTheme) + case exportTheme(PresentationTheme) case versionInfo(PresentationTheme) var section: ItemListSectionId { @@ -71,7 +70,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return DebugControllerSection.logging.rawValue case .enableRaiseToSpeak, .keepChatNavigationStack, .skipReadHistory, .crashOnSlowQueries: return DebugControllerSection.experiments.rawValue - case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .resetBiometricsData, .optimizeDatabase, .animatedStickers, .photoPreview, .alternateIcon: + case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .resetBiometricsData, .optimizeDatabase, .photoPreview, .exportTheme: return DebugControllerSection.experiments.rawValue case .versionInfo: return DebugControllerSection.info.rawValue @@ -118,14 +117,12 @@ private enum DebugControllerEntry: ItemListNodeEntry { return 17 case .optimizeDatabase: return 18 - case .animatedStickers: - return 19 case .photoPreview: + return 19 + case .exportTheme: return 20 - case .alternateIcon: - return 21 case .versionInfo: - return 22 + return 21 } } @@ -462,10 +459,6 @@ private enum DebugControllerEntry: ItemListNodeEntry { arguments.presentController(controller, nil) }) }) - case let .animatedStickers(theme): - return ItemListSwitchItem(theme: theme, title: "AJSON", value: GlobalExperimentalSettings.animatedStickers, sectionId: self.section, style: .blocks, updated: { value in - GlobalExperimentalSettings.animatedStickers = value - }) case let .photoPreview(theme, value): return ItemListSwitchItem(theme: theme, title: "Photo Preview", value: value, sectionId: self.section, style: .blocks, updated: { value in let _ = arguments.sharedContext.accountManager.transaction ({ transaction in @@ -476,13 +469,39 @@ private enum DebugControllerEntry: ItemListNodeEntry { }) }).start() }) - case let .alternateIcon(theme): - return ItemListActionItem(theme: theme, title: "Change Icon", kind: .generic, alignment: .natural, sectionId: self.section, style: .blocks, action: { - if arguments.sharedContext.applicationBindings.getAlternateIconName() == "Black" { - arguments.sharedContext.applicationBindings.requestSetAlternateIconName(nil, { _ in }) - } else { - arguments.sharedContext.applicationBindings.requestSetAlternateIconName("Black", { _ in }) + case let .exportTheme(theme): + return ItemListActionItem(theme: theme, title: "Export Theme", kind: .generic, alignment: .natural, sectionId: self.section, style: .blocks, action: { + guard let context = arguments.context else { + return } + + var randomId: Int64 = 0 + arc4random_buf(&randomId, 8) + let path = NSTemporaryDirectory() + "\(randomId)" + + let encoder = PresentationThemeEncoder() + guard let strings = try? encoder.encode(theme), let _ = try? strings.write(toFile: path, atomically: true, encoding: .utf8) else { + return + } + +// let encoder = JSONEncoder() +// guard let data = try? encoder.encode(theme), let _ = try? data.write(to: URL(fileURLWithPath: path)) else { +// return +// } + + let controller = PeerSelectionController(context: context, filter: [.onlyWriteable, .excludeDisabled]) + controller.peerSelected = { [weak controller] peerId in + if let strongController = controller { + strongController.dismiss() + + let id = arc4random64() + let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: id), partialReference: nil, resource: LocalFileReferenceMediaResource(localFilePath: path, randomId: id), previewRepresentations: [], immediateThumbnailData: nil, mimeType: "application/text", size: nil, attributes: [.FileName(fileName: "\(theme.name.string).tgios-theme")]) + let message = EnqueueMessage.message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: nil, localGroupingKey: nil) + + let _ = enqueueMessages(account: context.account, peerId: peerId, messages: [message]).start() + } + } + arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: ViewControllerPresentationAnimation.modalSheet)) }) case let .versionInfo(theme): let bundle = Bundle.main @@ -522,7 +541,7 @@ private func debugControllerEntries(presentationData: PresentationData, loggingS entries.append(.resetHoles(presentationData.theme)) entries.append(.optimizeDatabase(presentationData.theme)) entries.append(.photoPreview(presentationData.theme, experimentalSettings.chatListPhotos)) - entries.append(.alternateIcon(presentationData.theme)) + entries.append(.versionInfo(presentationData.theme)) return entries diff --git a/submodules/TelegramUI/TelegramUI/GroupStickerPackCurrentItem.swift b/submodules/TelegramUI/TelegramUI/GroupStickerPackCurrentItem.swift index 2cd6ab35ba..c82c8346f8 100644 --- a/submodules/TelegramUI/TelegramUI/GroupStickerPackCurrentItem.swift +++ b/submodules/TelegramUI/TelegramUI/GroupStickerPackCurrentItem.swift @@ -94,7 +94,6 @@ class GroupStickerPackCurrentItemNode: ItemListRevealOptionsItemNode { private var item: GroupStickerPackCurrentItem? private var editableControlNode: ItemListEditableControlNode? - private var reorderControlNode: ItemListEditableReorderControlNode? private let fetchDisposable = MetaDisposable() diff --git a/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift b/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift index c3a37eecac..925b959177 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyICloudFileController.swift @@ -38,17 +38,19 @@ func legacyICloudFileController(theme: PresentationTheme, completion: @escaping legacyController.statusBar.statusBarStyle = .Black let documentTypes: [String] = [ - "public.composite-content", - "public.text", - "public.image", - "public.audio", - "public.video", - "public.movie", - "public.font", - "org.telegram.Telegram.webp", - "com.apple.iwork.pages.pages", - "com.apple.iwork.numbers.numbers", - "com.apple.iwork.keynote.key" + "public.item" +// "public.composite-content", +// "public.text", +// "public.image", +// "public.audio", +// "public.video", +// "public.movie", +// "public.font", +// "public.data", +// "org.telegram.Telegram.webp", +// "com.apple.iwork.pages.pages", +// "com.apple.iwork.numbers.numbers", +// "com.apple.iwork.keynote.key" ] let controller = UIDocumentPickerViewController(documentTypes: documentTypes, in: .open) diff --git a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift index 72fde23d43..c9e1264348 100644 --- a/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift +++ b/submodules/TelegramUI/TelegramUI/LegacyInstantVideoController.swift @@ -88,7 +88,7 @@ final class InstantVideoController: LegacyController { func legacyInputMicPalette(from theme: PresentationTheme) -> TGModernConversationInputMicPallete { let inputPanelTheme = theme.chat.inputPanel - return TGModernConversationInputMicPallete(dark: theme.overallDarkAppearance, buttonColor: inputPanelTheme.actionControlFillColor, iconColor: inputPanelTheme.actionControlForegroundColor, backgroundColor: inputPanelTheme.panelBackgroundColor, borderColor: inputPanelTheme.panelStrokeColor, lock: inputPanelTheme.panelControlAccentColor, textColor: inputPanelTheme.primaryTextColor, secondaryTextColor: inputPanelTheme.secondaryTextColor, recording: inputPanelTheme.mediaRecordingDotColor) + return TGModernConversationInputMicPallete(dark: theme.overallDarkAppearance, buttonColor: inputPanelTheme.actionControlFillColor, iconColor: inputPanelTheme.actionControlForegroundColor, backgroundColor: inputPanelTheme.panelBackgroundColor, borderColor: inputPanelTheme.panelSeparatorColor, lock: inputPanelTheme.panelControlAccentColor, textColor: inputPanelTheme.primaryTextColor, secondaryTextColor: inputPanelTheme.secondaryTextColor, recording: inputPanelTheme.mediaRecordingDotColor) } func legacyInstantVideoController(theme: PresentationTheme, panelFrame: CGRect, context: AccountContext, peerId: PeerId, send: @escaping (EnqueueMessage) -> Void) -> InstantVideoController { diff --git a/submodules/TelegramUI/TelegramUI/NotificationsAndSounds.swift b/submodules/TelegramUI/TelegramUI/NotificationsAndSounds.swift index f2cfcbd9d4..117eeb2e3d 100644 --- a/submodules/TelegramUI/TelegramUI/NotificationsAndSounds.swift +++ b/submodules/TelegramUI/TelegramUI/NotificationsAndSounds.swift @@ -599,7 +599,8 @@ private enum NotificationsAndSoundsEntry: ItemListNodeEntry { arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) case let .userExceptions(theme, strings, text, value): - return ItemListDisclosureItem(theme: theme, title: text, label: strings.Notifications_Exceptions(Int32(value.settings.count)), sectionId: self.section, style: .blocks, action: { + let label = value.settings.count > 0 ? strings.Notifications_Exceptions(Int32(value.settings.count)) : strings.Notification_Exceptions_Add + return ItemListDisclosureItem(theme: theme, title: text, label: label, sectionId: self.section, style: .blocks, action: { let controller = NotificationExceptionsController(context: arguments.context, mode: value, updatedMode: arguments.updatedExceptionMode) arguments.pushController(controller) }) @@ -623,7 +624,8 @@ private enum NotificationsAndSoundsEntry: ItemListNodeEntry { arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) case let .groupExceptions(theme, strings, text, value): - return ItemListDisclosureItem(theme: theme, title: text, label: strings.Notifications_Exceptions(Int32(value.settings.count)), sectionId: self.section, style: .blocks, action: { + let label = value.settings.count > 0 ? strings.Notifications_Exceptions(Int32(value.settings.count)) : strings.Notification_Exceptions_Add + return ItemListDisclosureItem(theme: theme, title: text, label: label, sectionId: self.section, style: .blocks, action: { let controller = NotificationExceptionsController(context: arguments.context, mode: value, updatedMode: arguments.updatedExceptionMode) arguments.pushController(controller) }) @@ -647,7 +649,8 @@ private enum NotificationsAndSoundsEntry: ItemListNodeEntry { arguments.presentController(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) }) case let .channelExceptions(theme, strings, text, value): - return ItemListDisclosureItem(theme: theme, title: text, label: strings.Notifications_Exceptions(Int32(value.settings.count)), sectionId: self.section, style: .blocks, action: { + let label = value.settings.count > 0 ? strings.Notifications_Exceptions(Int32(value.settings.count)) : strings.Notification_Exceptions_Add + return ItemListDisclosureItem(theme: theme, title: text, label: label, sectionId: self.section, style: .blocks, action: { let controller = NotificationExceptionsController(context: arguments.context, mode: value, updatedMode: arguments.updatedExceptionMode) arguments.pushController(controller) }) @@ -758,34 +761,22 @@ private func notificationsAndSoundsEntries(authorizationStatus: AccessType, warn entries.append(.messageAlerts(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsAlert, globalSettings.privateChats.enabled)) entries.append(.messagePreviews(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsPreview, globalSettings.privateChats.displayPreviews)) entries.append(.messageSound(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsSound, localizedPeerNotificationSoundString(strings: presentationData.strings, sound: filteredGlobalSound(globalSettings.privateChats.sound)), filteredGlobalSound(globalSettings.privateChats.sound))) - if !exceptions.users.isEmpty { - entries.append(.userExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.users)) - entries.append(.messageNotice(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsExceptionsHelp)) - } else { - entries.append(.messageNotice(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsHelp)) - } + entries.append(.userExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.users)) + entries.append(.messageNotice(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsExceptionsHelp)) entries.append(.groupHeader(presentationData.theme, presentationData.strings.Notifications_GroupNotifications.uppercased())) entries.append(.groupAlerts(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsAlert, globalSettings.groupChats.enabled)) entries.append(.groupPreviews(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsPreview, globalSettings.groupChats.displayPreviews)) entries.append(.groupSound(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsSound, localizedPeerNotificationSoundString(strings: presentationData.strings, sound: filteredGlobalSound(globalSettings.groupChats.sound)), filteredGlobalSound(globalSettings.groupChats.sound))) - if !exceptions.groups.isEmpty { - entries.append(.groupExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.groups)) - entries.append(.groupNotice(presentationData.theme, presentationData.strings.Notifications_GroupNotificationsExceptionsHelp)) - } else { - entries.append(.groupNotice(presentationData.theme, presentationData.strings.Notifications_GroupNotificationsHelp)) - } + entries.append(.groupExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.groups)) + entries.append(.groupNotice(presentationData.theme, presentationData.strings.Notifications_GroupNotificationsExceptionsHelp)) entries.append(.channelHeader(presentationData.theme, presentationData.strings.Notifications_ChannelNotifications.uppercased())) entries.append(.channelAlerts(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsAlert, globalSettings.channels.enabled)) entries.append(.channelPreviews(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsPreview, globalSettings.channels.displayPreviews)) entries.append(.channelSound(presentationData.theme, presentationData.strings.Notifications_MessageNotificationsSound, localizedPeerNotificationSoundString(strings: presentationData.strings, sound: filteredGlobalSound(globalSettings.channels.sound)), filteredGlobalSound(globalSettings.channels.sound))) - if !exceptions.channels.isEmpty { - entries.append(.channelExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.channels)) - entries.append(.channelNotice(presentationData.theme, presentationData.strings.Notifications_ChannelNotificationsExceptionsHelp)) - } else { - entries.append(.channelNotice(presentationData.theme, presentationData.strings.Notifications_ChannelNotificationsHelp)) - } + entries.append(.channelExceptions(presentationData.theme, presentationData.strings, presentationData.strings.Notifications_MessageNotificationsExceptions, exceptions.channels)) + entries.append(.channelNotice(presentationData.theme, presentationData.strings.Notifications_ChannelNotificationsExceptionsHelp)) entries.append(.inAppHeader(presentationData.theme, presentationData.strings.Notifications_InAppNotifications.uppercased())) entries.append(.inAppSounds(presentationData.theme, presentationData.strings.Notifications_InAppNotificationsSounds, inAppSettings.playSounds)) diff --git a/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift b/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift index 9b9ca1a613..e9a787018f 100644 --- a/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift +++ b/submodules/TelegramUI/TelegramUI/OpenChatMessage.swift @@ -7,6 +7,7 @@ import SwiftSignalKit import PassKit import Lottie import TelegramUIPreferences +import TelegramPresentationData private enum ChatMessageGalleryControllerData { case url(String) @@ -18,8 +19,9 @@ private enum ChatMessageGalleryControllerData { case document(TelegramMediaFile) case gallery(GalleryController) case secretGallery(SecretMediaPreviewController) - case other(Media) case chatAvatars(AvatarGalleryController, Media) + case theme(TelegramMediaFile) + case other(Media) } private func chatMessageGalleryControllerData(context: AccountContext, message: Message, navigationController: NavigationController?, standalone: Bool, reverseMessageGalleryOrder: Bool, mode: ChatControllerInteractionOpenMessageMode, synchronousLoad: Bool, actionInteraction: GalleryControllerActionInteraction?) -> ChatMessageGalleryControllerData? { @@ -128,7 +130,10 @@ private func chatMessageGalleryControllerData(context: AccountContext, message: if let file = galleryMedia as? TelegramMediaFile { if let fileName = file.fileName { let ext = (fileName as NSString).pathExtension.lowercased() - if ext == "wav" || ext == "opus" { + if ext == "tgios-theme" { + return .theme(file) + } + else if ext == "wav" || ext == "opus" { return .audio(file) } else if ext == "json", let fileSize = file.size, fileSize < 1024 * 1024 { if let path = context.account.postbox.mediaBox.completedResourcePath(file.resource), let _ = LOTComposition(filePath: path) { @@ -262,7 +267,6 @@ func openChatMessage(context: AccountContext, message: Message, standalone: Bool if let rootController = navigationController?.view.window?.rootViewController { presentDocumentPreviewController(rootController: rootController, theme: presentationData.theme, strings: presentationData.strings, postbox: context.account.postbox, file: file) } - //present(ShareController(account: account, subject: .messages([message]), showInChat: nil, externalShare: true, immediateExternalShare: true), nil) return true case let .audio(file): let location: PeerMessagesPlaylistLocation @@ -335,22 +339,25 @@ func openChatMessage(context: AccountContext, message: Message, standalone: Bool }) return true } - case let .chatAvatars(controller, media): - dismissInput() - chatAvatarHiddenMedia(controller.hiddenMedia |> map { value -> MessageId? in - if value != nil { - return message.id - } else { + case let .chatAvatars(controller, media): + dismissInput() + chatAvatarHiddenMedia(controller.hiddenMedia |> map { value -> MessageId? in + if value != nil { + return message.id + } else { + return nil + } + }, media) + + present(controller, AvatarGalleryControllerPresentationArguments(transitionArguments: { entry in + if let selectedTransitionNode = transitionNode(message.id, media) { + return GalleryTransitionArguments(transitionNode: selectedTransitionNode, addToTransitionSurface: addToTransitionSurface) + } return nil - } - }, media) - - present(controller, AvatarGalleryControllerPresentationArguments(transitionArguments: { entry in - if let selectedTransitionNode = transitionNode(message.id, media) { - return GalleryTransitionArguments(transitionNode: selectedTransitionNode, addToTransitionSurface: addToTransitionSurface) - } - return nil - })) + })) + case let .theme(file): + let controller = ThemePreviewController(context: context, previewTheme: makeDefaultDayPresentationTheme(accentColor: nil, serviceBackgroundColor: .black)) + present(controller, ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } } return false diff --git a/submodules/TelegramUI/TelegramUI/PasscodeBackground.swift b/submodules/TelegramUI/TelegramUI/PasscodeBackground.swift index bbdb258b37..5ace21fe21 100644 --- a/submodules/TelegramUI/TelegramUI/PasscodeBackground.swift +++ b/submodules/TelegramUI/TelegramUI/PasscodeBackground.swift @@ -15,7 +15,7 @@ final class GradientPasscodeBackground: PasscodeBackground { public private(set) var backgroundImage: UIImage public private(set) var foregroundImage: UIImage - init(size: CGSize, backgroundColors: (UIColor, UIColor), buttonColor: UIColor?) { + init(size: CGSize, backgroundColors: (UIColor, UIColor), buttonColor: UIColor) { self.size = size self.backgroundImage = generateImage(CGSize(width: 8.0, height: size.height), contextGenerator: { size, context in let gradientColors = [backgroundColors.1.cgColor, backgroundColors.0.cgColor] as CFArray @@ -27,7 +27,7 @@ final class GradientPasscodeBackground: PasscodeBackground { self.foregroundImage = generateImage(CGSize(width: 1.0, height: 1.0), contextGenerator: { size, context in let bounds = CGRect(origin: CGPoint(), size: size) context.clear(bounds) - if let buttonColor = buttonColor { + if buttonColor != UIColor.clear { context.setFillColor(buttonColor.cgColor) } else { context.setFillColor(UIColor.white.withAlphaComponent(0.5).cgColor) diff --git a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift index cf870645d5..176542901d 100644 --- a/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/PeerMediaCollectionControllerNode.swift @@ -279,7 +279,7 @@ class PeerMediaCollectionControllerNode: ASDisplayNode { let selectionPanelSeparatorNode = ASDisplayNode() selectionPanelSeparatorNode.isLayerBacked = true - selectionPanelSeparatorNode.backgroundColor = self.mediaCollectionInterfaceState.theme.chat.inputPanel.panelStrokeColor + selectionPanelSeparatorNode.backgroundColor = self.mediaCollectionInterfaceState.theme.chat.inputPanel.panelSeparatorColor self.addSubnode(selectionPanelSeparatorNode) self.selectionPanelSeparatorNode = selectionPanelSeparatorNode diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping index d1e1106e985b472ca36a2ed9438ef747b7265552..0282856f5296f56f4a8cae470eafeb206bd21221 100644 GIT binary patch delta 35716 zcmZs^2V7J~_dd>C8DN(#3+%FemtGdIcSY>4ESc9tdZncd)hX zSQ=d!Yqk{C)y%1E_E(oR*Hq2+H#UXfe^&gY(9#?;ZEI&>HhQ^Trp=AKSp1BrY-%p^ z`|EroP^)$UazZ?Gsa?9&i@##jmAAxo!*P!G>QI+x}S z_R=e%aV(Seg*sUloes^=vO}n7ok=X2$Kt3Pk77AAkh^TTke81g>94M-ELE@Q8&yA@ zAs+q_Q=^<9X%S<#iIgDb$4Xh`b!@ayW3bIx0Yr-w8FExf|vwpNb z+|7z;H-7i0Q{maX7*dIJ;YE{SP))60Ha39rA~M)O`orch46U19FY^Y|jS(I;gf>QG z@u5iP(#8c=`XR#1h7mL5vEh_&@URgy#*ocM(n9<_iZ&S%d5Mx;8f&A$uSQ1}&#bJQ zp`KAnXAM3!n(Rg!9|IXHo&VV!Ily06<5vSvMwLb{E2mqHg?uc^GsP7XOQM5&jC9Nx z%f``Zqg@*xLUA=-%8QKQ*Qhq+_@AE?WydQH8D<_$vWFW1IYqb!gN#qNZ+kaeYJJn`Tmcw4K#Zezc9v zq7nE#n`)vnSS_u_?>Y2xw3FANx=9qSV~G)k9psd$521cPIB2KG7#(a@W;alNjGfJ; zkuhC)Bhu+K<)npf_|wGYa zWQ)z#=BtN@sq0x7?eRy3)yYRJpoOs=+4Zy|*353C_hYlPg&}m|(F8hoI-CmDMMmM< zrQBltWQnayn4OB_60{}gxmxC;^UK0$QCtLHiek6uTf(d{qx{#6YMC=lfAUTATwDi! zGfLA|ud-7_e5`g$h=@;RDUs+l%xsi|+)91oecEjyqR`0_B1hKORadI@dpq47pTd_x z!bKN6mi#h*?erS|5PxlhtaS%|ifdeYa%7+#YA2>$7@SP#TGMeRw zcf#KxcZE>=33GU3i%i^2Cp8mIYH#Mtk#f_iQWGt2Z{jPEa?)l~GQHM5maU`%?OkjQ zoo%1a??H)0T<*eb9DjwZqaFz^elPyAV@X+KTBqK9$a0CoRm>JOuitv<`|r|k(@ z>;d{bA&ot_#*}GU53wlxjPy4(RnGAHf=hA(6`69_Mw(;FXPaof$;&p=UQ-@>h|ZZZ z*~8FA_Q)~*hWf^4R1SHB`Xzd`NA)k8qx9qBbW5UJdpbnKc$gz{aBcmxN;Pq}(BVWc z--=33+A+yQQAzFDHgYDp*mmldl*xCX#7yzOB^&(nn>)zHpOJkec9*coHA4(xGUwUA zTKOy~g*{KdC1vmzkee#p-I$rWB`5F~k+jgM!lcNemd5(VN?GY8nwy-&U&UYO=KTq@ zF*%X%L@Jl!ZnTMQK4zdVl4ICwbSBxwc2SHuUE3W(4bNJr#LT^WA=w^3W&Y;onz|WH zzClH!D~8rJH!5ZI21+~>zcE3a^sxw$oWf$*o3z=S#@|9ox;W{?T>Zfu*Yj;8r2z=8 zEMMz*y@Omig@OYS(7EO41v!P@4G~jsX2~?nVq))6g(Z!@k6bfd7?wZ}TB7(qq;e@f z%1X;;MEz&s?x$0h0sH{Uy|lWwi-x5bwS&rz(5w_2JA~d%Nf_X-^~1mg9xfkvgq}-D zWgpOIDOT;n5L#MmragZ~syX)&IjnZ=;}F`>&p{;vBEfV zXhSWD%BChcO?;&@>+Af!;EMT7pDUHuLoDPNePvD4j$<)C!_1;2ip8ksoS;rN7yFXN z+Fbl3#7s2TWTF+eaQ7*s;_y>E(_b~az6Fg}E*OR8krnb4elYgiQs}TPjD1Z zq5Xs5`qV@_<0DizUZj)GbasitT^{X92p#F4O#NN$HI32cmISJCr8wH*b>h(`)LrvT z-(Y{;Apf++mdZw@`8aKMrSmX|ctl}eW)Z!rS(Gw(5y(pg1agzrZN&0PcYB$UhPmA= zifY{+7DFrD={y!vDdLoi*}|mF42h%Tkcg+t?(V!j%A88+m3rFS5|GkyjIN7{@j8`N zO2L?Dk;kDWGFtg&62--|=MW7^rhOhaR{R-HF0;^%ZYJ`1V_6FI@g{3FCbcZpd&5%f zkd@}Q7zPrcYmC3Sa<-Z&4qE9=)tpR>o&*q7<7%(E%SB&$)68yEibSRI`j$q0k#<1} zi`Xw^i_Lbn%R|$lw2~y{R@ig=gg_BtM-*uHP+YGj#Wk`kB+2eaG!jN z7`*`sB_%x;fDRyU&7@=+nC{>ONO;8d*}yG}(i3XE%Y_u_JdaL@GAsd0*;Kurv z2HyxjzFqw(>&_%co*NLZUtSg<+^jqwpAG3OeFD6amjEnxFwe>A=xkmZt0$As%^IkS zFOAQISPweVCtcj%j>WWxa%nEEudP=grx9f)Vxh@$RfjY&T6#KN*iI~)+hwI6iv7VAgL`H z+oVBN;(?KSUc!Yg?L-8FCwKFUZwySDz7HEdglAGP+b?)$U-# z_BrxLw!qBE+&dwih<~v|XdY41)a)BuH?yYNUsTmxQ?Fk0E(q9ZRiVu=v$9d?i@WJ= zyw7slU1--m&hs=1ZKI@sANa(3wKT8)}=9gnJSu9;p_RViEa4XX#ntd_4x zQg4Wrqgj-(wG;254ISKUE$!)$qpf2!_iQqSc8qrj$V zYL&FXi2G<-$8>f--O*R(cKEg(>a{@_DJBZ+%$!)(j6L&J^WbUK z*qH-n+SNIRZKVU9Gx;{;nK6IOhC$;8;O~&_jQR~S8@tKBci>kZ2B}PZ zy@T%Q63?GSDup(jO^K+lRzvz6?eCJupGS5QEsZr92hORiQ84udvUPQ{m#9zIBK9&Z z>6*r0g-|l>?w&+@x<;^_^j_B-?KP;YHTV=`w`9HxD#862$C)-W+_`Qc# zc5}16uuoq0I(^*D!``63x;cOkle>HQTc`zO^^jHRnzyNldf3=Ox}ir3u-v*H4t`iRDdHwEtFn?u z=(8RY$X)J{rhUl7%6=@7di0EDAJLGW8SE%E^t7^1>F%C+>@#|$r;~k7pZ9cV$JpA{ z%p^*B0oj>)CGz8FG?7N{(?{`3q`YFu8!)ytz2ewOy1rKiKZQ&O9e&5HF#1=FPW_ue zCwp0e!T#-)V*eJ!Qp>fHBg0ynnn%@NCqLqQ>exG*{eTJW(|&~Eyb5R~53H_fL#9ff z{v@AHhyHTLHMQ+4Pa`v)Sd~e2XBay}6Z?4BSz6R5gP%jWm3sBC7)!CwQEKo! z9q7}AUqFFPEWMtkw4teAD7UXm`;CdECTz)T`x@ErbX{K;`-AR9{-2CCUP-33r_AbE zf6>{#Ndx{yGjfBVZ}NjEzPM7~uK$Ztsco=Yr-StH4XmqbT+kpD1B|`wflCmGqt*Qq zRFju!YQJ19M57h`+>Fuoe!VnJqtX`~RQd>~_@YG4HMzZu_b{s|@GR9eVaWENIV$Sr zQ7whj(xR>`f|gcTBAV2MF=!H_i*3tUoKaCZM$~~xTElFukteNLWBO%!utf5JqOvS`MI4}_u+cyIcH}- z?;r>B(Ud_>aB7S2cLA**1mYH&B+6EEka{I49;Ye)p|g_J{V z@4;+s`l&b759#degA&=p!F`b0MzrFJzVybB9Kf=3L#(_Ak|`40MUSkksgp}UKCM3$ z4$Wi5vY*0rg*bo~4^7qvYGU_RX&QPMA_i5?m!gAc&(JJ3n0^}S(}rkb^+=4HRB}UU z)UXVow|T?T!O5*3md!`tQ5LEG4PzV1>*Y|7q%*@D+9*x8`>x?}tb_`Or=^raQb*=M zN5zr^7%-ckq2PMAhtj?7|JWEkaQ)s#KT2~;<1R4SWJ^`mmx40>>sna!l< zM`dU=8f{*gM8A!Sv(83aa?h`pLGh5H@`@1y2bIfysU>Ggx_u7HrD7c0Pz}@P)BgcW zh^&x0npV;oxbEH(2cHYM0%c(8UNF#?B?;+`$dOt_*EzZg#@iNERe{Zs)te!ZEb`M> ziZZ?}NP@GD#mJRLv+HPbX;(HMBauLlm$nCVd$rUJ`t3w%AzMhXqb=GZjYi*?K)pw| zXG^GbbOu{W^GDm+O|)*bSG!rGD=kTi@Q5gxK3zWU7CJRLh22X3j?Q%5hG!)pPk$Mm zXZ7h@Fe!RF4H%Qj?w~nida^s|i7{Sw7abUr&+b-3q_Zl^$zGPqSD>LxVd=zjlsQ{T z^U5*-v^JJ`9IH_z;gOs+O};S-fV9s3HS}efi_x0$baoGvpo^ZK8bKxHu|QcB<*6Ok zp{@ikdfkyVO-%uYtTn%CreBg4&Go7)ACLoTrUT_M+JhP>S%sVEVtEu_j~YJFcLa1F zZA#8mcXL!*p?M7xoBs7?;f+rOD$m*<*CuIEVJQCcbcCj_(>5$)CVeZ4w%{FNI30tXk0e zK2K_N;b;PdjZa}ulY6|CZK2-dZG0OlIAAyv;}ut4*3vqAw$m-+)7TDra(uS-j7HmT zvQkb>w3zC0;?E zQ`s##eN7~P70DDjw+nmD2~hx5_6hl5;6_fcgMphpAp;PKCb$8iprGjBgfPIUk0*He z8}jLbWx_64uQdQkrCsY{Z_yz9ew$`on*jv1^4gyKU5F*p(z|rb@*YyI0Oc4Ru20za z$viO)xT?=YJKIl_CT3{|G_@hwG&RZ~Hzervkb|^sq6^sS@WdQ;nEsuZ&5lsUqzpi+ zl1WznA)2+TkIcgO&Z!4h>Aye@)<-C~+AOK5B-{HKCAZV}Wt$2kX;!sSGq=;>!`;=fJOvHGZTGI7UaOAM z?Clgj-Eh%Br>heHV6Rkn(_HN&Ar`6QHaFxgf{kKkL%Cn)Cm?)M5GaIRnyWU1QYU|dj;Fj`NOigU`G8T0~^TRw4^4L_koCo8nO~; zS4|}7u=i`6Ai{pCvBTvVG0V=2QSK6l=K)f6eIia9&`ueUS+f$rg)N$u%?F{}OY!Xz z>GfHOe6Ze{J1MfUc?kGNsZEB^rCFKU&~{>LBouw$*>Qkeqpwe(4fCU^VRnKxqMbN5 zj#+8b>?pWHx6HQi610*geO2_$>;ztlR01tsoItU)aBfp_trPrN*IGARo)c=*0i%}G zW&%b%QR}vhhiuR^`U0q0cEmOGb*-0Qi&F3+i;`nN8o*RF>zk=bR4^xlPex&Tu_KaU zIpKd(Xx#Ji7_RzQJ{u|JrBSTW z<&j}DwLZdJi(I*W+nC;tNQKOyCH39l?|ix5!5Zn)dOK^PKkA*l8RF>y>M5T3G#Gdb zazL|=HMcnw=Cz|E6N7%sFk0DQ1kSp@!3&JFtHB10b*#a|ZlKEzb~rk1bKSsOedeZn z7NMmep7BW{q@`&P_y`@CEJh*Nb~v`-xda}2X08W#?BluF?B+F%+3Xg|X|zY&3L%Ll zsUgM`bsG|LF~Z9DXooPd+v(QERBc&1np&P>ENPypkK7$}sL|uN6T(+1QgBy+z4=`z zu!%i6%o-hBICmqC zJl3Px=3EO=`L*TO)t5E<8;V-sduUak>(mkvy9!u%^wl#)(57Y&zZX?A0+zx^-??J> zeaNwh)$ag=#kNF(`m(lU^9NO?+G0*=0Z>CSi!StY(aM%Mwt+Ua_~79@gx{O!a!Wej ztXf^2WTgS~610cfQQhElT0AdG`(L{t84^uf=f%MN`P#e;{s_e3-8LoAzw=_WN85?K zWy~Bk#y_Wio<3raQ^9qq_9q}FheT(0VMySv3L2m%Y3_BMyiY?y?UViW4YmGJ@I+4o zJs*rA*n-kbal?H8JKtXy$G0JwrOcvvz6n0ly!qYv4&<4Yb8PYaNcIffH9wm_hrHy~ zs}kwZd;@yTvG71|ct@I91ZM8EVzOOxG;%YOk~tS2Si0 z>nbH)r3V&t?w)k6jTeOtsg-Cbt<&s4ZS+A4T1m$_`NBjSjG7 zr8lMn%UyS)L~$E$%;F!awl~dZ7DKS#KcaIe{+N;%y0uT*Nm76|&5xuB3*$hV&03h% z`%~1BU!m{5M%4pM)wQv!p9M-=eQIU?hGu^-7U6R`ywJ@~!2Biap&fCHZ0rllTa?bf zM8#ZX4aLc+jEmhi77vE)?nQa*D|%&-8xZaIq7?oO#Jr;DadcGtViW%s$wb*XiPU#- zIQxzUFLot;k4%OBR6iH#RMbzjaIs4}t&d&ekowwc80uEeTJXQEgkQzuHmZfb=%4`FA@|^m;FsEREp*pox4eS2rzOnwWACso=Nx2G!Om;QKE! z(=hSVq5{DaC`I2?z%=S}lY_OR$v63c-0r@~4dk}o$by8dD!M#m@g{*o<`3%^vV#kKEi5K<=}f(^>4ATRLcQq3}!EWq3}T z){CdgTU>x~H{FuYO=#93_XyS~$t37bn50nQUI|lHU)ro3A% zaA^*{)!|J+T{+ACvyX0FD^`>y$?cSh9=z4SZAik~_cb``TaDa~lv{Toe|KwqHz$&E zZ77Carx^mh=0b_GJG#TQ$#?Z~^sKqXO2ckTPW3`c?q`)EQ%sZkYY3bt^}4G#HI#~W zCs4}NIC}iHSb)cuZnN`rRC7s?9aZ0gcnP(o$_T~CJCdZAFX-`Bdyq`XW(D-Rfd(#U z51={ob_q0B-|hg=+7EsyDLD&(o0(E$gCn3e}a)rWeA3gsQ}__}q}r>ZPRF7=K5cy$e!O zonJLYiW(Yqr$JY`<&JdT6B0J*)HW42)`J0S2sYFU1?i%)g1N+dX)K!cCMH~MGo~-) z-IPvW}9efa4aH`0sHYRW|#ogu6hJ=cSuFwU; z?uz0=A(f)sz)=J61`WD38b%B6%0s~1Q+K7pmwNavt5y;!mM&waBzVC3S60oQ0rz8F zwfy2z`J%LWn1{OG9mz){<)+QyV2!@!@ujtuRsNaK8aj9w6DqeA5e=%R#)gW+>oISi zzB>|7@};{yY&;#i+Y2V{%H2LTfqct5fP<@Co~lg@6?311U5ya91p^!0BABHSJjz_H-?-~775*4>Qdn58`wDr3IFI>`zT({N$ukDx6logL~?{Ntl&-vsAqIBgS2p2tw8G^cI_ zRX~_8xZWREFHxES&xlCSp1>r0+eW$f8Z1wuAh^M5@)cEAL*L5hJw>DL%?CNR=-wP{ z3v_9~O%q-%3%7=f9WN=;9gjb2q$%?w5I7fiUoJpk@B6aA)6KZg!=FLZ$~77h*cUxZ zTko@J&xMLr24*$($Ldu(>gVageQy4OlCGbiFQ6Bx>;38Qc}}@MtH;YIk!r4uv>sM6 z6k&~W99}`0`e;SA$S?7)N!(T^H4lUj4q!SM$z(;!F0VkNf_y^tETcI+*Gg3|@T^mM$ zq>J8|1Gj1SjUIN4CT;Yx59n^&Mi)Tc;f-nhOSEC7BX1-}1%kcgh@K?-rjG0s zjoy^Wzk&d`4V^@mF4JwBy!;zv>a@Vmn-aBer53ZKDoy(xN)#$+Xc*ftqY=TizA-Iz zbpd<+1NGaSq5Y_|UidWSlRr(%HhZ-*p>$=s)lfe08s&dDOGh?av~v=@B#DNXm>yPj zfh-TX5VY0D%zDYyA4FJ)cepL{xq%WlsmOIX3@HoDr zT7RPo$qS>WAGYyul&h#Lv7wgzH<&Vl*dzG}aw~i!4}4z5BOV?FVY5JZ8@QiwVMt&b zO^-ezqu<_p#G%D;N%gFGG=ayX%tL*r*K95wo_~$$)bWYrwba%zzGBwop>^acSR~ukpdBe2P%%R8%00Whasx%sT9_OW;~V7 zdeVxg3Ry4O^OOUC?8~RTtPiz&I+OQBT@~<{M9v?LRQj|*>xWRt0~VYq0P7{+xWAf# z;j6Fy6St(oVcKJhTN}pd^0egti>8Ki zI8V&9eoF#?+Kw$QJ`ycuf?KlCxh+Y26jBx$%3}=qMMY_)6U zyw!Gyz6%)#yZ6{u7axb}I&G6Q5)p3F#v3t+g#QO$dl_tdKyX^ z{B=X?##dhNmtTG@Rc&+giK@NT3o$J>ZHt93b^EqlZL%74`g>b+$`q8VEt}5GmkgIx zE0CEh*mEo``@dmfQ&Av!xMIblk8EkGsgm-Q$j-;4$)I)HWBD|sJj#i)YkMNV;NI60 z==<#n0E8E}J3tzy>~QlLkion)B+}R&v3#aVZD>fQB|D-KLbqZ^CQd=TxFa19?~5HW za_;huR9+7$6&*tTo-yzSq-+xK#TH|8Ti+aX|IVexXY#-XZh9sMY~cQ9Jgk|{J(I~> zAg{kw!Ly0*s}6cL6VR>xStp=d5uy|xe%1u|_VTkfwunA?HkB`iyiQ+T`+U4Xj-{OC zOUd_~1(0pXb520Ena_Cu*_J+@LXSKb$8SXq1OzDeM;yD2PCeHFY@X@)T(*pgp6>`p zYRmIZI8xU>?*c-5;dz&KH<$P=C9brl?rQ#QIcYDXX)7>o;Mnc;LVKJoD0!hfUxoG+ z_7jgkhMmc3+V(;^UxUnaTGbPWpk9d3h|?*}LY^1fJMKY&1ONl-ud9=heK0#ZTPZ(d z9gTT06R_=u7xUS@^wf(Eb|1a}qDQ-*)86kB$Q2Pv{3SCOI>$@7Kx@Navh($55BmNm zd#iQdfE=4n=RN&W3^3cPFFCYLTrqOj>o-L}RO`?kSr6 zO1}0qS7fgAyS(yB6uhRpcBj(mR}9)#F1BrlhL!Gk`>O`N4bR9@4DH}oB{etc)g0{^ zu7FqM_?d`el8<_p!^4tHZ@=o$p5u~Mq<>zuCO?m=!SEV=sY%(FD0inD;b)_E7P41p z$xe^9lZ#XTgE4qzr-Q$SI{GX+4~z8g&RFO9^AVG*Yic182>7EtT&@ zL8^?Kitk@pC!@~Qp8Iv=>Ssqr)X%6yRvAuE$2X(}o$VQJ2GDYaH;z|~FNmCD~y&7Go@$f0#XEBqd9-Q`3O+reEnxLHr{vhzcb%2B6N=u9Vr zSlNkjgLJjaR*z7>-5r6wns>X{hqQKgCNS5o-Ff_D)NxSdO$p+D7t{AXpQwlJ&$P9& zc1Nl2o^<{h@@-;w5_)RMo@ijR6?@Y7F=S>0Pj#7-k0U9&Tz$1q;sE*Z6Le{h7og3( z*VX4FB&25uwz9r<9)h+Sah3$c_@LlE`4j{svS|%zLmWi#o4=yPdnH%5d2b>A269fy ztFX5Lr*G-<-W2USP9>jPjA&Cm{ChPaWYAqSO?f>A0daF)w|D&!wIwqj@aL;-qZ+xN zP#~A#)l@{w3`Er-FXS|IV>CLz>?Hn@eGo2Yv-~AwJkoY>{n#1ijqBtqHOwX zu2mG6!H>;&BOY$r1#j5+FDS?fu;vkw<3Qx<0TI8^fj82$-?@yuOzkdL{vVK3YfJ`I zm4OtJ2Z~y$sz0gVO&>sF1%CfcE8fiG|3DrmSTLVT>P9XYuOGC+X@xhl_`fLf(5Z`N zN`EV!UqUKZ6m3TY*p#>8*=1^YtAJgh&2QPXkTBZ)Ryt?+AcXVJx6uu|3{0cAx6^q$ z4c_8ylRXqEIaaNU|0;fy(~`G4XklT&2s^PLltqb=tC#`o;F-6*UkYK;9$ibQ*mCgwEvv~oZGzgPG=sEV!Lva z(TI0rd3z}>qv_k`2Yhw!I-ndjy=&1D!^F8pmYf)zdO_o#glY-0|5A0+YDQYlht|VI zBM|UA1Vp$ToD_1tR|p5;==Z!%8wBM*4XCNCt)HQypNpzTR8I3N_R&uCUWVofqxe3# zfD-`AsLJHgYFEZo7Z^^i1H6cC7b&)j-mdYQ2E#8Xv5vUhNmA@p@ z>+dIn5B&W7G?u<*UnT(JrUT#^_Q`0xk^6FZ7HalXu}uh`75NPT|6w-m*_R8(@60|g zg74z@yFK|3lxy<;b4EhiBIIMASH9oN3n8YTM7?Lfg>|5<`+Yd`dSbsr>l7xY?g4~O zJYYslp6@^*V)CXQa3Use34V9OdwF?x)V2s`Sb&S^Nk1Ow42bAF*n#&(kqc*YZBc=9 zP4bz2XwgA80_`>(bUTV5AP1ps<6JagK*fZTv2qal)0YR+>;oYpr(&`0P*&z9=uaL* z?nBu?iX#rW%tIh2HI(j|#NJ5l3xT;s-G|}<8;=~a!UKHf zkWCwf^N?_mx30hv$~&BvS_=6D)GKPn;hLFq{B_ME{dFxqxs69|$Y>Pf_|z$zYJ3b* z**LUhr56q-!C`#ha4IiHUXtWD+nD>YVPwy>Qo)fp@P0){B;)5llBrDylla~q-dW9# zYw6h|X?!ATt0O-Nk{#6pV1k6nBs%o5ja(nZA|kKg0|#R9NxuKJf5r z)Xw_gMPCUeOs79`ffS58VF{mCBVXz| z%Kg|2H*x954!DWyKkmw}M`OBoeD}w(0F;M5&H!4k#VMd>teK6QInLPD-}$&&`$;ei(p@Eohca2!5?j(%#_ zR)>lF8?X`CvotbJ9_R^3tdULVII{O=;hd24kSjKcDn3gv--DFgaRdS{%Vz6NrL}bD zXPwzP+VfeeOF%?w%Ko*8(Dhd<(A3tS_lAk3JE2pZpBn&jvp!D+9XaZA53udr&+~w7 zH-2v6>(N4=pk||ro}T)^6bV-8S}CCA)Av~!PT0@2=oECq=6`C~31+E0!- zZI7b9+!kM@tHg{Ba22C>F^2NylUP6G(v{xKC&Fo}^XBee5aPecY~X zK@UB^(xQjfRn@~`Di0lnY{mR@f<-Ji(SdJA%``n8`-T%{zC$MI`Z5>2bRvp9OK+XX zV9(K+6BhnFN;36emZ8hzL_-pb&|Z+XGlQzWi03b&IAE+F_#z&-b;}oC_9`9u!U|UK z%ohXsYY_0NJ>29CF>3cCKV}zA`_hxT8)Z^CsUcTR$uaPk`@zoprO;j!+hh`KAd&ig70*9G z-4q!7M4J6ol>I1DI-;p+#NjS%Y}#h#r*zL(UNDm{ePsvw{p2e*KPI0mip;$;bICi}G z4u)vW|006oF$0UrbuL|_m>&w@o9_EVXBJ8=KV$)WZ~VcZawf*CYt`^CkGsNiKh`% zPCZZK018bx?M4erP8Wc4+;KV!JK|%fvo&Wp_<{s^Za*r%_PWXiO@SbB7oO6c5M?9! zK8n|$^0S4zk!6?RDaN8|s3zI19@_kKHX!7w-%ND!=SVFzd|eD46>%oYo(5?-@AYjD zPAivGHP;93cu1$hGaYyaB&;HS2)2KV&P2h7eAgK-e8}6*IDsM$ohgB@*m+j^iU*&~ z1ee%wHVY8({<9gpBP#0l;rQ7E0K@ZV(*OyR&K2_RD8Uqm!(i&UWRQmQ&*cIUK61{( zd!qz_7-oF-Pv@e*9{zc*D}yihdl}*Ic7wCI-;H z^J(zzUN~>&gCOFhsju27`+^ZypLD+90$Vulf=e3~uJ{^+h#Q0Re|UKC_&t@r&*}XO zaln4ZE~Ekbv0sw4QQ-{H}#i%9GqSCi?R@vZB)ieCFoI&@F{=0vz3`#p`%KxN$# zH0<{T9H*G_dm#?MuKL{x_HO&{seCrdfk|UB*8E}AYULVBAm<-8@Oi!d@Bp1v{NaR? zcJUvnd@dyQqp3Uphyi1_?++^&yYK%_A;?VzIiSk6k(O!D+p9sE6rKD^7wSOY)tC5ncO`b~dO#oQ*H{#TIk5jJ-+Y`) zjk}b|AA*!y?0p&P=prF*PoHjBHYS~nYCT%L(+i_4e^Rk0KjcU5Bm~vS%fwM2CySE}w8uS3mDj(740|fEU(<3Cd(KDCR zzy^Mb-#h5?_)u7rshP+!#|w|)wwyeU>OmS%e!#S%gVT|~Yz#Ju-c+{HWM2t(}Gd*Uy~Z0voJ zs4*|wC%S9Q%@3&8M3|OXqOk<$AtV(ER9}Yij#@XbpNNKbtQY%KY-z`Gw9mq2xU(%f5U?ai>vJf?0(E;x zMAQJ>@lc~5zCR}NLs=R>j>h2u>*tc(j)k94NqM8x%CLkecnszBC$g0<#F0?uwS9?l zxiyg2;gr=}@AnPwFRju^WGh#&Nad`(_7&#W(F8G^vlRBVn9f-?`$n2mFZ)hB&zYNj zFOG7I*N@^K&Rpy#VGU#Xw$p*O6~@&$0Quyfk)0}@xPy7KfvNtWY}_F8xyCav1ok^CBV~kNQ<)g|jsFnx!*en-0! zP6xSJjC_KHoBmH+5R1S{!SPCQ8f|e6DW^IwoY6G4ZcgwFekij4LvVDI9TA3Hb-Kqb zCWC19DSw+SntG8JK}bBI%R|M45wQ(M6)j3gGO+$esO}>70nWuS0EHB zS^OBy5?QLa5{++76PYp0sbxgS-Efkqh+)aLOw^L=T1D$gLx+VO2=vMlYhv)K*t{13sy#x+*xjFN!6j0cy1Mss)5E0-Kiy>|8(bW*qbKA_x|W(Noc}@QS2Z ziji&&7$|G-<4PFyaRWr}cntL*6ldr`xY%{X^T9}aLEL$59L4CWnUYV4_M#_0*5#O|D@!BYKlz!Ej zyo?ElksBAZ#r~Iw)C87iE=B87E6L3X@PXtcK9 z!gQM?E~1c6My^d7W~TynQ^d$b415JPZc5mM-lqixYc#Vtl(qLEMZ`2*gv(?;JdX#7rxixEr~J@D-cIb}JfQDULvvtrEZCwj{P%SZpkh6J$~moM92w zHpCj;gQOXJfH?v_1o@_G#RE7e&(?_}HkQwXz?98n_lkTw%QD{&VLA16VhBf6^@!64 z1dh;ntm{##A{BrK)CE=}gZET!&?nX&J0{jfaoElrmQ4`G|MjK@>JhJ-k%7C9-bfO5 z2lW0!BFBN{@INukfoc9Q3UQ7!)?|>*6#1r)h`VsEpFJw};0gftn7H6zR`$4vcH*0# z5Cu-ueNvP-0o$Gy^-fHgE#gimI%2EX=482Sn>g-d-Pv}5TkqW3j;of=jo8=oXYjo2 zprg~lpG6Ygid&uFD6DBxFy(o1!o^bg3n)s1RWS<(cJk~+(a{ZE{E`^!1{8T&EWtn8 zD-ojLDHxLdZrH0=Wd(IHkNDe-HLz1ed$6WoL$*yg>v4W10AuA>?hzFT<%!sfLWx3X zW4f8WE)al}t-T3T^>2ds4%>hJmU@ZxccvQUVv#WE?FfbG#c(e^{T(sg3#|99G*-FV z`w>*p+aW&pvRG|j1UVf^v50@X>d^545tj<{eo(#~jYY6eL`xcM^}>+FP#5_GdK#GZ6k$iI}8a5IfvB;eKyeiBKu;;y)S+fxGf5p-lmG_ecZuQAzx4}V9{#&t;|KO5Vde?*UL)|FpG`(AM<6??{m1H+@i zd&=`CN^@Qoo3pVjuZT~wSvM`jAmVb+B@BFCmI^Q~&q23qNM?g&v5I9mEQz%f2;Q{e zoXt+iGN6_m0A{23CkM+S5~3EW9H-v{7$r6jMPQ?T;!^jt#6iG87xpEI<+)HW@nU^0 zlwW(XE0@`|1cN$DixXGLTB1QkMT(3(n202Uq)Wu8JXA>*Q}Uqa%;Ls87+#A&kY74r z;ekAsmS#ii3jY6hE7fZE?I@Q={hez5I7Ck$y3lEmVPIDoVwYIyW8F2cK@?;H65@i& zsN_`C#Q${_D6hnlBb{cDATOd?UCEfP5(Apm;AKFz&2OZ*4GHDSTBgkc*DWVnCM4uU zYu&fC-4vW97U#2$JR1`7IxVZbHdMb8Ime)4V?6yE1HRi_$VesMb`(=#6rVvy0(k{M z0{M_hmflA(v49zQ0g_hwA|XW)O7c|-#qt7X<{eNV`8Jb0Lzu!lB8iboHX#CX4o=xM z`|+wR%ItJPQGr0niAA^yp}D(=zJ)BKTQ_94QUBv>YHOwK!R|snq&o_As63~kzR7=8 z{BsYnp%9wBr+A|f#-O+Ou8`$g`vk;WDa+O)BYj0)2PpC)2qmgurpE@vC zYmm(taikMeWtsS=6L4oa1Q7CnmnC-Ke5oJd1XQbWtSIh`$vjRj8*jh|JYL+>nYs7` zROzI{>xO$+m^j`UTb^sh@14;V6Xo-87TP2_bitlJC1;-4-o(_4)~2@A(#%o-4C+o&$T!`2|UxAtS5G$x6OU10^M zi~6q2Yo38Ra{B2yx40GuF=f}y6i;@A(XJ6kyQ2MB;?J%C%(I2P8*FT?C>REEt8WGu zbGqT2UY%In4W_6bE$J80$g{c);#4{9NK)6NpE#`i7*LT^$;UN07<-EE*%*A|M}UO=bIQAIzBD^~Vmk=hFQ zD;6ck>TdNQIk-~1-V1YW6=dPO?rvJw8#yH(CPW8rYdH@x$TWQB+{7Oj3gLqH3 zRSfIHjM{poDQV=I_Cmrgwm~fG19PznHPpQmVt*eN#W%Mm|3(tXFsv`e@_!<)FA&_r zVn$yuZjV96CwWcrXkTX59#=0OBaNimO~?m7Ax=ROsPIZ(tlp;#lz+e_M)YHGK!}t3 z0Yq*QEBb*_*=kV1`0w?D64)kA_JdK_E{sK(aXUmo5vJiYVsa72_F1u{2<<&DHWYzJ zctIQ~0s?(eoGD@j+DiseS_VHKz6>uG67n*Bt8n^w8OR#ssAb8kqPah2@lLU^KQ=V4 ziGBTHL3Uw``}EVJes-g(g;r0~E#Mw8sTk^LFFJ0rnd+t*@~&>|b;u^5(N-IvFvP$) z4f-`IZy02#a->fG$cMirE)=6H-xlTp(7Nx4t^;5+-!lYnp5jq*-xRog>V2_j0KR&k z*gSxxY5NT#|83aJlLG(?4v5nOm{mJypbPgW%eyI!{1D!xTkGAIQNFf_j>DpEAUg2_ z@xVY#l@GPU3~KO_*f@-Jvt35ER9Nz6s#<+x z9dut^kpqFa@fX5G+;Hp#LX7g_SFZ->HE1|KR1-DBv5MP?JBFi6L&dh?7%wgk5682^ z#Lpu?Kqe=6-9oh3 zGzwb7Dt3%w7R_dqjIGs(L&f^^bchS1Fl*exQ39Rs5j{(w*1c#TnMU+XQJ#)eqp&=V z+Z=+HFb$TDGw@@L3d;f_2UjJxVcUb4C0( z>{458Y@WDLX8Xj3QVeOn*jtKaR$!E8kVNcgDEvZU9t{}ML5v!Wm+mNvro$hNn^EIf zC$R}xT4$q(TL8}P=h5Iey9jLz%S`Et*OSy;V5jOEj4(R++TD!OuO`Nifky5Q8IPiB zSB8bP-uKf3xv4UmEm7_3n%l0~?TL~!85$jfK2T0*wFr8N&@#-s-Xg6G>$8t2DFfBf z7qT|}TC2ci5Bh~q{lx#unAcr|Vrin}b#}UYqHW^!N13`ARp3;73{YN7Ic)Jj*`RbO zMirNgDlaN7mzHjjs4Ryq94uCsLp2W(ua!eJ57$5OmvX575h89ZUTUQ1F_t;ImY@we zW-N{~1? z8EfSpad|S#$Xan|IwC+M;*+;sgK3;I1=;tCr)R?>vt)$09}$bDvi_hB_fCa7^D%K5E(uVF_DX22C()csc^SmDm6(K2A)TQv3nyIltvzj2 zM_LVoi$$`bh8-e&8guh!P$xBT)>ZNsAtBEp$0oKeX10hx?9}sO z=`=j`1+i%wX2FZW8m0hH3eMb@QJ}m2t~$Z{if~k6ukxy_q@o4If z?EgCt0!KafphynxRaRv{W99T_`HHWL!&NX8Z-`&2u*lyO&T4E&-xA}i@m=qT#no^( zy(hL-0~5b5-l_)t+6P6rJ3*9;V0@jQrS#d4#{bJ4be8QNK(-_Bnq3A`bdtbU(zxzYj(!d^&*3$5`G& zamVI#EbULE0ZU~^#q{au-cQA?)A3QCiN~hnGmgo*H-sG*<{2ROPbgf`7G3`ZUIW+e zZA=!cW?*8T6!*`7UOgpVoq-M9*W%m^eEK&cY$ib8w-9y6cs0>~CRp_EkW2#xgkyUq zHex^Eb@o}~r9KL}@#F{mB%YlK4SyQKx%#M`n+XVY2A?_`Ax*uE!dHX6{#p4NDqL1f zssRc**S26{7a-O}F>3hFro@S`S@4kkf;^|Z5z^#S9v)nSSg)v|Ur}IH zM9jolSeUgs0 z42~4JC}L-`MD1UU1&)yFHyK}oV3xWlSIn9XKK!y+JR9@rid^5>T1ceq8lUQ#t4KqJ zc_Wo8?4u+SeQMV-6j$}gr?eC9S}fC0F{Kvc!NuZQ*yJ#=trjLMTzp;&-4Y@Gss$=A zpqVrfEDkYf4mdvJ|7+_!z^kgVJ)RRu0^EBOFr<=BjYuehIu?o`D$)aD0U<&}gfx=S zA%JuU?FxUo5kZh9MHHk<7Z7>ln^9**Wt>I?TNQH`%diDeFXovKW~!hV zES9CpV&>jR`-?$6jrE&i*pen5V{ISR&K#(wW|dR*ixQH!G-HtHmEfs|mSA+zoX2;${>c1(i|s?Ua^MV%pV@qn>?mYJm!7_c+d@QoKzI5!y$kO1kjxW5Q z=_6JZ#NLa@r7YV7%&Obw1)>VFGGYC7VJzbwplf3h#tfu_2{&N3D?)dT<5)k*yEuz& z28{y&Jf-Ky0aZ_H);K7~GZfw%RQjdpi*cZgLHdpw;e$OZI&r@n`aO5E@#wUMQniIm z4R`pvx*9y5rF>3>dXXWRHHr6?uP!Y+kDX>xGA71;lN`Wd8(D_h3YVo+hmcR zo(L$HXv#!JGe+Ac0{W#Me`-w9?HHejQt}w!F7voa+A2pxDR~l-!*b;7Lxq z=m~r!nQAW3>dM{7p(pZ=%i5z(LNJbIjnTb!;z{yTl?P*juESNIG z*|O<8rBy>`^|6`ZQReGT+UEIyf61{Z~3S+i4a4YmYzgNOE0Z)Rnk=th6~G zyH9L)mwrn152;mGMRN#h{3)*zt!k-qj^oMr4Ud+WbB0(P}R2@G>;AVPE+UcxxZ-BJSQjN`#=lVYCjmN;BWe7 z9@OFQikc5I@IPubACmEdo|?~Be}v}3JYT|TP0Qyy@!|h)G3K>F5xO`Z4EmEDR_$`D z3H&GPhw0AZFJn9*Y4*Q7A>;F;9b0wWq5tBb@%dwA`Um8`_-}Pwg_G)j>e6HmS4ucN0S%f z7!~g|%$3$JVv7^BX%TZt@>FB!ePo*?eJWZESmSfJm=luD zTlDL$)nDzpy+)3B!7gToE-vQeW$GHWlCuJXcfp`v{)qC?Zbr*SYPp0PM`N$etfj&w z9E~QLyacdlrj1KLRL#9AIf*d%(cwp+>vO!WVcA_~&06W>rHrn%{=JmL&_)@{I2vu$a~Y6(x5~`VJzBGj zvU_!m+#@huzcWt{sPj6g)m4m;U{*XZVeS2lv4gvg#eUYYqsIAJmri^>+xP)g3miM^ zLqBl-kpAU&Qj)q*fxjRFNS+VZc&4jby=?ij-Y+}%hj*iANO4dN6w#d~P%C1klASb~ zK=Fp~Kd!pVp(Z`lnxF8VUjNhuDQyDwR3Rp#H!TfV2X7LFt;-?Q0!~4^4eR4I5my`8 zfG~Zj8sKr!GUgQy%g+hLt{c}8$5l+{>!7OE8tn5 z(7Y8+TEsv)&ay_W$4KcK@g$F_#wDnMuC4&2p3=<~O#K<9ixnJ1X@XIT>lx9-U_CE* z`)9S3*!sysD72@+NEE?)qellKSPa!K#YW}nCpoPmo}*euh((DFA7&0zk_uNMkRPt8 zD={F-r%F>6z$B&7CAe%9t{<;NW;Mb+l0jM0NM)=7W4@@~s{qbX8n+4-aJ06sf`At4 zw0T*itE*t%ipk7jeYG{)(s1B z{HS8X$GPV|aSg@em9qu{J3)DC5Jpdw)^M$xqaB&ePEq<=pn9qv zS_?Q=sAw%jZ<-dZW!%$scrCi$8MH{Ym_BA59QZ7+f9S6g)#n%_%s|0x1K(|(xhh+S z;o5vE8<}Nwh#mfC@zVnBUdJ#hb!i=dw@5!w9kaT`^{mMf^<0mE%TllZYC?k6uV+P< zY4duHiQnt*SSv%{tY@!Z*1y+-3YRPW6(+yJJwQWVaUxU2R}J*l6zn1rwHM2kX3x@_ z27Mq_QPn^}P(Eoubu`amt0_p=^?}4RH39U>T;JI>y7~$SaIF%n`1CqGPzA%c9yCef ziHN9$jq&#F+iZq&C`Ku-Y#7zw&VQ$}H}J7H_4o#WVV9y3eWZvO1!y3~y=z-Joz`QZRxNQ3=X-Hby1Xa8SuXun*tU5nyUftunI{q3Ebx>ct z=CqGEWIHwtC!z1+(~t1z%8F~aR#=g~S%9M&wh<6Hrr8_8t;e-vBV5jVG{JWMjbv{P zkCc0o!9G|kZ)d~xhuQ*ZWBU{i(V79F|w`s z+y}~d9a+dF^?BXNZ2BP;U2_XkTpO(jiEM0CwV=N5msH5~ukD#$J=c$P>~#p!f8)Z~ zHBEIkbKCqCwcH!%U7NYc|61KQLoh#fkzb_s=Kn;?Hgohpr6x{U9h!y2cE1J6FrZHV zF-j3zxN84SiCaKZpBZctr>Y^a5(BqzAV25i<1}8?CSHrTI8muz(34^Fx>!p)YxNOC zNLRepM&#TU5XSEzgv|i>EeP4Zgo3+1pD~8tacIzNyRGk#ZsQy1pGqB{9`(0#r6oJSXi-{aim?aS0a2=}Z+0*ak32i!V7)#!sS^o%>lp2lnV?U7cLMRz zV5>wCqud=$jMnVrTlI8gCxfa_VM-vWM`TbMe!F7cblQi<`ixOQnpKfD@CB2uH%N@5 z4NPqfqcjWu@!I|-9Vh70o6a3+iB#gR+T6(G+ccv}=B>?gYQxC6hBFO))-Z6|Z03ju zK~z^Oax}1!LhT0p1~~|u3pDUxdP}9;kc&Wy@fsoW(zJ6Iik)*V-HZ&TA%HKVQJ$t!E~1G^Xi_xKuTM6+Y8-p zr=q=pSbHtn>om!{o4yUd6f`0s`FQ^5;nuv6w_*4AT(iHg_CllY)%Cp~q+ig)=BTw^ z<5{NKeY`UA+grjT<@9OW#}q!GVj|6jKj^aunXtmKXmO9fg^;eJe)|^i-AO;c1(xWn z%ze!LA$8aXO6;P7ePE`pKFf4z*FGmA{9&JE6Te+w{}z+eZgSoR4L+(iZ^OVp##kN* zsWYidu)sXm$*wyK@?Q;f;BDk0J#_wU$at?6?>J4fdI!c|LoYI*kjSbo&q!fFB|G>X zC#rE@p3RaOAxyw)Z8%oRh^Z{J^`kgTnWW#)x_1zO=V}k1i0IGjRHGxXm$Csqlm9`f z`ysebP|_6fUYZ`;kL~V29riD5@K{Yd1iX#&Y5HPh?}rbe#T!qx43n)YLst(uQSg~R(mG`# zuMJ)aoUHsnin&R=w)wmC_+j{@$r^MRre_Lo?^1egWaP&0EM+RsF4001>ZXJZnwV7R z@?j*@)2NYU(l^& zhgrMDI(n4-T%u2of>oC4A4h?jWlBDVT-#5(6lG%S5~3zAYsfJ$-f}HH2KIriJ3)r= zk;b;y(f#LX8m^P?!wKD{k_()7!qT2am>&@q(0J9+>JuErNL@SSq-Epe=w21s{hXdQ zokS^i=JuW8%^&XH*<|7=t)tUtkt@{YE<UG*l$_#X6aJHFt-*OUCn2ib~mWv6q?sCy?^u*paU|zj2YcDVakw@<{fREV@BuBLp z?#VUGU+}iThytA(d|>_=Gc?ynvotsbLrWT)l}T6hd1z{!{(1r09ltOh8zf|@ZGR2)3yBscp!t8S=xPuDrSTgnLM-CE`S7V4{{Bj|3BYk; zBT6g@8Ib#E&{Sbazup6SbEHz?HMKb{%pTgKLDqudBl93wqw}+QmtX?7$43~g;T_7n00Z5^fLpAl zv4faJ6`uqoTI#`5z+;YfoZ%+hO5dO0r?s9r;be4ZLnnsJ8oX}DXLt-aD7aFi>&PEg zM9AQ~cs3(&zir21QBpf~Kgr>4uOY{shKYAm!=Q#5#xCSTExkvr&T+c#Rpon5Qu|*7 zD%I%94E{b|8wd!s4Q5cepO^7=lC`j;dq7J$OYI&E)V7B?7#N0(%()#XFmM{`#w>nm zN8WHRs_mqt4R<3cbqdrAF#v|!E$!^Tep`wwWXpYs8n+vTbc5vFF8u#LH^9Ve=&ITm zVRjx?4ks?kqMF=pN;$zUJfg#=(B?cE<}b)j3V$rjWhe%p;~?}s4M0Aw&hJyLhuQFS zv*C6y7vryCYz>)3Gn_KqC4XZdnyU#ieQlFsoKla&{59EEO|H_||(=AtF;l#KZ z88``!6{f%RDIGt_73pbSWBPo?Np{iVGrDjdFdU>_XTgqxRm3ttoOcrqFL?-cZ`t^u z@xV~Uz!XEZ>z!hup3}rraPY&zOwK-^O;8n>@o;rGjwT|Xe$r$@0($~e1qnQFc81Ih idf+|oE-xtIJP3QF-7XWxE)t^6nTd_Gi$98W&iY@$yZyER delta 35669 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 diff --git a/submodules/TelegramUI/TelegramUI/ShareController.swift b/submodules/TelegramUI/TelegramUI/ShareController.swift index bd10529239..32756d36ea 100644 --- a/submodules/TelegramUI/TelegramUI/ShareController.swift +++ b/submodules/TelegramUI/TelegramUI/ShareController.swift @@ -451,7 +451,7 @@ public final class ShareController: ViewController { var collectableItems: [CollectableExternalShareItem] = [] switch strongSelf.subject { case let .url(text): - collectableItems.append(CollectableExternalShareItem(url: text, text: "", mediaReference: nil)) + collectableItems.append(CollectableExternalShareItem(url: explicitUrl(text), text: "", mediaReference: nil)) case let .text(string): collectableItems.append(CollectableExternalShareItem(url: "", text: string, mediaReference: nil)) case let .quote(text, url): diff --git a/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift b/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift index d2b758b5bb..583c1300d9 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeGridControllerNode.swift @@ -633,7 +633,7 @@ final class ThemeGridControllerNode: ASDisplayNode { let selectionPanelSeparatorNode = ASDisplayNode() selectionPanelSeparatorNode.isLayerBacked = true - selectionPanelSeparatorNode.backgroundColor = self.presentationData.theme.chat.inputPanel.panelStrokeColor + selectionPanelSeparatorNode.backgroundColor = self.presentationData.theme.chat.inputPanel.panelSeparatorColor self.addSubnode(selectionPanelSeparatorNode) self.selectionPanelSeparatorNode = selectionPanelSeparatorNode diff --git a/submodules/TelegramUI/TelegramUI/ThemePreviewController.swift b/submodules/TelegramUI/TelegramUI/ThemePreviewController.swift new file mode 100644 index 0000000000..826e23a125 --- /dev/null +++ b/submodules/TelegramUI/TelegramUI/ThemePreviewController.swift @@ -0,0 +1,89 @@ +import Foundation +import UIKit +import Display +import Postbox +import SwiftSignalKit +import AsyncDisplayKit +import TelegramCore +import TelegramPresentationData +import TelegramUIPreferences + +final class ThemePreviewController: ViewController { + private var controllerNode: ThemePreviewControllerNode { + return self.displayNode as! ThemePreviewControllerNode + } + + private let context: AccountContext + private let previewTheme: PresentationTheme + + private var presentationData: PresentationData + private var presentationDataDisposable: Disposable? + + init(context: AccountContext, previewTheme: PresentationTheme) { + self.context = context + self.previewTheme = previewTheme + self.presentationData = context.sharedContext.currentPresentationData.with { $0 } + + super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) + + self.title = self.presentationData.strings.WallpaperPreview_Title + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style + self.supportedOrientations = ViewControllerSupportedOrientations(regularSize: .all, compactSize: .portrait) + + self.presentationDataDisposable = (context.sharedContext.presentationData + |> deliverOnMainQueue).start(next: { [weak self] presentationData in + if let strongSelf = self { + strongSelf.presentationData = presentationData + strongSelf.updateThemeAndStrings() + } + }) + } + + required init(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + deinit { + self.presentationDataDisposable?.dispose() + } + + override func loadDisplayNode() { + super.loadDisplayNode() + + self.displayNode = ThemePreviewControllerNode(context: self.context, previewTheme: self.previewTheme, dismiss: { [weak self] in + if let strongSelf = self { + strongSelf.dismiss(animated: true, completion: {}) + } + }, apply: { [weak self] in + if let strongSelf = self { + let _ = (strongSelf.context.sharedContext.accountManager.transaction { transaction -> Void in + transaction.updateSharedData(ApplicationSpecificSharedDataKeys.presentationThemeSettings, { entry in + let current: PresentationThemeSettings + if let entry = entry as? PresentationThemeSettings { + current = entry + } else { + current = PresentationThemeSettings.defaultSettings + } + + return PresentationThemeSettings(chatWallpaper: .color(0xffffff), theme: .builtin(.day), themeSpecificAccentColors: current.themeSpecificAccentColors, themeSpecificChatWallpapers: current.themeSpecificChatWallpapers, themeTintColors: current.themeTintColors, fontSize: current.fontSize, automaticThemeSwitchSetting: current.automaticThemeSwitchSetting, largeEmoji: current.largeEmoji, disableAnimations: current.disableAnimations) + }) + }).start() + } + }) + self.displayNodeDidLoad() + + + } + + private func updateThemeAndStrings() { + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style + self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData)) + } + + override func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { + super.containerLayoutUpdated(layout, transition: transition) + + self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition) + } + +} diff --git a/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift b/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift new file mode 100644 index 0000000000..c0c075499e --- /dev/null +++ b/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift @@ -0,0 +1,51 @@ +import Foundation +import UIKit +import Display +import Postbox +import SwiftSignalKit +import AsyncDisplayKit +import TelegramCore +import TelegramPresentationData +import TelegramUIPreferences + +class ThemePreviewControllerNode: ASDisplayNode { + private let context: AccountContext + private let previewTheme: PresentationTheme + + private var messageNodes: [ListViewItemNode]? + private let toolbarNode: WallpaperGalleryToolbarNode + + private var validLayout: (ContainerViewLayout, CGFloat)? + + init(context: AccountContext, previewTheme: PresentationTheme, dismiss: @escaping () -> Void, apply: @escaping () -> Void) { + self.context = context + self.previewTheme = previewTheme + + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + + + self.toolbarNode = WallpaperGalleryToolbarNode(theme: presentationData.theme, strings: presentationData.strings) + + super.init() + + self.addSubnode(self.toolbarNode) + + self.toolbarNode.cancel = { [weak self] in + dismiss() + } + self.toolbarNode.done = { [weak self] in + apply() + } + } + + func updatePresentationData(_ presentationData: PresentationData) { + + } + + func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { + let hadLayout = self.validLayout != nil + + transition.updateFrame(node: self.toolbarNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - 49.0 - layout.intrinsicInsets.bottom), size: CGSize(width: layout.size.width, height: 49.0 + layout.intrinsicInsets.bottom))) + self.toolbarNode.updateLayout(size: CGSize(width: layout.size.width, height: 49.0), layout: layout, transition: transition) + } +} diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsAccentColorItem.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsAccentColorItem.swift index 91d44d9357..2961cb9d3f 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsAccentColorItem.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsAccentColorItem.swift @@ -284,6 +284,12 @@ class ThemeSettingsAccentColorItemNode: ListViewItemNode, ItemListItemNode { i += 1 } + for k in (i ..< strongSelf.nodes.count).reversed() { + let node = strongSelf.nodes[k] + strongSelf.nodes.remove(at: k) + node.removeFromSupernode() + } + if let lastNode = strongSelf.nodes.last { let contentSize = CGSize(width: lastNode.frame.maxX + nodeInset, height: strongSelf.scrollNode.frame.height) if strongSelf.scrollNode.view.contentSize != contentSize { diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsAppIconItem.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsAppIconItem.swift index 75711374a3..e74272695e 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsAppIconItem.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsAppIconItem.swift @@ -149,8 +149,8 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { } -private let textFont = Font.regular(11.0) -private let itemSize = Font.regular(11.0) +private let textFont = Font.regular(12.0) +private let selectedTextFont = Font.bold(12.0) class ThemeSettingsAppIconItemNode: ListViewItemNode, ItemListItemNode { private let backgroundNode: ASDisplayNode @@ -302,7 +302,7 @@ class ThemeSettingsAppIconItemNode: ListViewItemNode, ItemListItemNode { break } - imageNode.setup(theme: item.theme, icon: image, title: NSAttributedString(string: name, font: textFont, textColor: selected ? item.theme.list.itemAccentColor : item.theme.list.itemPrimaryTextColor, paragraphAlignment: .center), bordered: bordered, selected: selected, action: { [weak self, weak imageNode] in + imageNode.setup(theme: item.theme, icon: image, title: NSAttributedString(string: name, font: selected ? selectedTextFont : textFont, textColor: selected ? item.theme.list.itemAccentColor : item.theme.list.itemPrimaryTextColor, paragraphAlignment: .center), bordered: bordered, selected: selected, action: { [weak self, weak imageNode] in item.updated(icon.name) if let imageNode = imageNode { self?.scrollToNode(imageNode, animated: true) diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift index b5fd446d4f..5588149356 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift @@ -11,7 +11,7 @@ private let shadowImage: UIImage = { context.setFillColor(UIColor.clear.cgColor) context.fill(CGRect(origin: CGPoint(), size: size)) context.setBlendMode(.normal) - context.setShadow(offset: CGSize(width: 0.0, height: 1.5), blur: 4.5, color: UIColor(rgb: 0x000000, alpha: 0.5).cgColor) + context.setShadow(offset: CGSize(width: 0.0, height: 1.5), blur: 3.5, color: UIColor(rgb: 0x000000, alpha: 0.65).cgColor) context.setFillColor(UIColor(rgb: 0x000000, alpha: 0.5).cgColor) context.fillEllipse(in: CGRect(origin: CGPoint(), size: size).insetBy(dx: 4.5 + UIScreenPixel, dy: 4.5 + UIScreenPixel)) })! @@ -141,9 +141,19 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { self.update() } } - var value: CGFloat = 0.5 { - didSet { + + var _value: CGFloat = 0.5 + + var value: CGFloat { + get { + return _value + } + set { + self._value = newValue self.update() + if let validLayout = self.validLayout { + self.updateKnobLayout(size: validLayout, transition: .immediate) + } } } @@ -165,8 +175,7 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { override func didLoad() { super.didLoad() - let brightnessPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.brightnessPan)) - self.brightnessNode.view.addGestureRecognizer(brightnessPanRecognizer) + self.brightnessNode.view.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(self.brightnessPan))) } private func update() { @@ -184,7 +193,7 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { } func updateKnobLayout(size: CGSize, transition: ContainedViewLayoutTransition) { - let inset: CGFloat = 16.0 + let inset: CGFloat = 30.0 let brightnessKnobSize = CGSize(width: 54.0, height: 54.0) let brightnessKnobFrame = CGRect(x: inset - brightnessKnobSize.width / 2.0 + (size.width - inset * 2.0) * (self.value), y: floor((size.height - brightnessKnobSize.height) / 2.0), width: brightnessKnobSize.width, height: brightnessKnobSize.height) transition.updateFrame(node: self.brightnessKnobNode, frame: brightnessKnobFrame) @@ -208,7 +217,7 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { let transition = recognizer.translation(in: recognizer.view) let brightnessWidth: CGFloat = size.width - 16.0 * 2.0 let newValue = max(0.0, min(1.0, self.value + transition.x / brightnessWidth)) - self.value = newValue + self._value = newValue var ended = false switch recognizer.state { diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift index 0b0593aa67..fb3bd72068 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift @@ -248,13 +248,14 @@ private enum ThemeSettingsControllerEntry: ItemListNodeEntry { arguments.toggleLargeEmoji(value) }, tag: ThemeSettingsEntryTag.tint) case let .accentColor(theme, _, color): - let colorValue = color?.baseColor.colorValue ?? defaultDayAccentColor -// let accentColor = UIColor(rgb: UInt32(bitPattern: colorValue)) - var colors = PresentationThemeBaseColor.allCases if theme.overallDarkAppearance { colors = colors.filter { $0 != .black } } + if case let .builtin(name) = theme.name, name == .nightGrayscale { + } else { + colors = colors.filter { $0 != .white } + } return ThemeSettingsAccentColorItem(theme: theme, sectionId: self.section, colors: colors, currentColor: color ?? PresentationThemeAccentColor(baseColor: .blue, value: 0.5), updated: { color in arguments.selectAccentColor(color) diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift index 27d459a8bf..5f5ef8a77d 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift @@ -184,8 +184,6 @@ private final class ThemeSettingsThemeItemIconNode : ASDisplayNode { super.init() - self.allowsGroupOpacity = true - self.addSubnode(self.iconNode) self.addSubnode(self.overlayNode) self.addSubnode(self.textNode) @@ -224,8 +222,8 @@ private final class ThemeSettingsThemeItemIconNode : ASDisplayNode { } -private let textFont = Font.regular(11.0) -private let selectedTextFont = Font.bold(11.0) +private let textFont = Font.regular(12.0) +private let selectedTextFont = Font.bold(12.0) class ThemeSettingsThemeItemNode: ListViewItemNode, ItemListItemNode { private let backgroundNode: ASDisplayNode @@ -424,7 +422,12 @@ class ThemeSettingsThemeItemNode: ListViewItemNode, ItemListItemNode { strongSelf.colorSlider.value = item.currentColor?.value ?? 0.5 } - transition.updateAlpha(node: strongSelf.scrollNode, alpha: item.displayColorSlider ? 0.0 : 1.0) + strongSelf.scrollNode.allowsGroupOpacity = true + transition.updateAlpha(node: strongSelf.scrollNode, alpha: item.displayColorSlider ? 0.0 : 1.0, completion: { [weak self] finished in + if let strongSelf = self, finished { + strongSelf.scrollNode.allowsGroupOpacity = false + } + }) transition.updateAlpha(node: strongSelf.colorSlider, alpha: item.displayColorSlider ? 1.0 : 0.0) } }) diff --git a/submodules/TelegramUI/TelegramUI/UrlEscaping.swift b/submodules/TelegramUI/TelegramUI/UrlEscaping.swift index 8a02c43ee5..5e626c24b2 100644 --- a/submodules/TelegramUI/TelegramUI/UrlEscaping.swift +++ b/submodules/TelegramUI/TelegramUI/UrlEscaping.swift @@ -43,3 +43,11 @@ func isValidUrl(_ url: String) -> Bool { return false } } + +func explicitUrl(_ url: String) -> String { + var url = url + if !url.hasPrefix("http") && !url.hasPrefix("https") { + url = "http://\(url)" + } + return url +} diff --git a/submodules/TelegramUI/TelegramUI/WallpaperColorPanelNode.swift b/submodules/TelegramUI/TelegramUI/WallpaperColorPanelNode.swift index 77154b6258..5cb2542460 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperColorPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperColorPanelNode.swift @@ -63,9 +63,9 @@ final class WallpaperColorPanelNode: ASDisplayNode, UITextFieldDelegate { self.backgroundNode.backgroundColor = theme.chat.inputPanel.panelBackgroundColor self.topSeparatorNode = ASDisplayNode() - self.topSeparatorNode.backgroundColor = theme.chat.inputPanel.panelStrokeColor + self.topSeparatorNode.backgroundColor = theme.chat.inputPanel.panelSeparatorColor self.bottomSeparatorNode = ASDisplayNode() - self.bottomSeparatorNode.backgroundColor = theme.chat.inputPanel.panelStrokeColor + self.bottomSeparatorNode.backgroundColor = theme.chat.inputPanel.panelSeparatorColor self.textBackgroundNode = ASImageNode() self.textBackgroundNode.image = textInputBackgroundImage(backgroundColor: theme.chat.inputPanel.panelBackgroundColor, fieldColor: theme.chat.inputPanel.inputBackgroundColor, strokeColor: theme.chat.inputPanel.inputStrokeColor, diameter: 33.0) diff --git a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift index 8a41dbf0dd..a7637737d9 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift @@ -161,7 +161,7 @@ class WallpaperGalleryController: ViewController { self.source = source self.presentationData = context.sharedContext.currentPresentationData.with { $0 } - super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: presentationData)) + super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) self.title = self.presentationData.strings.WallpaperPreview_Title self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style @@ -327,7 +327,7 @@ class WallpaperGalleryController: ViewController { break } - let presentationData = context.sharedContext.currentPresentationData.with { $0 } + let presentationData = self.context.sharedContext.currentPresentationData.with { $0 } let overlayNode = WallpaperGalleryOverlayNode() self.overlayNode = overlayNode self.galleryNode.overlayNode = overlayNode diff --git a/submodules/TelegramUI/TelegramUI/WallpaperPatternPanelNode.swift b/submodules/TelegramUI/TelegramUI/WallpaperPatternPanelNode.swift index 6d7b072cbb..6abc2dd38c 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperPatternPanelNode.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperPatternPanelNode.swift @@ -34,7 +34,7 @@ final class WallpaperPatternPanelNode: ASDisplayNode { self.backgroundNode.backgroundColor = theme.chat.inputPanel.panelBackgroundColor self.topSeparatorNode = ASDisplayNode() - self.topSeparatorNode.backgroundColor = theme.chat.inputPanel.panelStrokeColor + self.topSeparatorNode.backgroundColor = theme.chat.inputPanel.panelSeparatorColor self.scrollNode = ASScrollNode() diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index dd5f8a5728..c656a187ad 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -56,6 +56,8 @@ 0947FCAE224043450086741C /* SettingsSearchRecentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0947FCAD224043450086741C /* SettingsSearchRecentItem.swift */; }; 0947FCB0224055990086741C /* StringHash.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0947FCAF224055990086741C /* StringHash.swift */; }; 0952D1752176DEB500194860 /* NotificationMuteSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0952D1742176DEB500194860 /* NotificationMuteSettingsController.swift */; }; + 0957DE2322DE28FB001B4D57 /* ThemePreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0957DE2222DE28FB001B4D57 /* ThemePreviewController.swift */; }; + 0957DE2522DE2909001B4D57 /* ThemePreviewControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0957DE2422DE2909001B4D57 /* ThemePreviewControllerNode.swift */; }; 0958FBB9218AD6AF00E0CBD8 /* InstantPageFeedbackItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0958FBB8218AD6AF00E0CBD8 /* InstantPageFeedbackItem.swift */; }; 0958FBBB218AD6BC00E0CBD8 /* InstantPageFeedbackNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0958FBBA218AD6BC00E0CBD8 /* InstantPageFeedbackNode.swift */; }; 0958FBBD218B03CA00E0CBD8 /* InstantPageDetailsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0958FBBC218B03CA00E0CBD8 /* InstantPageDetailsNode.swift */; }; @@ -1280,6 +1282,8 @@ 0947FCAD224043450086741C /* SettingsSearchRecentItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSearchRecentItem.swift; sourceTree = ""; }; 0947FCAF224055990086741C /* StringHash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringHash.swift; sourceTree = ""; }; 0952D1742176DEB500194860 /* NotificationMuteSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationMuteSettingsController.swift; sourceTree = ""; }; + 0957DE2222DE28FB001B4D57 /* ThemePreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePreviewController.swift; sourceTree = ""; }; + 0957DE2422DE2909001B4D57 /* ThemePreviewControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePreviewControllerNode.swift; sourceTree = ""; }; 0958FBB8218AD6AF00E0CBD8 /* InstantPageFeedbackItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageFeedbackItem.swift; sourceTree = ""; }; 0958FBBA218AD6BC00E0CBD8 /* InstantPageFeedbackNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageFeedbackNode.swift; sourceTree = ""; }; 0958FBBC218B03CA00E0CBD8 /* InstantPageDetailsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstantPageDetailsNode.swift; sourceTree = ""; }; @@ -3382,6 +3386,8 @@ 091417F321EF4F5F00C8325A /* WallpaperGalleryItem.swift */, D05174AA1EAA5B4700A1BF36 /* WallpaperGalleryToolbarNode.swift */, 09CE9512223825B700A7D2C3 /* CustomWallpaperPicker.swift */, + 0957DE2222DE28FB001B4D57 /* ThemePreviewController.swift */, + 0957DE2422DE2909001B4D57 /* ThemePreviewControllerNode.swift */, ); name = Themes; sourceTree = ""; @@ -6213,6 +6219,7 @@ D084023420E295F000065674 /* GroupStickerPackSetupController.swift in Sources */, D01C06BE1FBCAF06001561AB /* ChatMessageBubbleMosaicLayout.swift in Sources */, 0900678D21ED5EA800530762 /* WallpaperColorPanelNode.swift in Sources */, + 0957DE2522DE2909001B4D57 /* ThemePreviewControllerNode.swift in Sources */, 09A218DA229EE1B600DE6898 /* HorizontalStickersChatContextPanelNode.swift in Sources */, D0EC6E451EB9F58900EBF1C3 /* ItemListMultilineTextItem.swift in Sources */, 091417F421EF4F5F00C8325A /* WallpaperGalleryItem.swift in Sources */, @@ -6356,6 +6363,7 @@ D0EC6E8D1EB9F58900EBF1C3 /* SecretChatKeyVisualization.m in Sources */, 09F664C221EAAFCB00AB7E26 /* ThemeColorsGridControllerNode.swift in Sources */, D0BCC3D420404CC7008126C2 /* ChatMessageActionSheetController.swift in Sources */, + 0957DE2322DE28FB001B4D57 /* ThemePreviewController.swift in Sources */, 09D9689F221F760900B1458A /* ChatTitleActivityContentNode.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift index c13e63c370..67e583bf2a 100644 --- a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift +++ b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift @@ -176,6 +176,7 @@ public enum PresentationThemeBaseColor: Int32, CaseIterable { case yellow case gray case black + case white public var colorValue: Int32 { switch self { @@ -199,6 +200,8 @@ public enum PresentationThemeBaseColor: Int32, CaseIterable { return 0x6d839e case .black: return 0x000000 + case .white: + return 0xffffff } // switch self { From 9a662ab2df4eb1c9ca92a661062be606b0116dbb Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 18 Jul 2019 21:24:20 +0200 Subject: [PATCH 17/21] Weakened animated sticker parameters checks --- submodules/GZip/Sources/GZip.m | 8 +++----- submodules/RLottie/Sources/LottieInstance.mm | 9 +-------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/submodules/GZip/Sources/GZip.m b/submodules/GZip/Sources/GZip.m index 9e7a828e7d..1c1df4a450 100644 --- a/submodules/GZip/Sources/GZip.m +++ b/submodules/GZip/Sources/GZip.m @@ -66,11 +66,7 @@ NSData * _Nullable TGGUnzipData(NSData *data, uint sizeLimit) } if (stream.total_out >= output.length) { - NSUInteger length = output.length + data.length / 2; - if (sizeLimit > 0 && length > sizeLimit) { - return nil; - } - output.length = length; + output.length = output.length + data.length / 2; } stream.next_out = (uint8_t *)output.mutableBytes + stream.total_out; stream.avail_out = (uInt)(output.length - stream.total_out); @@ -79,6 +75,8 @@ NSData * _Nullable TGGUnzipData(NSData *data, uint sizeLimit) if (inflateEnd(&stream) == Z_OK) { if (status == Z_STREAM_END) { output.length = stream.total_out; + } else if (sizeLimit > 0 && output.length > sizeLimit) { + return nil; } } } diff --git a/submodules/RLottie/Sources/LottieInstance.mm b/submodules/RLottie/Sources/LottieInstance.mm index 499469e2d8..66e3ccdcb8 100644 --- a/submodules/RLottie/Sources/LottieInstance.mm +++ b/submodules/RLottie/Sources/LottieInstance.mm @@ -21,14 +21,7 @@ _frameCount = (int32_t)_animation->totalFrame(); _frameRate = (int32_t)_animation->frameRate(); - size_t width = 0; - size_t height = 0; - _animation->size(width, height); - - if (width != height || (width != 100 && width != 512)) { - return nil; - } - if ((_frameRate > 30 && _frameRate != 60) || _animation->duration() > 4.5) { + if ((_frameRate > 60) || _animation->duration() > 4.5) { return nil; } } From 77bcee482be70765de1a324a35b43cd1beb0ca93 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 18 Jul 2019 21:25:07 +0200 Subject: [PATCH 18/21] Fixed passcode setup from logout options screen --- .../TelegramUI/LogoutOptionsController.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift b/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift index ff6099968a..8f0db26e94 100644 --- a/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift +++ b/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift @@ -119,6 +119,7 @@ private func logoutOptionsEntries(presentationData: PresentationData, canAddAcco func logoutOptionsController(context: AccountContext, navigationController: NavigationController, canAddAccounts: Bool, phoneNumber: String) -> ViewController { var pushControllerImpl: ((ViewController) -> Void)? var presentControllerImpl: ((ViewController, Any?) -> Void)? + var replaceTopControllerImpl: ((ViewController) -> Void)? var dismissImpl: (() -> Void)? let supportPeerDisposable = MetaDisposable() @@ -129,7 +130,15 @@ func logoutOptionsController(context: AccountContext, navigationController: Navi dismissImpl?() }, setPasscode: { - pushControllerImpl?(passcodeOptionsController(context: context)) + let _ = passcodeOptionsAccessController(context: context, pushController: { controller in + replaceTopControllerImpl?(controller) + }, completion: { _ in + replaceTopControllerImpl?(passcodeOptionsController(context: context)) + }).start(next: { controller in + if let controller = controller { + pushControllerImpl?(controller) + } + }) dismissImpl?() }, clearCache: { pushControllerImpl?(storageUsageController(context: context)) @@ -224,6 +233,9 @@ func logoutOptionsController(context: AccountContext, navigationController: Navi presentControllerImpl = { [weak controller] value, arguments in controller?.present(value, in: .window(.root), with: arguments ?? ViewControllerPresentationArguments(presentationAnimation: .modalSheet)) } + replaceTopControllerImpl = { [weak navigationController] c in + navigationController?.replaceTopController(c, animated: true) + } dismissImpl = { [weak controller] in let _ = controller?.dismiss() } From 461c538d6229ab9f546dc05f2f748616f258185c Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 19 Jul 2019 01:08:18 +0200 Subject: [PATCH 19/21] Update API --- submodules/Display/Display/UIKitUtils.swift | 12 ++ submodules/TelegramApi/Sources/Api0.swift | 9 +- submodules/TelegramApi/Sources/Api1.swift | 66 ++++++----- submodules/TelegramApi/Sources/Api2.swift | 60 ++++++---- submodules/TelegramApi/Sources/Api3.swift | 68 +++++------ .../TelegramCore/AccountState.swift | 37 ++---- .../TelegramCore/AddPeerMember.swift | 10 +- .../TelegramCore/ApiGroupOrChannel.swift | 4 +- .../TelegramCore/Authorization.swift | 112 ++++++++---------- .../TelegramCore/BotPaymentForm.swift | 2 +- .../CachedChannelParticipants.swift | 62 ++++++---- .../TelegramCore/CancelAccountReset.swift | 4 +- .../ChangeAccountPhoneNumber.swift | 4 +- .../TelegramCore/ChannelAdmins.swift | 4 +- .../TelegramCore/ChannelBlacklist.swift | 12 +- .../ChannelOwnershipTransfer.swift | 8 +- .../TelegramCore/JoinChannel.swift | 2 +- .../TelegramCore/PeerAdmins.swift | 22 ++-- .../TelegramCore/TelegramGroup.swift | 24 ++-- .../TelegramCore/VerifySecureIdValue.swift | 2 +- .../Sources/PresentationData.swift | 4 +- .../AuthorizationSequenceController.swift | 8 +- .../TelegramUI/ChannelAdminController.swift | 20 ++-- .../TelegramUI/ChannelAdminsController.swift | 26 ++-- .../ChannelBannedMemberController.swift | 14 +-- .../ChannelBlacklistController.swift | 4 +- .../ChannelMemberCategoryListContext.swift | 20 +++- .../ChannelMembersSearchContainerNode.swift | 24 ++-- .../ChannelMembersSearchControllerNode.swift | 6 +- .../ChannelPermissionsController.swift | 4 +- .../TelegramUI/ChatController.swift | 14 +-- ...ChatMessageActionSheetControllerNode.swift | 8 +- .../ChatRecentActionsControllerNode.swift | 11 +- .../ChatRecentActionsHistoryTransition.swift | 8 +- .../TelegramUI/CreateChannelController.swift | 2 +- .../TelegramUI/CreateGroupController.swift | 2 +- .../TelegramUI/GroupInfoController.swift | 34 +++--- .../TelegramUI/LogoutOptionsController.swift | 2 +- ...annelMemberCategoriesContextsManager.swift | 6 +- .../ThemeAutoNightSettingsController.swift | 11 +- .../ThemeSettingsColorSliderNode.swift | 73 +++++------- .../TelegramUI/ThemeSettingsController.swift | 24 +++- .../TelegramUI/ThemeSettingsThemeItem.swift | 6 +- .../Sources/PresentationThemeSettings.swift | 45 +++++-- 44 files changed, 483 insertions(+), 417 deletions(-) diff --git a/submodules/Display/Display/UIKitUtils.swift b/submodules/Display/Display/UIKitUtils.swift index 13cd3dafe9..3a35f30661 100644 --- a/submodules/Display/Display/UIKitUtils.swift +++ b/submodules/Display/Display/UIKitUtils.swift @@ -152,6 +152,18 @@ public extension UIColor { } return self } + + func interpolateTo(_ color: UIColor, fraction: CGFloat) -> UIColor? { + let f = min(max(0, fraction), 1) + + guard let c1 = self.cgColor.components, let c2 = color.cgColor.components else { return nil } + let r: CGFloat = CGFloat(c1[0] + (c2[0] - c1[0]) * f) + let g: CGFloat = CGFloat(c1[1] + (c2[1] - c1[1]) * f) + let b: CGFloat = CGFloat(c1[2] + (c2[2] - c1[2]) * f) + let a: CGFloat = CGFloat(c1[3] + (c2[3] - c1[3]) * f) + + return UIColor(red: r, green: g, blue: b, alpha: a) + } } public extension CGSize { diff --git a/submodules/TelegramApi/Sources/Api0.swift b/submodules/TelegramApi/Sources/Api0.swift index 48f6783946..c07fbd6e77 100644 --- a/submodules/TelegramApi/Sources/Api0.swift +++ b/submodules/TelegramApi/Sources/Api0.swift @@ -128,6 +128,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-1802240206] = { return Api.messages.SentEncryptedMessage.parse_sentEncryptedFile($0) } dict[1571494644] = { return Api.ExportedMessageLink.parse_exportedMessageLink($0) } dict[-855308010] = { return Api.auth.Authorization.parse_authorization($0) } + dict[1148485274] = { return Api.auth.Authorization.parse_authorizationSignUpRequired($0) } dict[-181407105] = { return Api.InputFile.parse_inputFile($0) } dict[-95482955] = { return Api.InputFile.parse_inputFileBig($0) } dict[-1649296275] = { return Api.Peer.parse_peerUser($0) } @@ -238,9 +239,9 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-373643672] = { return Api.FolderPeer.parse_folderPeer($0) } dict[367766557] = { return Api.ChannelParticipant.parse_channelParticipant($0) } dict[-1557620115] = { return Api.ChannelParticipant.parse_channelParticipantSelf($0) } - dict[-471670279] = { return Api.ChannelParticipant.parse_channelParticipantCreator($0) } dict[470789295] = { return Api.ChannelParticipant.parse_channelParticipantBanned($0) } - dict[1571450403] = { return Api.ChannelParticipant.parse_channelParticipantAdmin($0) } + dict[-859915345] = { return Api.ChannelParticipant.parse_channelParticipantAdmin($0) } + dict[-2138237532] = { return Api.ChannelParticipant.parse_channelParticipantCreator($0) } dict[471043349] = { return Api.contacts.Blocked.parse_blocked($0) } dict[-1878523231] = { return Api.contacts.Blocked.parse_blockedSlice($0) } dict[-55902537] = { return Api.InputDialogPeer.parse_inputDialogPeer($0) } @@ -349,7 +350,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[295067450] = { return Api.BotInlineResult.parse_botInlineResult($0) } dict[911761060] = { return Api.messages.BotCallbackAnswer.parse_botCallbackAnswer($0) } dict[1314881805] = { return Api.payments.PaymentResult.parse_paymentResult($0) } - dict[1800845601] = { return Api.payments.PaymentResult.parse_paymentVerficationNeeded($0) } + dict[-666824391] = { return Api.payments.PaymentResult.parse_paymentVerificationNeeded($0) } dict[1694474197] = { return Api.messages.Chats.parse_chats($0) } dict[-1663561404] = { return Api.messages.Chats.parse_chatsSlice($0) } dict[482797855] = { return Api.InputSingleMedia.parse_inputSingleMedia($0) } @@ -488,7 +489,7 @@ fileprivate let parsers: [Int32 : (BufferReader) -> Any?] = { dict[-923939298] = { return Api.messages.Messages.parse_messagesSlice($0) } dict[-1022713000] = { return Api.Invoice.parse_invoice($0) } dict[-2122045747] = { return Api.PeerSettings.parse_peerSettings($0) } - dict[955951967] = { return Api.auth.SentCode.parse_sentCode($0) } + dict[1577067778] = { return Api.auth.SentCode.parse_sentCode($0) } dict[480546647] = { return Api.InputChatPhoto.parse_inputChatPhotoEmpty($0) } dict[-1837345356] = { return Api.InputChatPhoto.parse_inputChatUploadedPhoto($0) } dict[-1991004873] = { return Api.InputChatPhoto.parse_inputChatPhoto($0) } diff --git a/submodules/TelegramApi/Sources/Api1.swift b/submodules/TelegramApi/Sources/Api1.swift index ec550c5be8..11639e00bd 100644 --- a/submodules/TelegramApi/Sources/Api1.swift +++ b/submodules/TelegramApi/Sources/Api1.swift @@ -6064,9 +6064,9 @@ public extension Api { public enum ChannelParticipant: TypeConstructorDescription { case channelParticipant(userId: Int32, date: Int32) case channelParticipantSelf(userId: Int32, inviterId: Int32, date: Int32) - case channelParticipantCreator(userId: Int32) case channelParticipantBanned(flags: Int32, userId: Int32, kickedBy: Int32, date: Int32, bannedRights: Api.ChatBannedRights) - case channelParticipantAdmin(flags: Int32, userId: Int32, inviterId: Int32?, promotedBy: Int32, date: Int32, adminRights: Api.ChatAdminRights) + case channelParticipantAdmin(flags: Int32, userId: Int32, inviterId: Int32?, promotedBy: Int32, date: Int32, adminRights: Api.ChatAdminRights, rank: String?) + case channelParticipantCreator(flags: Int32, userId: Int32, rank: String?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -6085,12 +6085,6 @@ public extension Api { serializeInt32(inviterId, buffer: buffer, boxed: false) serializeInt32(date, buffer: buffer, boxed: false) break - case .channelParticipantCreator(let userId): - if boxed { - buffer.appendInt32(-471670279) - } - serializeInt32(userId, buffer: buffer, boxed: false) - break case .channelParticipantBanned(let flags, let userId, let kickedBy, let date, let bannedRights): if boxed { buffer.appendInt32(470789295) @@ -6101,9 +6095,9 @@ public extension Api { serializeInt32(date, buffer: buffer, boxed: false) bannedRights.serialize(buffer, true) break - case .channelParticipantAdmin(let flags, let userId, let inviterId, let promotedBy, let date, let adminRights): + case .channelParticipantAdmin(let flags, let userId, let inviterId, let promotedBy, let date, let adminRights, let rank): if boxed { - buffer.appendInt32(1571450403) + buffer.appendInt32(-859915345) } serializeInt32(flags, buffer: buffer, boxed: false) serializeInt32(userId, buffer: buffer, boxed: false) @@ -6111,6 +6105,15 @@ public extension Api { serializeInt32(promotedBy, buffer: buffer, boxed: false) serializeInt32(date, buffer: buffer, boxed: false) adminRights.serialize(buffer, true) + if Int(flags) & Int(1 << 2) != 0 {serializeString(rank!, buffer: buffer, boxed: false)} + break + case .channelParticipantCreator(let flags, let userId, let rank): + if boxed { + buffer.appendInt32(-2138237532) + } + serializeInt32(flags, buffer: buffer, boxed: false) + serializeInt32(userId, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {serializeString(rank!, buffer: buffer, boxed: false)} break } } @@ -6121,12 +6124,12 @@ public extension Api { return ("channelParticipant", [("userId", userId), ("date", date)]) case .channelParticipantSelf(let userId, let inviterId, let date): return ("channelParticipantSelf", [("userId", userId), ("inviterId", inviterId), ("date", date)]) - case .channelParticipantCreator(let userId): - return ("channelParticipantCreator", [("userId", userId)]) case .channelParticipantBanned(let flags, let userId, let kickedBy, let date, let bannedRights): return ("channelParticipantBanned", [("flags", flags), ("userId", userId), ("kickedBy", kickedBy), ("date", date), ("bannedRights", bannedRights)]) - case .channelParticipantAdmin(let flags, let userId, let inviterId, let promotedBy, let date, let adminRights): - return ("channelParticipantAdmin", [("flags", flags), ("userId", userId), ("inviterId", inviterId), ("promotedBy", promotedBy), ("date", date), ("adminRights", adminRights)]) + case .channelParticipantAdmin(let flags, let userId, let inviterId, let promotedBy, let date, let adminRights, let rank): + return ("channelParticipantAdmin", [("flags", flags), ("userId", userId), ("inviterId", inviterId), ("promotedBy", promotedBy), ("date", date), ("adminRights", adminRights), ("rank", rank)]) + case .channelParticipantCreator(let flags, let userId, let rank): + return ("channelParticipantCreator", [("flags", flags), ("userId", userId), ("rank", rank)]) } } @@ -6161,17 +6164,6 @@ public extension Api { return nil } } - public static func parse_channelParticipantCreator(_ reader: BufferReader) -> ChannelParticipant? { - var _1: Int32? - _1 = reader.readInt32() - let _c1 = _1 != nil - if _c1 { - return Api.ChannelParticipant.channelParticipantCreator(userId: _1!) - } - else { - return nil - } - } public static func parse_channelParticipantBanned(_ reader: BufferReader) -> ChannelParticipant? { var _1: Int32? _1 = reader.readInt32() @@ -6212,14 +6204,34 @@ public extension Api { if let signature = reader.readInt32() { _6 = Api.parse(reader, signature: signature) as? Api.ChatAdminRights } + var _7: String? + if Int(_1!) & Int(1 << 2) != 0 {_7 = parseString(reader) } let _c1 = _1 != nil let _c2 = _2 != nil let _c3 = (Int(_1!) & Int(1 << 1) == 0) || _3 != nil let _c4 = _4 != nil let _c5 = _5 != nil let _c6 = _6 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 { - return Api.ChannelParticipant.channelParticipantAdmin(flags: _1!, userId: _2!, inviterId: _3, promotedBy: _4!, date: _5!, adminRights: _6!) + let _c7 = (Int(_1!) & Int(1 << 2) == 0) || _7 != nil + if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 && _c7 { + return Api.ChannelParticipant.channelParticipantAdmin(flags: _1!, userId: _2!, inviterId: _3, promotedBy: _4!, date: _5!, adminRights: _6!, rank: _7) + } + else { + return nil + } + } + public static func parse_channelParticipantCreator(_ reader: BufferReader) -> ChannelParticipant? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Int32? + _2 = reader.readInt32() + var _3: String? + if Int(_1!) & Int(1 << 0) != 0 {_3 = parseString(reader) } + let _c1 = _1 != nil + let _c2 = _2 != nil + let _c3 = (Int(_1!) & Int(1 << 0) == 0) || _3 != nil + if _c1 && _c2 && _c3 { + return Api.ChannelParticipant.channelParticipantCreator(flags: _1!, userId: _2!, rank: _3) } else { return nil diff --git a/submodules/TelegramApi/Sources/Api2.swift b/submodules/TelegramApi/Sources/Api2.swift index 7df19d0089..02f63a3f26 100644 --- a/submodules/TelegramApi/Sources/Api2.swift +++ b/submodules/TelegramApi/Sources/Api2.swift @@ -226,7 +226,7 @@ public struct payments { } public enum PaymentResult: TypeConstructorDescription { case paymentResult(updates: Api.Updates) - case paymentVerficationNeeded(url: String) + case paymentVerificationNeeded(url: String) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -236,9 +236,9 @@ public struct payments { } updates.serialize(buffer, true) break - case .paymentVerficationNeeded(let url): + case .paymentVerificationNeeded(let url): if boxed { - buffer.appendInt32(1800845601) + buffer.appendInt32(-666824391) } serializeString(url, buffer: buffer, boxed: false) break @@ -249,8 +249,8 @@ public struct payments { switch self { case .paymentResult(let updates): return ("paymentResult", [("updates", updates)]) - case .paymentVerficationNeeded(let url): - return ("paymentVerficationNeeded", [("url", url)]) + case .paymentVerificationNeeded(let url): + return ("paymentVerificationNeeded", [("url", url)]) } } @@ -267,12 +267,12 @@ public struct payments { return nil } } - public static func parse_paymentVerficationNeeded(_ reader: BufferReader) -> PaymentResult? { + public static func parse_paymentVerificationNeeded(_ reader: BufferReader) -> PaymentResult? { var _1: String? _1 = parseString(reader) let _c1 = _1 != nil if _c1 { - return Api.payments.PaymentResult.paymentVerficationNeeded(url: _1!) + return Api.payments.PaymentResult.paymentVerificationNeeded(url: _1!) } else { return nil @@ -496,6 +496,7 @@ public extension Api { public struct auth { public enum Authorization: TypeConstructorDescription { case authorization(flags: Int32, tmpSessions: Int32?, user: Api.User) + case authorizationSignUpRequired(flags: Int32, termsOfService: Api.help.TermsOfService?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { @@ -507,6 +508,13 @@ public struct auth { if Int(flags) & Int(1 << 0) != 0 {serializeInt32(tmpSessions!, buffer: buffer, boxed: false)} user.serialize(buffer, true) break + case .authorizationSignUpRequired(let flags, let termsOfService): + if boxed { + buffer.appendInt32(1148485274) + } + serializeInt32(flags, buffer: buffer, boxed: false) + if Int(flags) & Int(1 << 0) != 0 {termsOfService!.serialize(buffer, true)} + break } } @@ -514,6 +522,8 @@ public struct auth { switch self { case .authorization(let flags, let tmpSessions, let user): return ("authorization", [("flags", flags), ("tmpSessions", tmpSessions), ("user", user)]) + case .authorizationSignUpRequired(let flags, let termsOfService): + return ("authorizationSignUpRequired", [("flags", flags), ("termsOfService", termsOfService)]) } } @@ -536,6 +546,22 @@ public struct auth { return nil } } + public static func parse_authorizationSignUpRequired(_ reader: BufferReader) -> Authorization? { + var _1: Int32? + _1 = reader.readInt32() + var _2: Api.help.TermsOfService? + if Int(_1!) & Int(1 << 0) != 0 {if let signature = reader.readInt32() { + _2 = Api.parse(reader, signature: signature) as? Api.help.TermsOfService + } } + let _c1 = _1 != nil + let _c2 = (Int(_1!) & Int(1 << 0) == 0) || _2 != nil + if _c1 && _c2 { + return Api.auth.Authorization.authorizationSignUpRequired(flags: _1!, termsOfService: _2) + } + else { + return nil + } + } } public enum PasswordRecovery: TypeConstructorDescription { @@ -647,28 +673,27 @@ public struct auth { } public enum SentCode: TypeConstructorDescription { - case sentCode(flags: Int32, type: Api.auth.SentCodeType, phoneCodeHash: String, nextType: Api.auth.CodeType?, timeout: Int32?, termsOfService: Api.help.TermsOfService?) + case sentCode(flags: Int32, type: Api.auth.SentCodeType, phoneCodeHash: String, nextType: Api.auth.CodeType?, timeout: Int32?) public func serialize(_ buffer: Buffer, _ boxed: Swift.Bool) { switch self { - case .sentCode(let flags, let type, let phoneCodeHash, let nextType, let timeout, let termsOfService): + case .sentCode(let flags, let type, let phoneCodeHash, let nextType, let timeout): if boxed { - buffer.appendInt32(955951967) + buffer.appendInt32(1577067778) } serializeInt32(flags, buffer: buffer, boxed: false) type.serialize(buffer, true) serializeString(phoneCodeHash, buffer: buffer, boxed: false) if Int(flags) & Int(1 << 1) != 0 {nextType!.serialize(buffer, true)} if Int(flags) & Int(1 << 2) != 0 {serializeInt32(timeout!, buffer: buffer, boxed: false)} - if Int(flags) & Int(1 << 3) != 0 {termsOfService!.serialize(buffer, true)} break } } public func descriptionFields() -> (String, [(String, Any)]) { switch self { - case .sentCode(let flags, let type, let phoneCodeHash, let nextType, let timeout, let termsOfService): - return ("sentCode", [("flags", flags), ("type", type), ("phoneCodeHash", phoneCodeHash), ("nextType", nextType), ("timeout", timeout), ("termsOfService", termsOfService)]) + case .sentCode(let flags, let type, let phoneCodeHash, let nextType, let timeout): + return ("sentCode", [("flags", flags), ("type", type), ("phoneCodeHash", phoneCodeHash), ("nextType", nextType), ("timeout", timeout)]) } } @@ -687,18 +712,13 @@ public struct auth { } } var _5: Int32? if Int(_1!) & Int(1 << 2) != 0 {_5 = reader.readInt32() } - var _6: Api.help.TermsOfService? - if Int(_1!) & Int(1 << 3) != 0 {if let signature = reader.readInt32() { - _6 = Api.parse(reader, signature: signature) as? Api.help.TermsOfService - } } let _c1 = _1 != nil let _c2 = _2 != nil let _c3 = _3 != nil let _c4 = (Int(_1!) & Int(1 << 1) == 0) || _4 != nil let _c5 = (Int(_1!) & Int(1 << 2) == 0) || _5 != nil - let _c6 = (Int(_1!) & Int(1 << 3) == 0) || _6 != nil - if _c1 && _c2 && _c3 && _c4 && _c5 && _c6 { - return Api.auth.SentCode.sentCode(flags: _1!, type: _2!, phoneCodeHash: _3!, nextType: _4, timeout: _5, termsOfService: _6) + if _c1 && _c2 && _c3 && _c4 && _c5 { + return Api.auth.SentCode.sentCode(flags: _1!, type: _2!, phoneCodeHash: _3!, nextType: _4, timeout: _5) } else { return nil diff --git a/submodules/TelegramApi/Sources/Api3.swift b/submodules/TelegramApi/Sources/Api3.swift index 86116c0e3f..d5a1815eb7 100644 --- a/submodules/TelegramApi/Sources/Api3.swift +++ b/submodules/TelegramApi/Sources/Api3.swift @@ -3367,22 +3367,6 @@ public extension Api { }) } - public static func editAdmin(channel: Api.InputChannel, userId: Api.InputUser, adminRights: Api.ChatAdminRights) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { - let buffer = Buffer() - buffer.appendInt32(1895338938) - channel.serialize(buffer, true) - userId.serialize(buffer, true) - adminRights.serialize(buffer, true) - return (FunctionDescription(name: "channels.editAdmin", parameters: [("channel", channel), ("userId", userId), ("adminRights", adminRights)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in - let reader = BufferReader(buffer) - var result: Api.Updates? - if let signature = reader.readInt32() { - result = Api.parse(reader, signature: signature) as? Api.Updates - } - return result - }) - } - public static func editBanned(channel: Api.InputChannel, userId: Api.InputUser, bannedRights: Api.ChatBannedRights) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() buffer.appendInt32(1920559378) @@ -3520,6 +3504,23 @@ public extension Api { return result }) } + + public static func editAdmin(channel: Api.InputChannel, userId: Api.InputUser, adminRights: Api.ChatAdminRights, rank: String) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(-751007486) + channel.serialize(buffer, true) + userId.serialize(buffer, true) + adminRights.serialize(buffer, true) + serializeString(rank, buffer: buffer, boxed: false) + return (FunctionDescription(name: "channels.editAdmin", parameters: [("channel", channel), ("userId", userId), ("adminRights", adminRights), ("rank", rank)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.Updates? in + let reader = BufferReader(buffer) + var result: Api.Updates? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.Updates + } + return result + }) + } } public struct payments { public static func getPaymentForm(msgId: Int32) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { @@ -3645,24 +3646,6 @@ public extension Api { }) } - public static func signUp(phoneNumber: String, phoneCodeHash: String, phoneCode: String, firstName: String, lastName: String) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { - let buffer = Buffer() - buffer.appendInt32(453408308) - serializeString(phoneNumber, buffer: buffer, boxed: false) - serializeString(phoneCodeHash, buffer: buffer, boxed: false) - serializeString(phoneCode, buffer: buffer, boxed: false) - serializeString(firstName, buffer: buffer, boxed: false) - serializeString(lastName, buffer: buffer, boxed: false) - return (FunctionDescription(name: "auth.signUp", parameters: [("phoneNumber", phoneNumber), ("phoneCodeHash", phoneCodeHash), ("phoneCode", phoneCode), ("firstName", firstName), ("lastName", lastName)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.auth.Authorization? in - let reader = BufferReader(buffer) - var result: Api.auth.Authorization? - if let signature = reader.readInt32() { - result = Api.parse(reader, signature: signature) as? Api.auth.Authorization - } - return result - }) - } - public static func signIn(phoneNumber: String, phoneCodeHash: String, phoneCode: String) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { let buffer = Buffer() buffer.appendInt32(-1126886015) @@ -3878,6 +3861,23 @@ public extension Api { return result }) } + + public static func signUp(phoneNumber: String, phoneCodeHash: String, firstName: String, lastName: String) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { + let buffer = Buffer() + buffer.appendInt32(-2131827673) + serializeString(phoneNumber, buffer: buffer, boxed: false) + serializeString(phoneCodeHash, buffer: buffer, boxed: false) + serializeString(firstName, buffer: buffer, boxed: false) + serializeString(lastName, buffer: buffer, boxed: false) + return (FunctionDescription(name: "auth.signUp", parameters: [("phoneNumber", phoneNumber), ("phoneCodeHash", phoneCodeHash), ("firstName", firstName), ("lastName", lastName)]), buffer, DeserializeFunctionResponse { (buffer: Buffer) -> Api.auth.Authorization? in + let reader = BufferReader(buffer) + var result: Api.auth.Authorization? + if let signature = reader.readInt32() { + result = Api.parse(reader, signature: signature) as? Api.auth.Authorization + } + return result + }) + } } public struct bots { public static func sendCustomRequest(customMethod: String, params: Api.DataJSON) -> (FunctionDescription, Buffer, DeserializeFunctionResponse) { diff --git a/submodules/TelegramCore/TelegramCore/AccountState.swift b/submodules/TelegramCore/TelegramCore/AccountState.swift index 337c5a7a6c..ca57a4b82a 100644 --- a/submodules/TelegramCore/TelegramCore/AccountState.swift +++ b/submodules/TelegramCore/TelegramCore/AccountState.swift @@ -147,11 +147,11 @@ extension UnauthorizedAccountTermsOfService { public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { case empty case phoneEntry(countryCode: Int32, number: String) - case confirmationCodeEntry(number: String, type: SentAuthorizationCodeType, hash: String, timeout: Int32?, nextType: AuthorizationCodeNextType?, termsOfService: (UnauthorizedAccountTermsOfService, Bool)?, syncContacts: Bool) + case confirmationCodeEntry(number: String, type: SentAuthorizationCodeType, hash: String, timeout: Int32?, nextType: AuthorizationCodeNextType?, syncContacts: Bool) case passwordEntry(hint: String, number: String?, code: String?, suggestReset: Bool, syncContacts: Bool) case passwordRecovery(hint: String, number: String?, code: String?, emailPattern: String, syncContacts: Bool) case awaitingAccountReset(protectedUntil: Int32, number: String?, syncContacts: Bool) - case signUp(number: String, codeHash: String, code: String, firstName: String, lastName: String, termsOfService: UnauthorizedAccountTermsOfService?, syncContacts: Bool) + case signUp(number: String, codeHash: String, firstName: String, lastName: String, termsOfService: UnauthorizedAccountTermsOfService?, syncContacts: Bool) public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("v", orElse: 0) { @@ -164,11 +164,7 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { if let value = decoder.decodeOptionalInt32ForKey("nt") { nextType = AuthorizationCodeNextType(rawValue: value) } - var termsOfService: (UnauthorizedAccountTermsOfService, Bool)? - if let termsValue = decoder.decodeObjectForKey("tos", decoder: { UnauthorizedAccountTermsOfService(decoder: $0) }) as? UnauthorizedAccountTermsOfService { - termsOfService = (termsValue, decoder.decodeInt32ForKey("tose", orElse: 0) != 0) - } - self = .confirmationCodeEntry(number: decoder.decodeStringForKey("num", orElse: ""), type: decoder.decodeObjectForKey("t", decoder: { SentAuthorizationCodeType(decoder: $0) }) as! SentAuthorizationCodeType, hash: decoder.decodeStringForKey("h", orElse: ""), timeout: decoder.decodeOptionalInt32ForKey("tm"), nextType: nextType, termsOfService: termsOfService, syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) + self = .confirmationCodeEntry(number: decoder.decodeStringForKey("num", orElse: ""), type: decoder.decodeObjectForKey("t", decoder: { SentAuthorizationCodeType(decoder: $0) }) as! SentAuthorizationCodeType, hash: decoder.decodeStringForKey("h", orElse: ""), timeout: decoder.decodeOptionalInt32ForKey("tm"), nextType: nextType, syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) case UnauthorizedAccountStateContentsValue.passwordEntry.rawValue: self = .passwordEntry(hint: decoder.decodeStringForKey("h", orElse: ""), number: decoder.decodeOptionalStringForKey("n"), code: decoder.decodeOptionalStringForKey("c"), suggestReset: decoder.decodeInt32ForKey("suggestReset", orElse: 0) != 0, syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) case UnauthorizedAccountStateContentsValue.passwordRecovery.rawValue: @@ -176,7 +172,7 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { case UnauthorizedAccountStateContentsValue.awaitingAccountReset.rawValue: self = .awaitingAccountReset(protectedUntil: decoder.decodeInt32ForKey("protectedUntil", orElse: 0), number: decoder.decodeOptionalStringForKey("number"), syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) case UnauthorizedAccountStateContentsValue.signUp.rawValue: - self = .signUp(number: decoder.decodeStringForKey("n", orElse: ""), codeHash: decoder.decodeStringForKey("h", orElse: ""), code: decoder.decodeStringForKey("c", orElse: ""), firstName: decoder.decodeStringForKey("f", orElse: ""), lastName: decoder.decodeStringForKey("l", orElse: ""), termsOfService: decoder.decodeObjectForKey("tos", decoder: { UnauthorizedAccountTermsOfService(decoder: $0) }) as? UnauthorizedAccountTermsOfService, syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) + self = .signUp(number: decoder.decodeStringForKey("n", orElse: ""), codeHash: decoder.decodeStringForKey("h", orElse: ""), firstName: decoder.decodeStringForKey("f", orElse: ""), lastName: decoder.decodeStringForKey("l", orElse: ""), termsOfService: decoder.decodeObjectForKey("tos", decoder: { UnauthorizedAccountTermsOfService(decoder: $0) }) as? UnauthorizedAccountTermsOfService, syncContacts: decoder.decodeInt32ForKey("syncContacts", orElse: 1) != 0) default: assertionFailure() self = .empty @@ -191,7 +187,7 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { encoder.encodeInt32(UnauthorizedAccountStateContentsValue.phoneEntry.rawValue, forKey: "v") encoder.encodeInt32(countryCode, forKey: "cc") encoder.encodeString(number, forKey: "n") - case let .confirmationCodeEntry(number, type, hash, timeout, nextType, termsOfService, syncContacts): + case let .confirmationCodeEntry(number, type, hash, timeout, nextType, syncContacts): encoder.encodeInt32(UnauthorizedAccountStateContentsValue.confirmationCodeEntry.rawValue, forKey: "v") encoder.encodeString(number, forKey: "num") encoder.encodeObject(type, forKey: "t") @@ -206,12 +202,6 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { } else { encoder.encodeNil(forKey: "nt") } - if let (termsOfService, exclusive) = termsOfService { - encoder.encodeObject(termsOfService, forKey: "tos") - encoder.encodeInt32(exclusive ? 1 : 0, forKey: "tose") - } else { - encoder.encodeNil(forKey: "tos") - } encoder.encodeInt32(syncContacts ? 1 : 0, forKey: "syncContacts") case let .passwordEntry(hint, number, code, suggestReset, syncContacts): encoder.encodeInt32(UnauthorizedAccountStateContentsValue.passwordEntry.rawValue, forKey: "v") @@ -252,11 +242,10 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { encoder.encodeNil(forKey: "number") } encoder.encodeInt32(syncContacts ? 1 : 0, forKey: "syncContacts") - case let .signUp(number, codeHash, code, firstName, lastName, termsOfService, syncContacts): + case let .signUp(number, codeHash, firstName, lastName, termsOfService, syncContacts): encoder.encodeInt32(UnauthorizedAccountStateContentsValue.signUp.rawValue, forKey: "v") encoder.encodeString(number, forKey: "n") encoder.encodeString(codeHash, forKey: "h") - encoder.encodeString(code, forKey: "c") encoder.encodeString(firstName, forKey: "f") encoder.encodeString(lastName, forKey: "l") if let termsOfService = termsOfService { @@ -282,8 +271,8 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { } else { return false } - case let .confirmationCodeEntry(lhsNumber, lhsType, lhsHash, lhsTimeout, lhsNextType, lhsTermsOfService, lhsSyncContacts): - if case let .confirmationCodeEntry(rhsNumber, rhsType, rhsHash, rhsTimeout, rhsNextType, rhsTermsOfService, rhsSyncContacts) = rhs { + case let .confirmationCodeEntry(lhsNumber, lhsType, lhsHash, lhsTimeout, lhsNextType, lhsSyncContacts): + if case let .confirmationCodeEntry(rhsNumber, rhsType, rhsHash, rhsTimeout, rhsNextType, rhsSyncContacts) = rhs { if lhsNumber != rhsNumber { return false } @@ -299,12 +288,6 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { if lhsNextType != rhsNextType { return false } - if lhsTermsOfService?.0 != rhsTermsOfService?.0 { - return false - } - if lhsTermsOfService?.1 != rhsTermsOfService?.1 { - return false - } if lhsSyncContacts != rhsSyncContacts { return false } @@ -330,8 +313,8 @@ public enum UnauthorizedAccountStateContents: PostboxCoding, Equatable { } else { return false } - case let .signUp(number, codeHash, code, firstName, lastName, termsOfService, syncContacts): - if case .signUp(number, codeHash, code, firstName, lastName, termsOfService, syncContacts) = rhs { + case let .signUp(number, codeHash, firstName, lastName, termsOfService, syncContacts): + if case .signUp(number, codeHash, firstName, lastName, termsOfService, syncContacts) = rhs { return true } else { return false diff --git a/submodules/TelegramCore/TelegramCore/AddPeerMember.swift b/submodules/TelegramCore/TelegramCore/AddPeerMember.swift index 2a105a78a4..446c878aee 100644 --- a/submodules/TelegramCore/TelegramCore/AddPeerMember.swift +++ b/submodules/TelegramCore/TelegramCore/AddPeerMember.swift @@ -91,10 +91,10 @@ public func addChannelMember(account: Account, peerId: PeerId, memberId: PeerId) if let peer = transaction.getPeer(peerId), let memberPeer = transaction.getPeer(memberId), let inputUser = apiInputUser(memberPeer) { if let channel = peer as? TelegramChannel, let inputChannel = apiInputChannel(channel) { let updatedParticipant: ChannelParticipant - if let currentParticipant = currentParticipant, case let .member(_, invitedAt, adminInfo, _) = currentParticipant { - updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: invitedAt, adminInfo: adminInfo, banInfo: nil) + if let currentParticipant = currentParticipant, case let .member(_, invitedAt, adminInfo, _, rank) = currentParticipant { + updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: invitedAt, adminInfo: adminInfo, banInfo: nil, rank: rank) } else { - updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: nil, banInfo: nil) + updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: nil, banInfo: nil, rank: nil) } return account.network.request(Api.functions.channels.inviteToChannel(channel: inputChannel, users: [inputUser])) |> map { [$0] } @@ -131,7 +131,7 @@ public func addChannelMember(account: Account, peerId: PeerId, memberId: PeerId) switch currentParticipant { case .creator: break - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { wasBanned = true wasMember = !banInfo.rights.flags.contains(.banReadMessages) @@ -158,7 +158,7 @@ public func addChannelMember(account: Account, peerId: PeerId, memberId: PeerId) if let presence = transaction.getPeerPresence(peerId: memberPeer.id) { presences[memberPeer.id] = presence } - if case let .member(_, _, maybeAdminInfo, maybeBannedInfo) = updatedParticipant { + if case let .member(_, _, maybeAdminInfo, maybeBannedInfo, _) = updatedParticipant { if let adminInfo = maybeAdminInfo { if let peer = transaction.getPeer(adminInfo.promotedBy) { peers[peer.id] = peer diff --git a/submodules/TelegramCore/TelegramCore/ApiGroupOrChannel.swift b/submodules/TelegramCore/TelegramCore/ApiGroupOrChannel.swift index 02e1cbf52f..268792417f 100644 --- a/submodules/TelegramCore/TelegramCore/ApiGroupOrChannel.swift +++ b/submodules/TelegramCore/TelegramCore/ApiGroupOrChannel.swift @@ -47,9 +47,9 @@ func parseTelegramGroupOrChannel(chat: Api.Chat) -> Peer? { var groupFlags = TelegramGroupFlags() var role: TelegramGroupRole = .member if (flags & (1 << 0)) != 0 { - role = .creator + role = .creator(rank: nil) } else if let adminRights = adminRights { - role = .admin(TelegramChatAdminRights(apiAdminRights: adminRights)) + role = .admin(TelegramChatAdminRights(apiAdminRights: adminRights), rank: nil) } if (flags & (1 << 5)) != 0 { groupFlags.insert(.deactivated) diff --git a/submodules/TelegramCore/TelegramCore/Authorization.swift b/submodules/TelegramCore/TelegramCore/Authorization.swift index 8f7b39bd21..e2b25d5ca5 100644 --- a/submodules/TelegramCore/TelegramCore/Authorization.swift +++ b/submodules/TelegramCore/TelegramCore/Authorization.swift @@ -83,22 +83,12 @@ public func sendAuthorizationCode(accountManager: AccountManager, account: Unaut |> mapToSignal { (sentCode, account) -> Signal in return account.postbox.transaction { transaction -> UnauthorizedAccount in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, termsOfService): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): var parsedNextType: AuthorizationCodeNextType? if let nextType = nextType { parsedNextType = AuthorizationCodeNextType(apiType: nextType) } - var explicitTerms = false - if let termsOfService = termsOfService { - switch termsOfService { - case let .termsOfService(value): - if (value.flags & (1 << 0)) != 0 { - explicitTerms = true - } - } - } - - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .confirmationCodeEntry(number: phoneNumber, type: SentAuthorizationCodeType(apiType: type), hash: phoneCodeHash, timeout: timeout, nextType: parsedNextType, termsOfService: termsOfService.flatMap(UnauthorizedAccountTermsOfService.init(apiTermsOfService:)).flatMap({ ($0, explicitTerms) }), syncContacts: syncContacts))) + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .confirmationCodeEntry(number: phoneNumber, type: SentAuthorizationCodeType(apiType: type), hash: phoneCodeHash, timeout: timeout, nextType: parsedNextType, syncContacts: syncContacts))) } return account } @@ -112,47 +102,35 @@ public func resendAuthorizationCode(account: UnauthorizedAccount) -> Signal Signal in if let state = transaction.getState() as? UnauthorizedAccountState { switch state.contents { - case let .confirmationCodeEntry(number, _, hash, _, nextType, _, syncContacts): + case let .confirmationCodeEntry(number, _, hash, _, nextType, syncContacts): if nextType != nil { return account.network.request(Api.functions.auth.resendCode(phoneNumber: number, phoneCodeHash: hash), automaticFloodWait: false) - |> mapError { error -> AuthorizationCodeRequestError in - if error.errorDescription.hasPrefix("FLOOD_WAIT") { - return .limitExceeded - } else if error.errorDescription == "PHONE_NUMBER_INVALID" { - return .invalidPhoneNumber - } else if error.errorDescription == "PHONE_NUMBER_FLOOD" { - return .phoneLimitExceeded - } else if error.errorDescription == "PHONE_NUMBER_BANNED" { - return .phoneBanned - } else { - return .generic(info: (Int(error.errorCode), error.errorDescription)) + |> mapError { error -> AuthorizationCodeRequestError in + if error.errorDescription.hasPrefix("FLOOD_WAIT") { + return .limitExceeded + } else if error.errorDescription == "PHONE_NUMBER_INVALID" { + return .invalidPhoneNumber + } else if error.errorDescription == "PHONE_NUMBER_FLOOD" { + return .phoneLimitExceeded + } else if error.errorDescription == "PHONE_NUMBER_BANNED" { + return .phoneBanned + } else { + return .generic(info: (Int(error.errorCode), error.errorDescription)) + } + } + |> mapToSignal { sentCode -> Signal in + return account.postbox.transaction { transaction -> Void in + switch sentCode { + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): + var parsedNextType: AuthorizationCodeNextType? + if let nextType = nextType { + parsedNextType = AuthorizationCodeNextType(apiType: nextType) + } + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .confirmationCodeEntry(number: number, type: SentAuthorizationCodeType(apiType: type), hash: phoneCodeHash, timeout: timeout, nextType: parsedNextType, syncContacts: syncContacts))) + } - } - |> mapToSignal { sentCode -> Signal in - return account.postbox.transaction { transaction -> Void in - switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, termsOfService): - - var parsedNextType: AuthorizationCodeNextType? - if let nextType = nextType { - parsedNextType = AuthorizationCodeNextType(apiType: nextType) - } - - var explicitTerms = false - if let termsOfService = termsOfService { - switch termsOfService { - case let .termsOfService(value): - if (value.flags & (1 << 0)) != 0 { - explicitTerms = true - } - } - } - - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .confirmationCodeEntry(number: number, type: SentAuthorizationCodeType(apiType: type), hash: phoneCodeHash, timeout: timeout, nextType: parsedNextType, termsOfService: termsOfService.flatMap(UnauthorizedAccountTermsOfService.init(apiTermsOfService:)).flatMap({ ($0, explicitTerms) }), syncContacts: syncContacts))) - - } - } |> mapError { _ -> AuthorizationCodeRequestError in return .generic(info: nil) } - } + } |> mapError { _ -> AuthorizationCodeRequestError in return .generic(info: nil) } + } } else { return .fail(.generic(info: nil)) } @@ -195,11 +173,11 @@ public enum AuthorizeWithCodeResult { case loggedIn } -public func authorizeWithCode(accountManager: AccountManager, account: UnauthorizedAccount, code: String, termsOfService: UnauthorizedAccountTermsOfService?) -> Signal { +public func authorizeWithCode(accountManager: AccountManager, account: UnauthorizedAccount, code: String) -> Signal { return account.postbox.transaction { transaction -> Signal in if let state = transaction.getState() as? UnauthorizedAccountState { switch state.contents { - case let .confirmationCodeEntry(number, _, hash, _, _, _, syncContacts): + case let .confirmationCodeEntry(number, _, hash, _, _, syncContacts): return account.network.request(Api.functions.auth.signIn(phoneNumber: number, phoneCodeHash: hash, phoneCode: code), automaticFloodWait: false) |> map { authorization in return .authorization(authorization) @@ -239,7 +217,7 @@ public func authorizeWithCode(accountManager: AccountManager, account: Unauthori return account.postbox.transaction { transaction -> Signal in switch result { case .signUp: - return .single(.signUp(AuthorizationSignUpData(number: number, codeHash: hash, code: code, termsOfService: termsOfService, syncContacts: syncContacts))) + return .single(.signUp(AuthorizationSignUpData(number: number, codeHash: hash, code: code, termsOfService: nil, syncContacts: syncContacts))) case let .password(hint): transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .passwordEntry(hint: hint, number: number, code: code, suggestReset: false, syncContacts: syncContacts))) return .single(.loggedIn) @@ -250,6 +228,17 @@ public func authorizeWithCode(accountManager: AccountManager, account: Unauthori let state = AuthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, peerId: user.id, state: nil) initializedAppSettingsAfterLogin(transaction: transaction, appVersion: account.networkArguments.appVersion, syncContacts: syncContacts) transaction.setState(state) + case let .authorizationSignUpRequired(flags, termsOfService): + var explicitTerms = false + if let termsOfService = termsOfService { + switch termsOfService { + case let .termsOfService(value): + if (value.flags & (1 << 0)) != 0 { + explicitTerms = true + } + } + } + return .single(.signUp(AuthorizationSignUpData(number: number, codeHash: hash, code: code, termsOfService: termsOfService.flatMap(UnauthorizedAccountTermsOfService.init(apiTermsOfService:)), syncContacts: syncContacts))) } return accountManager.transaction { transaction -> AuthorizeWithCodeResult in switchToAuthorizedAccount(transaction: transaction, account: account) @@ -277,7 +266,7 @@ public func authorizeWithCode(accountManager: AccountManager, account: Unauthori public func beginSignUp(account: UnauthorizedAccount, data: AuthorizationSignUpData) -> Signal { return account.postbox.transaction { transaction -> Void in - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .signUp(number: data.number, codeHash: data.codeHash, code: data.code, firstName: "", lastName: "", termsOfService: data.termsOfService, syncContacts: data.syncContacts))) + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .signUp(number: data.number, codeHash: data.codeHash, firstName: "", lastName: "", termsOfService: data.termsOfService, syncContacts: data.syncContacts))) } |> ignoreValues } @@ -314,7 +303,9 @@ public func authorizeWithPassword(accountManager: AccountManager, account: Unaut return accountManager.transaction { transaction -> Void in switchToAuthorizedAccount(transaction: transaction, account: account) } - } + case .authorizationSignUpRequired: + return .never() + } } |> switchToLatest |> mapError { _ -> AuthorizationPasswordVerificationError in @@ -380,14 +371,13 @@ public func performPasswordRecovery(accountManager: AccountManager, account: Una case let .authorization(_, _, user): let user = TelegramUser(user: user) let state = AuthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, peerId: user.id, state: nil) - /*transaction.updatePeersInternal([user], update: { current, peer -> Peer? in - return peer - })*/ initializedAppSettingsAfterLogin(transaction: transaction, appVersion: account.networkArguments.appVersion, syncContacts: syncContacts) transaction.setState(state) return accountManager.transaction { transaction -> Void in switchToAuthorizedAccount(transaction: transaction, account: account) } + case .authorizationSignUpRequired: + return .never() } } |> switchToLatest @@ -454,8 +444,8 @@ public enum SignUpError { public func signUpWithName(accountManager: AccountManager, account: UnauthorizedAccount, firstName: String, lastName: String, avatarData: Data?) -> Signal { return account.postbox.transaction { transaction -> Signal in - if let state = transaction.getState() as? UnauthorizedAccountState, case let .signUp(number, codeHash, code, _, _, _, syncContacts) = state.contents { - return account.network.request(Api.functions.auth.signUp(phoneNumber: number, phoneCodeHash: codeHash, phoneCode: code, firstName: firstName, lastName: lastName)) + if let state = transaction.getState() as? UnauthorizedAccountState, case let .signUp(number, codeHash, _, _, _, syncContacts) = state.contents { + return account.network.request(Api.functions.auth.signUp(phoneNumber: number, phoneCodeHash: codeHash, firstName: firstName, lastName: lastName)) |> mapError { error -> SignUpError in if error.errorDescription.hasPrefix("FLOOD_WAIT") { return .limitExceeded @@ -510,6 +500,8 @@ public func signUpWithName(accountManager: AccountManager, account: Unauthorized return appliedState |> then(switchedAccounts) } + case .authorizationSignUpRequired: + return .fail(.generic) } } } else { diff --git a/submodules/TelegramCore/TelegramCore/BotPaymentForm.swift b/submodules/TelegramCore/TelegramCore/BotPaymentForm.swift index c65afa122f..42b74c0c63 100644 --- a/submodules/TelegramCore/TelegramCore/BotPaymentForm.swift +++ b/submodules/TelegramCore/TelegramCore/BotPaymentForm.swift @@ -372,7 +372,7 @@ public func sendBotPaymentForm(account: Account, messageId: MessageId, validated case let .paymentResult(updates): account.stateManager.addUpdates(updates) return .done - case let .paymentVerficationNeeded(url): + case let .paymentVerificationNeeded(url): return .externalVerificationRequired(url: url) } } diff --git a/submodules/TelegramCore/TelegramCore/CachedChannelParticipants.swift b/submodules/TelegramCore/TelegramCore/CachedChannelParticipants.swift index 1a1d855829..6a8e4d1f44 100644 --- a/submodules/TelegramCore/TelegramCore/CachedChannelParticipants.swift +++ b/submodules/TelegramCore/TelegramCore/CachedChannelParticipants.swift @@ -75,22 +75,31 @@ public struct ChannelParticipantBannedInfo: PostboxCoding, Equatable { } public enum ChannelParticipant: PostboxCoding, Equatable { - case creator(id: PeerId) - case member(id: PeerId, invitedAt: Int32, adminInfo: ChannelParticipantAdminInfo?, banInfo: ChannelParticipantBannedInfo?) + case creator(id: PeerId, rank: String?) + case member(id: PeerId, invitedAt: Int32, adminInfo: ChannelParticipantAdminInfo?, banInfo: ChannelParticipantBannedInfo?, rank: String?) public var peerId: PeerId { switch self { - case let .creator(id): + case let .creator(id, _): return id - case let .member(id, _, _, _): + case let .member(id, _, _, _, _): return id } } + public var rank: String? { + switch self { + case let .creator(_, rank): + return rank + case let .member(_, _, _, _, rank): + return rank + } + } + public static func ==(lhs: ChannelParticipant, rhs: ChannelParticipant) -> Bool { switch lhs { - case let .member(lhsId, lhsInvitedAt, lhsAdminInfo, lhsBanInfo): - if case let .member(rhsId, rhsInvitedAt, rhsAdminInfo, rhsBanInfo) = rhs { + case let .member(lhsId, lhsInvitedAt, lhsAdminInfo, lhsBanInfo, lhsRank): + if case let .member(rhsId, rhsInvitedAt, rhsAdminInfo, rhsBanInfo, rhsRank) = rhs { if lhsId != rhsId { return false } @@ -103,12 +112,15 @@ public enum ChannelParticipant: PostboxCoding, Equatable { if lhsBanInfo != rhsBanInfo { return false } + if lhsRank != rhsRank { + return false + } return true } else { return false } - case let .creator(id): - if case .creator(id) = rhs { + case let .creator(id, rank): + if case .creator(id, rank) = rhs { return true } else { return false @@ -119,17 +131,17 @@ public enum ChannelParticipant: PostboxCoding, Equatable { public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("r", orElse: 0) { case ChannelParticipantValue.member.rawValue: - self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0), adminInfo: decoder.decodeObjectForKey("ai", decoder: { ChannelParticipantAdminInfo(decoder: $0) }) as? ChannelParticipantAdminInfo, banInfo: decoder.decodeObjectForKey("bi", decoder: { ChannelParticipantBannedInfo(decoder: $0) }) as? ChannelParticipantBannedInfo) + self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0), adminInfo: decoder.decodeObjectForKey("ai", decoder: { ChannelParticipantAdminInfo(decoder: $0) }) as? ChannelParticipantAdminInfo, banInfo: decoder.decodeObjectForKey("bi", decoder: { ChannelParticipantBannedInfo(decoder: $0) }) as? ChannelParticipantBannedInfo, rank: decoder.decodeOptionalStringForKey("rank")) case ChannelParticipantValue.creator.rawValue: - self = .creator(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0))) + self = .creator(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), rank: decoder.decodeOptionalStringForKey("rank")) default: - self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0), adminInfo: nil, banInfo: nil) + self = .member(id: PeerId(decoder.decodeInt64ForKey("i", orElse: 0)), invitedAt: decoder.decodeInt32ForKey("t", orElse: 0), adminInfo: nil, banInfo: nil, rank: nil) } } public func encode(_ encoder: PostboxEncoder) { switch self { - case let .member(id, invitedAt, adminInfo, banInfo): + case let .member(id, invitedAt, adminInfo, banInfo, rank): encoder.encodeInt32(ChannelParticipantValue.member.rawValue, forKey: "r") encoder.encodeInt64(id.toInt64(), forKey: "i") encoder.encodeInt32(invitedAt, forKey: "t") @@ -143,9 +155,19 @@ public enum ChannelParticipant: PostboxCoding, Equatable { } else { encoder.encodeNil(forKey: "bi") } - case let .creator(id): + if let rank = rank { + encoder.encodeString(rank, forKey: "rank") + } else { + encoder.encodeNil(forKey: "rank") + } + case let .creator(id, rank): encoder.encodeInt32(ChannelParticipantValue.creator.rawValue, forKey: "r") encoder.encodeInt64(id.toInt64(), forKey: "i") + if let rank = rank { + encoder.encodeString(rank, forKey: "rank") + } else { + encoder.encodeNil(forKey: "rank") + } } } } @@ -175,17 +197,17 @@ extension ChannelParticipant { init(apiParticipant: Api.ChannelParticipant) { switch apiParticipant { case let .channelParticipant(userId, date): - self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: nil) - case let .channelParticipantCreator(userId): - self = .creator(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId)) + self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: nil, rank: nil) + case let .channelParticipantCreator(_, userId, rank): + self = .creator(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), rank: rank) case let .channelParticipantBanned(flags, userId, restrictedBy, date, bannedRights): let hasLeft = (flags & (1 << 0)) != 0 let banInfo = ChannelParticipantBannedInfo(rights: TelegramChatBannedRights(apiBannedRights: bannedRights), restrictedBy: PeerId(namespace: Namespaces.Peer.CloudUser, id: restrictedBy), timestamp: date, isMember: !hasLeft) - self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: banInfo) - case let .channelParticipantAdmin(flags, userId, _, promotedBy, date, adminRights): - self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(apiAdminRights: adminRights), promotedBy: PeerId(namespace: Namespaces.Peer.CloudUser, id: promotedBy), canBeEditedByAccountPeer: (flags & (1 << 0)) != 0), banInfo: nil) + self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: banInfo, rank: nil) + case let .channelParticipantAdmin(flags, userId, _, promotedBy, date, adminRights, rank: rank): + self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(apiAdminRights: adminRights), promotedBy: PeerId(namespace: Namespaces.Peer.CloudUser, id: promotedBy), canBeEditedByAccountPeer: (flags & (1 << 0)) != 0), banInfo: nil, rank: rank) case let .channelParticipantSelf(userId, _, date): - self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: nil) + self = .member(id: PeerId(namespace: Namespaces.Peer.CloudUser, id: userId), invitedAt: date, adminInfo: nil, banInfo: nil, rank: nil) } } } diff --git a/submodules/TelegramCore/TelegramCore/CancelAccountReset.swift b/submodules/TelegramCore/TelegramCore/CancelAccountReset.swift index b467f434e1..4f1f717116 100644 --- a/submodules/TelegramCore/TelegramCore/CancelAccountReset.swift +++ b/submodules/TelegramCore/TelegramCore/CancelAccountReset.swift @@ -38,7 +38,7 @@ public func requestCancelAccountResetData(network: Network, hash: String) -> Sig } |> map { sentCode -> CancelAccountResetData in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, _): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): var parsedNextType: AuthorizationCodeNextType? if let nextType = nextType { parsedNextType = AuthorizationCodeNextType(apiType: nextType) @@ -59,7 +59,7 @@ public func requestNextCancelAccountResetOption(network: Network, phoneNumber: S } |> map { sentCode -> CancelAccountResetData in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, _): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): var parsedNextType: AuthorizationCodeNextType? if let nextType = nextType { parsedNextType = AuthorizationCodeNextType(apiType: nextType) diff --git a/submodules/TelegramCore/TelegramCore/ChangeAccountPhoneNumber.swift b/submodules/TelegramCore/TelegramCore/ChangeAccountPhoneNumber.swift index 87ae6c73e1..46fca165d0 100644 --- a/submodules/TelegramCore/TelegramCore/ChangeAccountPhoneNumber.swift +++ b/submodules/TelegramCore/TelegramCore/ChangeAccountPhoneNumber.swift @@ -60,7 +60,7 @@ public func requestChangeAccountPhoneNumberVerification(account: Account, phoneN } |> map { sentCode -> ChangeAccountPhoneNumberData in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, _): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): var parsedNextType: AuthorizationCodeNextType? if let nextType = nextType { parsedNextType = AuthorizationCodeNextType(apiType: nextType) @@ -85,7 +85,7 @@ public func requestNextChangeAccountPhoneNumberVerification(account: Account, ph } |> map { sentCode -> ChangeAccountPhoneNumberData in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, _): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): var parsedNextType: AuthorizationCodeNextType? if let nextType = nextType { parsedNextType = AuthorizationCodeNextType(apiType: nextType) diff --git a/submodules/TelegramCore/TelegramCore/ChannelAdmins.swift b/submodules/TelegramCore/TelegramCore/ChannelAdmins.swift index 016ad4d7ca..db7ce8ed64 100644 --- a/submodules/TelegramCore/TelegramCore/ChannelAdmins.swift +++ b/submodules/TelegramCore/TelegramCore/ChannelAdmins.swift @@ -72,9 +72,9 @@ public func channelAdminIds(postbox: Postbox, network: Network, peerId: PeerId, let users = users.filter({ user in return participants.contains(where: { participant in switch participant { - case let .channelParticipantAdmin(_, userId, _, _, _, _): + case let .channelParticipantAdmin(_, userId, _, _, _, _, _): return user.peerId.id == userId - case let .channelParticipantCreator(userId): + case let .channelParticipantCreator(_, userId, _): return user.peerId.id == userId default: return false diff --git a/submodules/TelegramCore/TelegramCore/ChannelBlacklist.swift b/submodules/TelegramCore/TelegramCore/ChannelBlacklist.swift index 9a7ec28554..d050e0374c 100644 --- a/submodules/TelegramCore/TelegramCore/ChannelBlacklist.swift +++ b/submodules/TelegramCore/TelegramCore/ChannelBlacklist.swift @@ -101,7 +101,7 @@ public struct ChannelBlacklist { var updatedRestricted = updated.restricted var updatedBanned = updated.banned - if case .member(_, _, _, let maybeBanInfo) = participant.participant, let banInfo = maybeBanInfo { + if case let .member(_, _, _, maybeBanInfo, _) = participant.participant, let banInfo = maybeBanInfo { if banInfo.rights.flags.contains(.banReadMessages) { updatedBanned.insert(participant, at: 0) } else { @@ -144,14 +144,14 @@ public func updateChannelMemberBannedRights(account: Account, peerId: PeerId, me return account.postbox.transaction { transaction -> Signal<(ChannelParticipant?, RenderedChannelParticipant?, Bool), NoError> in if let peer = transaction.getPeer(peerId), let inputChannel = apiInputChannel(peer), let _ = transaction.getPeer(account.peerId), let memberPeer = transaction.getPeer(memberId), let inputUser = apiInputUser(memberPeer) { let updatedParticipant: ChannelParticipant - if let currentParticipant = currentParticipant, case let .member(_, invitedAt, _, currentBanInfo) = currentParticipant { + if let currentParticipant = currentParticipant, case let .member(_, invitedAt, _, currentBanInfo, _) = currentParticipant { let banInfo: ChannelParticipantBannedInfo? if let rights = rights, !rights.flags.isEmpty { banInfo = ChannelParticipantBannedInfo(rights: rights, restrictedBy: currentBanInfo?.restrictedBy ?? account.peerId, timestamp: currentBanInfo?.timestamp ?? Int32(Date().timeIntervalSince1970), isMember: currentBanInfo?.isMember ?? true) } else { banInfo = nil } - updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: invitedAt, adminInfo: nil, banInfo: banInfo) + updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: invitedAt, adminInfo: nil, banInfo: banInfo, rank: nil) } else { let banInfo: ChannelParticipantBannedInfo? if let rights = rights, !rights.flags.isEmpty { @@ -159,7 +159,7 @@ public func updateChannelMemberBannedRights(account: Account, peerId: PeerId, me } else { banInfo = nil } - updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: nil, banInfo: banInfo) + updatedParticipant = ChannelParticipant.member(id: memberId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: nil, banInfo: banInfo, rank: nil) } return account.network.request(Api.functions.channels.editBanned(channel: inputChannel, userId: inputUser, bannedRights: rights?.apiBannedRights ?? Api.ChatBannedRights.chatBannedRights(flags: 0, untilDate: 0))) @@ -175,7 +175,7 @@ public func updateChannelMemberBannedRights(account: Account, peerId: PeerId, me switch currentParticipant { case .creator: break - case let .member(_, _, adminInfo, banInfo): + case let .member(_, _, adminInfo, banInfo, _): if let _ = adminInfo { wasAdmin = true } @@ -243,7 +243,7 @@ public func updateChannelMemberBannedRights(account: Account, peerId: PeerId, me if let presence = transaction.getPeerPresence(peerId: memberPeer.id) { presences[memberPeer.id] = presence } - if case let .member(_, _, _, maybeBanInfo) = updatedParticipant, let banInfo = maybeBanInfo { + if case let .member(_, _, _, maybeBanInfo, _) = updatedParticipant, let banInfo = maybeBanInfo { if let peer = transaction.getPeer(banInfo.restrictedBy) { peers[peer.id] = peer } diff --git a/submodules/TelegramCore/TelegramCore/ChannelOwnershipTransfer.swift b/submodules/TelegramCore/TelegramCore/ChannelOwnershipTransfer.swift index f942cf3d56..24a07b3992 100644 --- a/submodules/TelegramCore/TelegramCore/ChannelOwnershipTransfer.swift +++ b/submodules/TelegramCore/TelegramCore/ChannelOwnershipTransfer.swift @@ -96,9 +96,9 @@ public func updateChannelOwnership(account: Account, accountStateManager: Accoun } else { flags = TelegramChatAdminRightsFlags.groupSpecific } - - let updatedParticipant = ChannelParticipant.creator(id: user.id) - let updatedPreviousCreator = ChannelParticipant.member(id: accountUser.id, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: flags), promotedBy: accountUser.id, canBeEditedByAccountPeer: false), banInfo: nil) + + let updatedParticipant = ChannelParticipant.creator(id: user.id, rank: currentParticipant?.rank) + let updatedPreviousCreator = ChannelParticipant.member(id: accountUser.id, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: flags), promotedBy: accountUser.id, canBeEditedByAccountPeer: false), banInfo: nil, rank: currentCreator?.rank) let checkPassword = twoStepAuthData(account.network) |> mapError { error -> ChannelOwnershipTransferError in @@ -164,7 +164,7 @@ public func updateChannelOwnership(account: Account, accountStateManager: Accoun switch currentParticipant { case .creator: wasAdmin = true - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo, !adminInfo.rights.isEmpty { wasAdmin = true } diff --git a/submodules/TelegramCore/TelegramCore/JoinChannel.swift b/submodules/TelegramCore/TelegramCore/JoinChannel.swift index 04d010de19..a1117e818d 100644 --- a/submodules/TelegramCore/TelegramCore/JoinChannel.swift +++ b/submodules/TelegramCore/TelegramCore/JoinChannel.swift @@ -55,7 +55,7 @@ public func joinChannel(account: Account, peerId: PeerId) -> Signal switchToLatest } -public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: PeerId, rights: TelegramChatAdminRights) -> Signal<(ChannelParticipant?, RenderedChannelParticipant), UpdateChannelAdminRightsError> { +public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: PeerId, rights: TelegramChatAdminRights, rank: String?) -> Signal<(ChannelParticipant?, RenderedChannelParticipant), UpdateChannelAdminRightsError> { return fetchChannelParticipant(account: account, peerId: peerId, participantId: adminId) |> mapError { error -> UpdateChannelAdminRightsError in return .generic @@ -207,14 +207,14 @@ public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: if let peer = transaction.getPeer(peerId), let adminPeer = transaction.getPeer(adminId), let inputUser = apiInputUser(adminPeer) { if let channel = peer as? TelegramChannel, let inputChannel = apiInputChannel(channel) { let updatedParticipant: ChannelParticipant - if let currentParticipant = currentParticipant, case let .member(_, invitedAt, currentAdminInfo, _) = currentParticipant { + if let currentParticipant = currentParticipant, case let .member(_, invitedAt, currentAdminInfo, _, _) = currentParticipant { let adminInfo: ChannelParticipantAdminInfo? if !rights.flags.isEmpty { adminInfo = ChannelParticipantAdminInfo(rights: rights, promotedBy: currentAdminInfo?.promotedBy ?? account.peerId, canBeEditedByAccountPeer: true) } else { adminInfo = nil } - updatedParticipant = ChannelParticipant.member(id: adminId, invitedAt: invitedAt, adminInfo: adminInfo, banInfo: nil) + updatedParticipant = ChannelParticipant.member(id: adminId, invitedAt: invitedAt, adminInfo: adminInfo, banInfo: nil, rank: rank) } else { let adminInfo: ChannelParticipantAdminInfo? if !rights.flags.isEmpty { @@ -222,9 +222,9 @@ public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: } else { adminInfo = nil } - updatedParticipant = ChannelParticipant.member(id: adminId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: adminInfo, banInfo: nil) + updatedParticipant = ChannelParticipant.member(id: adminId, invitedAt: Int32(Date().timeIntervalSince1970), adminInfo: adminInfo, banInfo: nil, rank: rank) } - return account.network.request(Api.functions.channels.editAdmin(channel: inputChannel, userId: inputUser, adminRights: rights.apiAdminRights)) + return account.network.request(Api.functions.channels.editAdmin(channel: inputChannel, userId: inputUser, adminRights: rights.apiAdminRights, rank: rank ?? "")) |> map { [$0] } |> `catch` { error -> Signal<[Api.Updates], UpdateChannelAdminRightsError> in if error.errorDescription == "USER_NOT_PARTICIPANT" { @@ -235,10 +235,10 @@ public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: |> mapError { error -> UpdateChannelAdminRightsError in return .addMemberError(error) } - |> then(account.network.request(Api.functions.channels.editAdmin(channel: inputChannel, userId: inputUser, adminRights: rights.apiAdminRights)) - |> mapError { error -> UpdateChannelAdminRightsError in - return .generic - } + |> then(account.network.request(Api.functions.channels.editAdmin(channel: inputChannel, userId: inputUser, adminRights: rights.apiAdminRights, rank: rank ?? "")) + |> mapError { error -> UpdateChannelAdminRightsError in + return .generic + } |> map { [$0] }) } else if error.errorDescription == "USER_PRIVACY_RESTRICTED" { return .fail(.addMemberError(.restricted)) @@ -258,7 +258,7 @@ public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: switch currentParticipant { case .creator: wasAdmin = true - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo, !adminInfo.rights.isEmpty { wasAdmin = true } @@ -281,7 +281,7 @@ public func updateChannelAdminRights(account: Account, peerId: PeerId, adminId: if let presence = transaction.getPeerPresence(peerId: adminPeer.id) { presences[adminPeer.id] = presence } - if case let .member(_, _, maybeAdminInfo, _) = updatedParticipant, let adminInfo = maybeAdminInfo { + if case let .member(_, _, maybeAdminInfo, _, _) = updatedParticipant, let adminInfo = maybeAdminInfo { if let peer = transaction.getPeer(adminInfo.promotedBy) { peers[peer.id] = peer } diff --git a/submodules/TelegramCore/TelegramCore/TelegramGroup.swift b/submodules/TelegramCore/TelegramCore/TelegramGroup.swift index 16c1899da3..49d932e60e 100644 --- a/submodules/TelegramCore/TelegramCore/TelegramGroup.swift +++ b/submodules/TelegramCore/TelegramCore/TelegramGroup.swift @@ -6,16 +6,16 @@ import Foundation #endif public enum TelegramGroupRole: Equatable, PostboxCoding { - case creator - case admin(TelegramChatAdminRights) + case creator(rank: String?) + case admin(TelegramChatAdminRights, rank: String?) case member public init(decoder: PostboxDecoder) { switch decoder.decodeInt32ForKey("_v", orElse: 0) { case 0: - self = .creator + self = .creator(rank: decoder.decodeOptionalStringForKey("rank")) case 1: - self = .admin(decoder.decodeObjectForKey("r", decoder: { TelegramChatAdminRights(decoder: $0) }) as! TelegramChatAdminRights) + self = .admin(decoder.decodeObjectForKey("r", decoder: { TelegramChatAdminRights(decoder: $0) }) as! TelegramChatAdminRights, rank: decoder.decodeOptionalStringForKey("rank")) case 2: self = .member default: @@ -26,11 +26,21 @@ public enum TelegramGroupRole: Equatable, PostboxCoding { public func encode(_ encoder: PostboxEncoder) { switch self { - case .creator: + case let .creator(rank): encoder.encodeInt32(0, forKey: "_v") - case let .admin(rights): + if let rank = rank { + encoder.encodeString(rank, forKey: "rank") + } else { + encoder.encodeNil(forKey: "rank") + } + case let .admin(rights, rank): encoder.encodeInt32(1, forKey: "_v") encoder.encodeObject(rights, forKey: "r") + if let rank = rank { + encoder.encodeString(rank, forKey: "rank") + } else { + encoder.encodeNil(forKey: "rank") + } case .member: encoder.encodeInt32(2, forKey: "_v") } @@ -108,7 +118,7 @@ public final class TelegramGroup: Peer { if let role = decoder.decodeObjectForKey("rv", decoder: { TelegramGroupRole(decoder: $0) }) as? TelegramGroupRole { self.role = role } else if let roleValue = decoder.decodeOptionalInt32ForKey("r"), roleValue == 0 { - self.role = .creator + self.role = .creator(rank: nil) } else { self.role = .member } diff --git a/submodules/TelegramCore/TelegramCore/VerifySecureIdValue.swift b/submodules/TelegramCore/TelegramCore/VerifySecureIdValue.swift index f7d9a98ddb..79cb21e5a6 100644 --- a/submodules/TelegramCore/TelegramCore/VerifySecureIdValue.swift +++ b/submodules/TelegramCore/TelegramCore/VerifySecureIdValue.swift @@ -38,7 +38,7 @@ public func secureIdPreparePhoneVerification(network: Network, value: SecureIdPh } |> map { sentCode -> SecureIdPreparePhoneVerificationPayload in switch sentCode { - case let .sentCode(_, type, phoneCodeHash, nextType, timeout, _): + case let .sentCode(_, type, phoneCodeHash, nextType, timeout): return SecureIdPreparePhoneVerificationPayload(type: SentAuthorizationCodeType(apiType: type), nextType: nextType.flatMap(AuthorizationCodeNextType.init), timeout: timeout, phone: value.phone, phoneCodeHash: phoneCodeHash) } } diff --git a/submodules/TelegramPresentationData/Sources/PresentationData.swift b/submodules/TelegramPresentationData/Sources/PresentationData.swift index efca79ad2e..abb4963d98 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationData.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationData.swift @@ -253,7 +253,7 @@ public func currentPresentationDataAndSettings(accountManager: AccountManager) - let parameters = AutomaticThemeSwitchParameters(settings: themeSettings.automaticThemeSwitchSetting) if automaticThemeShouldSwitchNow(parameters, currentTheme: themeSettings.theme) { - effectiveTheme = .builtin(themeSettings.automaticThemeSwitchSetting.theme) + effectiveTheme = themeSettings.themeTintColors ? .builtin(.nightAccent) : .builtin(.night) } else { effectiveTheme = themeSettings.theme } @@ -525,7 +525,7 @@ public func updatedPresentationData(accountManager: AccountManager, applicationI var effectiveChatWallpaper: TelegramWallpaper = currentWallpaper if shouldSwitch { - let automaticTheme = PresentationThemeReference.builtin(themeSettings.automaticThemeSwitchSetting.theme) + let automaticTheme: PresentationThemeReference = themeSettings.themeTintColors ? .builtin(.nightAccent) : .builtin(.night) if let themeSpecificWallpaper = themeSettings.themeSpecificChatWallpapers[automaticTheme.index] { effectiveChatWallpaper = themeSpecificWallpaper } diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift index d6e9fcf4b8..0643e7ea41 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift @@ -261,7 +261,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail if let strongSelf = self { controller?.inProgress = true - strongSelf.actionDisposable.set((authorizeWithCode(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, code: code, termsOfService: termsOfService?.0) + strongSelf.actionDisposable.set((authorizeWithCode(accountManager: strongSelf.sharedContext.accountManager, account: strongSelf.account, code: code) |> deliverOnMainQueue).start(next: { result in guard let strongSelf = self else { return @@ -721,13 +721,13 @@ public final class AuthorizationSequenceController: NavigationController, MFMail } controllers.append(self.phoneEntryController(countryCode: countryCode, number: number)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .confirmationCodeEntry(number, type, _, timeout, nextType, termsOfService, syncContacts): + case let .confirmationCodeEntry(number, type, _, timeout, nextType, syncContacts): var controllers: [ViewController] = [] if !self.otherAccountPhoneNumbers.1.isEmpty { controllers.append(self.splashController()) } controllers.append(self.phoneEntryController(countryCode: defaultCountryCode(), number: "")) - controllers.append(self.codeEntryController(number: number, type: type, nextType: nextType, timeout: timeout, termsOfService: termsOfService)) + controllers.append(self.codeEntryController(number: number, type: type, nextType: nextType, timeout: timeout, termsOfService: nil)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) case let .passwordEntry(hint, _, _, suggestReset, syncContacts): var controllers: [ViewController] = [] @@ -750,7 +750,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail } controllers.append(self.awaitingAccountResetController(protectedUntil: protectedUntil, number: number)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .signUp(_, _, _, firstName, lastName, termsOfService, _): + case let .signUp(_, _, firstName, lastName, termsOfService, _): var controllers: [ViewController] = [] var displayCancel = false if !self.otherAccountPhoneNumbers.1.isEmpty { diff --git a/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift b/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift index c2063fc5e3..f11f281cae 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift @@ -368,7 +368,7 @@ private func canEditAdminRights(accountPeerId: PeerId, channelView: PeerView, in switch initialParticipant { case .creator: return false - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { return adminInfo.canBeEditedByAccountPeer || adminInfo.promotedBy == accountPeerId } else { @@ -447,7 +447,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s let currentRightsFlags: TelegramChatAdminRightsFlags if let updatedFlags = state.updatedFlags { currentRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _) = initialParticipant, let adminRights = maybeAdminRights { + } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _, _) = initialParticipant, let adminRights = maybeAdminRights { currentRightsFlags = adminRights.rights.flags } else { currentRightsFlags = accountUserRightsFlags.subtracting(.canAddAdmins) @@ -477,7 +477,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s switch initialParticipant { case .creator: break - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { if adminInfo.promotedBy == accountPeerId || adminInfo.canBeEditedByAccountPeer { canDismiss = true @@ -489,7 +489,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s entries.append(.dismiss(presentationData.theme, presentationData.strings.Channel_Moderator_AccessLevelRevoke)) } } - } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminInfo, _) = initialParticipant, let adminInfo = maybeAdminInfo { + } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminInfo, _, _) = initialParticipant, let adminInfo = maybeAdminInfo { var index = 0 for right in rightsOrder { entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, adminInfo.rights.flags, adminInfo.rights.flags.contains(right), false)) @@ -517,7 +517,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s let currentRightsFlags: TelegramChatAdminRightsFlags if let updatedFlags = state.updatedFlags { currentRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _) = initialParticipant, let adminRights = maybeAdminRights { + } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _, _) = initialParticipant, let adminRights = maybeAdminRights { currentRightsFlags = adminRights.rights.flags.subtracting(.canAddAdmins) } else { currentRightsFlags = accountUserRightsFlags.subtracting(.canAddAdmins) @@ -535,7 +535,7 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s entries.append(.addAdminsInfo(presentationData.theme, currentRightsFlags.contains(.canAddAdmins) ? presentationData.strings.Channel_EditAdmin_PermissinAddAdminOn : presentationData.strings.Channel_EditAdmin_PermissinAddAdminOff)) } - if let admin = admin as? TelegramUser, admin.botInfo == nil && !admin.isDeleted && group.role == .creator && areAllAdminRightsEnabled(currentRightsFlags, group: true) { + if let admin = admin as? TelegramUser, case .creator = group.role, admin.botInfo == nil && !admin.isDeleted && areAllAdminRightsEnabled(currentRightsFlags, group: true) { entries.append(.transfer(presentationData.theme, presentationData.strings.Group_EditAdmin_TransferOwnership)) } @@ -624,7 +624,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi dismissImpl?() })) } else { - updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: [])) |> deliverOnMainQueue).start(error: { _ in + updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: []), rank: nil) |> deliverOnMainQueue).start(error: { _ in }, completed: { updated(TelegramChatAdminRights(flags: [])) @@ -706,7 +706,7 @@ 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)) |> deliverOnMainQueue).start(error: { _ in + updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: "") |> deliverOnMainQueue).start(error: { _ in }, completed: { updated(TelegramChatAdminRights(flags: updateFlags)) @@ -744,7 +744,7 @@ 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)) |> deliverOnMainQueue).start(error: { error in + updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: "") |> deliverOnMainQueue).start(error: { error in if case let .addMemberError(error) = error, case .restricted = error, let admin = adminView.peers[adminView.peerId] { var text = presentationData.strings.Privacy_GroupsAndChannels_InviteToChannelError(admin.compactDisplayTitle, admin.compactDisplayTitle).0 if case .group = channel.info { @@ -798,7 +798,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi guard let upgradedPeerId = upgradedPeerId else { return .fail(.generic) } - return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags)) + return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: "") |> mapToSignal { _ -> Signal in return .complete() } diff --git a/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift b/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift index f64bf7025f..b833cec4e7 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift @@ -203,7 +203,7 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { case .creator: peerText = strings.Channel_Management_LabelOwner action = nil - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { if let peer = participant.peers[adminInfo.promotedBy] { if peer.id == participant.peer.id { @@ -352,14 +352,14 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, switch lhs.participant { case .creator: lhsInvitedAt = Int32.min - case let .member(_, invitedAt, _, _): + case let .member(_, invitedAt, _, _, _): lhsInvitedAt = invitedAt } let rhsInvitedAt: Int32 switch rhs.participant { case .creator: rhsInvitedAt = Int32.min - case let .member(_, invitedAt, _, _): + case let .member(_, invitedAt, _, _, _): rhsInvitedAt = invitedAt } return lhsInvitedAt < rhsInvitedAt @@ -369,7 +369,7 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, switch participant.participant { case .creator: editable = false - case let .member(id, _, adminInfo, _): + case let .member(id, _, adminInfo, _, _): if id == accountPeerId { editable = false } else if let adminInfo = adminInfo { @@ -421,14 +421,14 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, switch lhs.participant { case .creator: lhsInvitedAt = Int32.min - case let .member(_, invitedAt, _, _): + case let .member(_, invitedAt, _, _, _): lhsInvitedAt = invitedAt } let rhsInvitedAt: Int32 switch rhs.participant { case .creator: rhsInvitedAt = Int32.min - case let .member(_, invitedAt, _, _): + case let .member(_, invitedAt, _, _, _): rhsInvitedAt = invitedAt } return lhsInvitedAt < rhsInvitedAt @@ -438,11 +438,13 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, switch participant.participant { case .creator: editable = false - case let .member(id, _, adminInfo, _): + case let .member(id, _, adminInfo, _, _): if id == accountPeerId { editable = false } else if let adminInfo = adminInfo { - if peer.role == .creator || adminInfo.promotedBy == accountPeerId { + if case .creator = peer.role { + editable = true + } else if adminInfo.promotedBy == accountPeerId { editable = true } else { editable = false @@ -540,7 +542,7 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa } })) } else { - removeAdminDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: [])) + removeAdminDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: []), rank: nil) |> deliverOnMainQueue).start(completed: { updateState { return $0.withUpdatedRemovingPeerId(nil) @@ -563,7 +565,7 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa switch participant.participant { case .creator: return - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { var canUnban = false if banInfo.restrictedBy != context.account.peerId { @@ -637,12 +639,12 @@ public func channelAdminsController(context: AccountContext, peerId: PeerId, loa if let peer = peerView.peers[participant.peerId] { switch participant { case .creator: - result.append(RenderedChannelParticipant(participant: .creator(id: peer.id), peer: peer)) + result.append(RenderedChannelParticipant(participant: .creator(id: peer.id, rank: nil), peer: peer)) case .admin: var peers: [PeerId: Peer] = [:] peers[creator.id] = creator peers[peer.id] = peer - result.append(RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creator.id, canBeEditedByAccountPeer: creator.id == context.account.peerId), banInfo: nil), peer: peer, peers: peers)) + result.append(RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creator.id, canBeEditedByAccountPeer: creator.id == context.account.peerId), banInfo: nil, rank: nil), peer: peer, peers: peers)) case .member: break } diff --git a/submodules/TelegramUI/TelegramUI/ChannelBannedMemberController.swift b/submodules/TelegramUI/TelegramUI/ChannelBannedMemberController.swift index b128affe53..2a0da2efda 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelBannedMemberController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelBannedMemberController.swift @@ -278,7 +278,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation let currentRightsFlags: TelegramChatBannedRightsFlags if let updatedFlags = state.updatedFlags { currentRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentRightsFlags = banInfo.rights.flags } else { currentRightsFlags = defaultBannedRights.flags @@ -287,7 +287,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation let currentTimeout: Int32 if let updatedTimeout = state.updatedTimeout { currentTimeout = updatedTimeout - } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentTimeout = banInfo.rights.untilDate } else { currentTimeout = Int32.max @@ -324,7 +324,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation let currentRightsFlags: TelegramChatBannedRightsFlags if let updatedFlags = state.updatedFlags { currentRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentRightsFlags = banInfo.rights.flags } else { currentRightsFlags = defaultBannedRightsFlags @@ -333,7 +333,7 @@ private func channelBannedMemberControllerEntries(presentationData: Presentation let currentTimeout: Int32 if let updatedTimeout = state.updatedTimeout { currentTimeout = updatedTimeout - } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if let initialParticipant = initialParticipant, case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentTimeout = banInfo.rights.untilDate } else { currentTimeout = Int32.max @@ -552,7 +552,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI } if updateFlags == nil && updateTimeout == nil { - if case let .member(_, _, _, maybeBanInfo) = initialParticipant { + if case let .member(_, _, _, maybeBanInfo, _) = initialParticipant { if maybeBanInfo == nil { updateFlags = defaultBannedRightsFlags updateTimeout = Int32.max @@ -564,7 +564,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI let currentRightsFlags: TelegramChatBannedRightsFlags if let updatedFlags = updateFlags { currentRightsFlags = updatedFlags - } else if case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentRightsFlags = banInfo.rights.flags } else { currentRightsFlags = defaultBannedRightsFlags @@ -573,7 +573,7 @@ public func channelBannedMemberController(context: AccountContext, peerId: PeerI let currentTimeout: Int32 if let updateTimeout = updateTimeout { currentTimeout = updateTimeout - } else if case let .member(_, _, _, maybeBanInfo) = initialParticipant, let banInfo = maybeBanInfo { + } else if case let .member(_, _, _, maybeBanInfo, _) = initialParticipant, let banInfo = maybeBanInfo { currentTimeout = banInfo.rights.untilDate } else { currentTimeout = Int32.max diff --git a/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift b/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift index eb835efcdf..01b1660f7c 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelBlacklistController.swift @@ -153,7 +153,7 @@ private enum ChannelBlacklistEntry: ItemListNodeEntry { case let .peerItem(theme, strings, dateTimeFormat, nameDisplayOrder, _, participant, editing, enabled): var text: ItemListPeerItemText = .none switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo, let peer = participant.peers[banInfo.restrictedBy] { text = .text(strings.Channel_Management_RemovedBy(peer.displayTitle).0) } @@ -297,7 +297,7 @@ public func channelBlacklistController(context: AccountContext, peerId: PeerId) switch participant.participant { case .creator: return - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo, adminInfo.promotedBy != context.account.peerId { presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_Members_AddBannedErrorAdmin, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) return diff --git a/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift b/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift index caf8d372f6..c0f5393793 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift @@ -18,7 +18,7 @@ extension ChannelParticipant { switch self { case .creator: return nil - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): return adminInfo } } @@ -27,10 +27,24 @@ extension ChannelParticipant { switch self { case .creator: return nil - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): return banInfo } } + + func canBeBannedBy(peerId: PeerId) -> Bool { + switch self { + case .creator: + return false + case let .member(_, _, adminInfo, _, _): + if let adminInfo = adminInfo { + if adminInfo.promotedBy != peerId { + return false + } + } + } + return true + } } struct ChannelMemberListState { @@ -295,7 +309,7 @@ private final class ChannelMemberSingleCategoryListContext: ChannelMemberCategor switch self.category { case let .admins(query): if let updated = updated, (query == nil || updated.peer.indexName.matchesByTokens(query!)) { - if case let .member(_, _, adminInfo, _) = updated.participant, adminInfo == nil { + if case let .member(_, _, adminInfo, _, _) = updated.participant, adminInfo == nil { } else { var found = false loop: for i in 0 ..< list.count { diff --git a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchContainerNode.swift b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchContainerNode.swift index a8536d341f..94f4a13a21 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchContainerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchContainerNode.swift @@ -366,7 +366,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod if peerId.namespace == Namespaces.Peer.CloudChannel { if case .searchAdmins = mode { - return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: memberId, adminRights: TelegramChatAdminRights(flags: [])) + return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: memberId, adminRights: TelegramChatAdminRights(flags: []), rank: nil) |> `catch` { _ -> Signal in return .complete() } @@ -442,7 +442,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod case .creator: canPromote = false canRestrict = false - case let .member(_, _, adminRights, bannedRights): + case let .member(_, _, adminRights, bannedRights, _): if channel.hasPermission(.addAdmins) { canPromote = true } else { @@ -649,7 +649,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod case .creator: canPromote = false canRestrict = false - case let .member(_, _, adminRights, bannedRights): + case let .member(_, _, adminRights, bannedRights, _): if channel.hasPermission(.addAdmins) { canPromote = true } else { @@ -718,7 +718,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod switch participant.participant { case .creator: label = themeAndStrings.1.Channel_Management_LabelOwner - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { if let peer = participant.peers[adminInfo.promotedBy] { if peer.id == participant.peer.id { @@ -731,7 +731,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod } case .searchBanned: switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { var exceptionsString = "" for rights in allGroupPermissionList { @@ -749,7 +749,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod } case .searchKicked: switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo, let peer = participant.peers[banInfo.restrictedBy] { label = themeAndStrings.1.Channel_Management_RemovedBy(peer.displayTitle).0 } @@ -853,18 +853,18 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod let renderedParticipant: RenderedChannelParticipant switch participant { case .creator: - renderedParticipant = RenderedChannelParticipant(participant: .creator(id: peer.id), peer: peer) + renderedParticipant = RenderedChannelParticipant(participant: .creator(id: peer.id, rank: nil), peer: peer) case .admin: var peers: [PeerId: Peer] = [:] if let creator = creatorPeer { peers[creator.id] = creator } peers[peer.id] = peer - renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creatorPeer?.id ?? context.account.peerId, canBeEditedByAccountPeer: creatorPeer?.id == context.account.peerId), banInfo: nil), peer: peer, peers: peers) + renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creatorPeer?.id ?? context.account.peerId, canBeEditedByAccountPeer: creatorPeer?.id == context.account.peerId), banInfo: nil, rank: nil), peer: peer, peers: peers) case .member: var peers: [PeerId: Peer] = [:] peers[peer.id] = peer - renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: nil, banInfo: nil), peer: peer, peers: peers) + renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: nil, banInfo: nil, rank: nil), peer: peer, peers: peers) } matchingMembers.append(renderedParticipant) } @@ -998,7 +998,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod switch participant.participant { case .creator: label = themeAndStrings.1.Channel_Management_LabelOwner - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { if let peer = participant.peers[adminInfo.promotedBy] { if peer.id == participant.peer.id { @@ -1011,7 +1011,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod } case .searchBanned: switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo { var exceptionsString = "" for rights in allGroupPermissionList { @@ -1029,7 +1029,7 @@ final class ChannelMembersSearchContainerNode: SearchDisplayControllerContentNod } case .searchKicked: switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): if let banInfo = banInfo, let peer = participant.peers[banInfo.restrictedBy] { label = themeAndStrings.1.Channel_Management_RemovedBy(peer.displayTitle).0 } diff --git a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift index 78858a6262..def0095055 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMembersSearchControllerNode.swift @@ -204,16 +204,16 @@ class ChannelMembersSearchControllerNode: ASDisplayNode { let renderedParticipant: RenderedChannelParticipant switch participant { case .creator: - renderedParticipant = RenderedChannelParticipant(participant: .creator(id: peer.id), peer: peer) + renderedParticipant = RenderedChannelParticipant(participant: .creator(id: peer.id, rank: nil), peer: peer) case .admin: var peers: [PeerId: Peer] = [:] peers[creator.id] = creator peers[peer.id] = peer - renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creator.id, canBeEditedByAccountPeer: creator.id == context.account.peerId), banInfo: nil), peer: peer, peers: peers) + renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: creator.id, canBeEditedByAccountPeer: creator.id == context.account.peerId), banInfo: nil, rank: nil), peer: peer, peers: peers) case .member: var peers: [PeerId: Peer] = [:] peers[peer.id] = peer - renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: nil, banInfo: nil), peer: peer, peers: peers) + renderedParticipant = RenderedChannelParticipant(participant: .member(id: peer.id, invitedAt: 0, adminInfo: nil, banInfo: nil, rank: nil), peer: peer, peers: peers) } entries.append(.peer(index, renderedParticipant, ContactsPeerItemEditing(editable: false, editing: false, revealed: false), label, enabled)) diff --git a/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift b/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift index 47582a5102..6166c33690 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelPermissionsController.swift @@ -198,7 +198,7 @@ private enum ChannelPermissionsEntry: ItemListNodeEntry { case let .peerItem(theme, strings, dateTimeFormat, nameDisplayOrder, _, participant, editing, enabled, canOpen, defaultBannedRights): var text: ItemListPeerItemText = .none switch participant.participant { - case let .member(_, _, _, banInfo): + case let .member(_, _, _, banInfo, _): var exceptionsString = "" if let banInfo = banInfo { for rights in allGroupPermissionList { @@ -524,7 +524,7 @@ public func channelPermissionsController(context: AccountContext, peerId: PeerId switch participant.participant { case .creator: return - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo, adminInfo.promotedBy != context.account.peerId { presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.Channel_Members_AddBannedErrorAdmin, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), nil) return diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 5fbedb19f0..3ee9b2ea96 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -6517,19 +6517,7 @@ public final class ChatController: TelegramController, GalleryHiddenMediaTarget, self.navigationActionDisposable.set((fetchChannelParticipant(account: self.context.account, peerId: peerId, participantId: author.id) |> deliverOnMainQueue).start(next: { [weak self] participant in if let strongSelf = self { - var canBan = true - if let participant = participant { - switch participant { - case .creator: - canBan = false - case let .member(_, _, adminInfo, _): - if let adminInfo = adminInfo, !adminInfo.rights.flags.isEmpty { - if adminInfo.promotedBy != accountPeerId { - canBan = false - } - } - } - } + var canBan = participant?.canBeBannedBy(peerId: accountPeerId) ?? true let actionSheet = ActionSheetController(presentationTheme: strongSelf.presentationData.theme) var items: [ActionSheetItem] = [] diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift index 7fdb64af4e..2129e36e14 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageActionSheetControllerNode.swift @@ -163,13 +163,13 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode { self.validLayout = layout var height: CGFloat = max(14.0, layout.intrinsicInsets.bottom) + let inputHeight = layout.inputHeight ?? 0.0 var horizontalOffset: CGFloat = horizontalOrigin if !horizontalOffset.isZero { - horizontalOffset += UIScreenPixel // temporary fix for master-detail separator dimming + horizontalOffset += UIScreenPixel } - let inputHeight = layout.inputHeight ?? 0.0 transition.updateFrame(node: self.sideDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: max(0.0, horizontalOffset), height: max(0.0, layout.size.height - inputHeight)))) transition.updateFrame(node: self.sideInputDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - inputHeight), size: CGSize(width: max(0.0, horizontalOrigin), height: max(0.0, inputHeight)))) transition.updateFrame(node: self.inputDimNode, frame: CGRect(origin: CGPoint(x: horizontalOrigin, y: layout.size.height - inputHeight), size: CGSize(width: layout.size.width, height: inputHeight))) @@ -185,12 +185,12 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode { itemsHeight += actionNode.bounds.height } - let containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight), size: CGSize(width: containerWidth, height: itemsHeight)) + let containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight - inputHeight), size: CGSize(width: containerWidth, height: itemsHeight)) transition.updateFrame(node: self.itemsContainerNode, frame: containerFrame) transition.updateFrame(node: self.itemsShadowNode, frame: containerFrame.insetBy(dx: -shadowInset, dy: -shadowInset)) height += itemsHeight - + height += inputHeight height += 6.0 return height diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift index 1edb702d3c..72b5064c20 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsControllerNode.swift @@ -697,16 +697,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { } for member in adminsState.list { if member.peer.id == author.id { - switch member.participant { - case .creator: - canBan = false - case let .member(_, _, adminInfo, _): - if let adminInfo = adminInfo { - if adminInfo.promotedBy != self.context.account.peerId { - canBan = false - } - } - } + canBan = member.participant.canBeBannedBy(peerId: self.context.account.peerId) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift index f55490ae2a..4e3f0d28fa 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift @@ -513,8 +513,8 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { isBroadcast = false } - if case let .member(_, _, _, prevBanInfo) = prev.participant { - if case let .member(_, _, _, newBanInfo) = new.participant { + if case let .member(_, _, _, prevBanInfo, _) = prev.participant { + if case let .member(_, _, _, newBanInfo, _) = new.participant { let newFlags = newBanInfo?.rights.flags ?? [] var addedRights = newBanInfo?.rights.flags ?? [] @@ -653,8 +653,8 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { }, to: &text, entities: &entities) text += "\n" - if case let .member(_, _, prevAdminRights, _) = prev.participant { - if case let .member(_, _, newAdminRights, _) = new.participant { + if case let .member(_, _, prevAdminRights, _, _) = prev.participant { + if case let .member(_, _, newAdminRights, _, _) = new.participant { let prevFlags = prevAdminRights?.rights.flags ?? [] let newFlags = newAdminRights?.rights.flags ?? [] diff --git a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift index 3aca3a705c..3d79003f1f 100644 --- a/submodules/TelegramUI/TelegramUI/CreateChannelController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateChannelController.swift @@ -175,7 +175,7 @@ private func CreateChannelEntries(presentationData: PresentationData, state: Cre let groupInfoState = ItemListAvatarAndNameInfoItemState(editingName: state.editingName, updatingName: nil) - let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) + let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator(rank: nil), membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) entries.append(.channelInfo(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, peer, groupInfoState, state.avatar)) entries.append(.setProfilePhoto(presentationData.theme, presentationData.strings.Channel_UpdatePhotoItem)) diff --git a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift index 967f710c82..0076fd36cd 100644 --- a/submodules/TelegramUI/TelegramUI/CreateGroupController.swift +++ b/submodules/TelegramUI/TelegramUI/CreateGroupController.swift @@ -241,7 +241,7 @@ private func createGroupEntries(presentationData: PresentationData, state: Creat let groupInfoState = ItemListAvatarAndNameInfoItemState(editingName: state.editingName, updatingName: nil) - let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator, membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) + let peer = TelegramGroup(id: PeerId(namespace: -1, id: 0), title: state.editingName.composedTitle, photo: [], participantCount: 0, role: .creator(rank: nil), membership: .Member, flags: [], defaultBannedRights: nil, migrationReference: nil, creationDate: 0, version: 0) entries.append(.groupInfo(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, peer, groupInfoState, state.avatar)) entries.append(.setProfilePhoto(presentationData.theme, presentationData.strings.GroupInfo_SetGroupPhoto)) diff --git a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift index 0dee989c88..b2fc1efc25 100644 --- a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift @@ -91,10 +91,10 @@ private enum GroupInfoEntryTag { case location } -private enum GroupInfoMemberStatus { +private enum GroupInfoMemberStatus: Equatable { case member - case admin - case owner + case admin(String?) + case owner(String?) } private enum GroupEntryStableId: Hashable, Equatable { @@ -718,7 +718,7 @@ private func canRemoveParticipant(account: Account, channel: TelegramChannel, pa switch participant { case .creator: return false - case let .member(_, _, adminInfo, _): + case let .member(_, _, adminInfo, _, _): if channel.hasPermission(.banMembers) { if let adminInfo = adminInfo { return adminInfo.promotedBy == account.peerId @@ -1013,13 +1013,13 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa let participant: ChannelParticipant switch sortedParticipants[i] { case .creator: - participant = .creator(id: sortedParticipants[i].peerId) - memberStatus = .admin + participant = .creator(id: sortedParticipants[i].peerId, rank: nil) + memberStatus = .owner(nil) case .admin: - participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: account.peerId, canBeEditedByAccountPeer: true), banInfo: nil) - memberStatus = .admin + participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: account.peerId, canBeEditedByAccountPeer: true), banInfo: nil, rank: nil) + memberStatus = .admin(nil) case .member: - participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: nil, banInfo: nil) + participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: nil, banInfo: nil, rank: nil) memberStatus = .member } @@ -1080,7 +1080,7 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa if !state.temporaryParticipants.isEmpty { for participant in state.temporaryParticipants { if !existingParticipantIds.contains(participant.peer.id) { - updatedParticipants.append(RenderedChannelParticipant(participant: ChannelParticipant.member(id: participant.peer.id, invitedAt: participant.timestamp, adminInfo: nil, banInfo: nil), peer: participant.peer)) + updatedParticipants.append(RenderedChannelParticipant(participant: ChannelParticipant.member(id: participant.peer.id, invitedAt: participant.timestamp, adminInfo: nil, banInfo: nil, rank: nil), peer: participant.peer)) if let presence = participant.presence, peerPresences[participant.peer.id] == nil { peerPresences[participant.peer.id] = presence } @@ -1112,11 +1112,11 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa switch lhs.participant { case .creator: return false - case let .member(lhsId, lhsInvitedAt, _, _): + case let .member(lhsId, lhsInvitedAt, _, _, _): switch rhs.participant { case .creator: return true - case let .member(rhsId, rhsInvitedAt, _, _): + case let .member(rhsId, rhsInvitedAt, _, _, _): if lhsInvitedAt == rhsInvitedAt { return lhsId.id < rhsId.id } @@ -1132,11 +1132,11 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa let participant = sortedParticipants[i] let memberStatus: GroupInfoMemberStatus switch participant.participant { - case .creator: - memberStatus = .owner - case let .member(_, _, adminInfo, _): + case let .creator(_, rank): + memberStatus = .owner(rank) + case let .member(_, _, adminInfo, _, rank): if adminInfo != nil { - memberStatus = .admin + memberStatus = .admin(rank) } else { memberStatus = .member } @@ -1152,7 +1152,7 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa case .creator: canPromote = false canRestrict = false - case let .member(_, _, adminRights, bannedRights): + case let .member(_, _, adminRights, bannedRights, _): if channel.hasPermission(.addAdmins) { canPromote = true } else { diff --git a/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift b/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift index 8f0db26e94..f3a53cbcb9 100644 --- a/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift +++ b/submodules/TelegramUI/TelegramUI/LogoutOptionsController.swift @@ -151,7 +151,7 @@ func logoutOptionsController(context: AccountContext, navigationController: Navi supportPeer.set(supportPeerId(account: context.account)) let presentationData = context.sharedContext.currentPresentationData.with { $0 } - var faqUrl = context.sharedContext.currentPresentationData.with { $0 }.strings.Settings_FAQ_URL + var faqUrl = presentationData.strings.Settings_FAQ_URL if faqUrl == "Settings.FAQ_URL" || faqUrl.isEmpty { faqUrl = "https://telegram.org/faq#general" } diff --git a/submodules/TelegramUI/TelegramUI/PeerChannelMemberCategoriesContextsManager.swift b/submodules/TelegramUI/TelegramUI/PeerChannelMemberCategoriesContextsManager.swift index 0e02c1f831..6b25b53bda 100644 --- a/submodules/TelegramUI/TelegramUI/PeerChannelMemberCategoriesContextsManager.swift +++ b/submodules/TelegramUI/TelegramUI/PeerChannelMemberCategoriesContextsManager.swift @@ -163,7 +163,7 @@ final class PeerChannelMemberCategoriesContextsManager { self.impl.with { impl in for (contextPeerId, context) in impl.contexts { if contextPeerId == peerId { - context.replayUpdates([(.member(id: memberId, invitedAt: 0, adminInfo: nil, banInfo: nil), nil, nil)]) + context.replayUpdates([(.member(id: memberId, invitedAt: 0, adminInfo: nil, banInfo: nil, rank: nil), nil, nil)]) } } } @@ -224,8 +224,8 @@ final class PeerChannelMemberCategoriesContextsManager { } } - func updateMemberAdminRights(account: Account, peerId: PeerId, memberId: PeerId, adminRights: TelegramChatAdminRights) -> Signal { - return updateChannelAdminRights(account: account, peerId: peerId, adminId: memberId, rights: adminRights) + func updateMemberAdminRights(account: Account, peerId: PeerId, memberId: PeerId, adminRights: TelegramChatAdminRights, rank: String?) -> Signal { + return updateChannelAdminRights(account: account, peerId: peerId, adminId: memberId, rights: adminRights, rank: rank) |> map(Optional.init) |> deliverOnMainQueue |> beforeNext { [weak self] result in diff --git a/submodules/TelegramUI/TelegramUI/ThemeAutoNightSettingsController.swift b/submodules/TelegramUI/TelegramUI/ThemeAutoNightSettingsController.swift index b6b753817f..a4f3740141 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeAutoNightSettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeAutoNightSettingsController.swift @@ -288,21 +288,12 @@ private func themeAutoNightSettingsControllerEntries(theme: PresentationTheme, s entries.append(.settingInfo(theme, strings.AutoNightTheme_AutomaticHelp("\(Int(threshold * 100.0))").0.replacingOccurrences(of: "%%", with: "%"))) } - switch switchSetting.trigger { - case .none: - break - case .timeBased, .brightness: - entries.append(.themeHeader(theme, strings.AutoNightTheme_PreferredTheme)) - entries.append(.themeNightBlue(theme, strings.Appearance_ThemeNightBlue, switchSetting.theme == .nightAccent)) - entries.append(.themeNight(theme, strings.Appearance_ThemeNight, switchSetting.theme == .night)) - } - return entries } private func roundTimeToDay(_ timestamp: Int32) -> Int32 { let calendar = Calendar.current - let offset = 0//TimeZone.current.secondsFromGMT(for: Date()) + let offset = 0 let components = calendar.dateComponents([.hour, .minute, .second], from: Date(timeIntervalSince1970: Double(timestamp + Int32(offset)))) return Int32(components.hour! * 60 * 60 + components.minute! * 60 + components.second!) } diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift index 5588149356..7cb291d85a 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsColorSliderNode.swift @@ -4,6 +4,7 @@ import AsyncDisplayKit import SwiftSignalKit import Display import TelegramPresentationData +import TelegramUIPreferences private let shadowImage: UIImage = { return generateImage(CGSize(width: 54.0, height: 54.0), opaque: false, scale: nil, rotatedContext: { size, context in @@ -17,23 +18,25 @@ private let shadowImage: UIImage = { })! }() -private final class HSVParameter: NSObject { - let hue: CGFloat - let saturation: CGFloat +private final class ColorsParameter: NSObject { + let leftColor: UIColor + let baseColor: UIColor + let rightColor: UIColor let value: CGFloat - init(hue: CGFloat, saturation: CGFloat, value: CGFloat) { - self.hue = hue - self.saturation = saturation + init(leftColor: UIColor, baseColor: UIColor, rightColor: UIColor, value: CGFloat) { + self.leftColor = leftColor + self.baseColor = baseColor + self.rightColor = rightColor self.value = value super.init() } } private final class ThemeSettingsColorKnobNode: ASDisplayNode { - var hsv: (CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 1.0) { + var values: (UIColor, UIColor, UIColor, CGFloat) = (.clear, .clear, .clear, 0.5) { didSet { - if self.hsv != oldValue { + if self.values != oldValue { self.setNeedsDisplay() } } @@ -48,11 +51,11 @@ private final class ThemeSettingsColorKnobNode: ASDisplayNode { } override func drawParameters(forAsyncLayer layer: _ASDisplayLayer) -> NSObjectProtocol? { - return HSVParameter(hue: self.hsv.0, saturation: self.hsv.1, value: self.hsv.2) + return ColorsParameter(leftColor: self.values.0, baseColor: self.values.1, rightColor: self.values.2, value: self.values.3) } @objc override class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) { - guard let parameters = parameters as? HSVParameter else { + guard let parameters = parameters as? ColorsParameter else { return } let context = UIGraphicsGetCurrentContext()! @@ -69,7 +72,15 @@ private final class ThemeSettingsColorKnobNode: ASDisplayNode { context.setFillColor(UIColor.white.cgColor) context.fillEllipse(in: bounds.insetBy(dx: 3.0, dy: 3.0)) - let color = UIColor(hue: parameters.hue, saturation: parameters.saturation, brightness: parameters.value, alpha: 1.0) + let color: UIColor + if parameters.value < 0.5 { + color = parameters.baseColor.interpolateTo(parameters.leftColor, fraction: 0.5 - parameters.value)! + } else if parameters.value > 0.5 { + color = parameters.baseColor.interpolateTo(parameters.rightColor, fraction: parameters.value - 0.5)! + } else { + color = parameters.baseColor + } + context.setFillColor(color.cgColor) let borderWidth: CGFloat = bounds.width > 30.0 ? 5.0 : 5.0 @@ -78,7 +89,7 @@ private final class ThemeSettingsColorKnobNode: ASDisplayNode { } private final class ThemeSettingsColorBrightnessNode: ASDisplayNode { - var hsv: (CGFloat, CGFloat, CGFloat) = (0.0, 1.0, 1.0) { + var values: (UIColor, UIColor, UIColor, CGFloat) = (.clear, .clear, .clear, 0.5) { didSet { self.setNeedsDisplay() } @@ -92,11 +103,11 @@ private final class ThemeSettingsColorBrightnessNode: ASDisplayNode { } override func drawParameters(forAsyncLayer layer: _ASDisplayLayer) -> NSObjectProtocol? { - return HSVParameter(hue: self.hsv.0, saturation: self.hsv.1, value: self.hsv.2) + return ColorsParameter(leftColor: self.values.0, baseColor: self.values.1, rightColor: self.values.2, value: self.values.3) } @objc override class func draw(_ bounds: CGRect, withParameters parameters: Any?, isCancelled: () -> Bool, isRasterizing: Bool) { - guard let parameters = parameters as? HSVParameter else { + guard let parameters = parameters as? ColorsParameter else { return } let context = UIGraphicsGetCurrentContext()! @@ -108,11 +119,8 @@ private final class ThemeSettingsColorBrightnessNode: ASDisplayNode { context.addPath(innerPath.cgPath) context.clip() - let leftColor = UIColor(hue: parameters.hue, saturation: parameters.saturation, brightness: parameters.value - 0.4, alpha: 1.0) - let rightColor = UIColor(hue: parameters.hue, saturation: parameters.saturation, brightness: parameters.value + 0.4, alpha: 1.0) - - let colors = [leftColor.cgColor, rightColor.cgColor] - var locations: [CGFloat] = [0.0, 1.0] + let colors = [parameters.leftColor.cgColor, parameters.baseColor.cgColor, parameters.rightColor.cgColor] + var locations: [CGFloat] = [0.0, 0.5, 1.0] let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: &locations)! context.drawLinearGradient(gradient, start: CGPoint(), end: CGPoint(x: bounds.width, y: 0.0), options: CGGradientDrawingOptions()) } @@ -126,18 +134,10 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { var valueChanged: ((CGFloat) -> Void)? - var baseColor: UIColor = .white { + var baseColor: PresentationThemeBaseColor = .white { didSet { - var hue: CGFloat = 0.0 - var saturation: CGFloat = 0.0 - var value: CGFloat = 0.0 - - var newHSV: (CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0) - if self.baseColor.getHue(&hue, saturation: &saturation, brightness: &value, alpha: nil) { - newHSV = (hue, saturation, value) - } - - self.brightnessNode.hsv = newHSV + let colors = self.baseColor.edgeColors + self.brightnessNode.values = (colors.0, self.baseColor.color, colors.1, 0.5) self.update() } } @@ -179,17 +179,8 @@ final class ThemeSettingsColorSliderNode: ASDisplayNode { } private func update() { - var hue: CGFloat = 0.0 - var saturation: CGFloat = 0.0 - var value: CGFloat = 0.0 - - let delta = (-0.5 + self.value) * 0.8 - - var newHSV: (CGFloat, CGFloat, CGFloat) = (0.0, 0.0, 0.0) - if self.baseColor.getHue(&hue, saturation: &saturation, brightness: &value, alpha: nil) { - newHSV = (hue, saturation, value + delta) - } - self.brightnessKnobNode.hsv = newHSV + let colors = self.baseColor.edgeColors + self.brightnessKnobNode.values = (colors.0, self.baseColor.color, colors.1, self.value) } func updateKnobLayout(size: CGSize, transition: ContainedViewLayoutTransition) { diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift index 3bb9970dfe..f98be2fb4e 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsController.swift @@ -307,16 +307,23 @@ private struct ThemeSettingsState: Equatable { } } -private func themeSettingsControllerEntries(presentationData: PresentationData, theme: PresentationTheme, themeReference: PresentationThemeReference, themeSpecificAccentColors: [Int64: PresentationThemeAccentColor], autoNightSettings: AutomaticThemeSwitchSetting, strings: PresentationStrings, wallpaper: TelegramWallpaper, fontSize: PresentationFontSize, dateTimeFormat: PresentationDateTimeFormat, largeEmoji: Bool, disableAnimations: Bool, availableAppIcons: [PresentationAppIcon], currentAppIconName: String?, displayColorSlider: Bool) -> [ThemeSettingsControllerEntry] { +private func themeSettingsControllerEntries(presentationData: PresentationData, theme: PresentationTheme, themeReference: PresentationThemeReference, themeSpecificAccentColors: [Int64: PresentationThemeAccentColor], autoNightSettings: AutomaticThemeSwitchSetting, strings: PresentationStrings, wallpaper: TelegramWallpaper, fontSize: PresentationFontSize, dateTimeFormat: PresentationDateTimeFormat, largeEmoji: Bool, disableAnimations: Bool, availableAppIcons: [PresentationAppIcon], currentAppIconName: String?, displayColorSlider: Bool, tintAllColors: Bool) -> [ThemeSettingsControllerEntry] { var entries: [ThemeSettingsControllerEntry] = [] entries.append(.themeListHeader(presentationData.theme, strings.Appearance_ColorTheme.uppercased())) entries.append(.chatPreview(presentationData.theme, theme, wallpaper, fontSize, presentationData.strings, dateTimeFormat, presentationData.nameDisplayOrder)) - if case .builtin = themeReference { - entries.append(.themeItem(presentationData.theme, presentationData.strings, [.builtin(.dayClassic), .builtin(.day), .builtin(.nightAccent), .builtin(.night)], themeReference, themeSpecificAccentColors, themeSpecificAccentColors[themeReference.index], displayColorSlider)) + + var availableThemes: [PresentationThemeReference] = [.builtin(.dayClassic), .builtin(.day)] + if tintAllColors { + availableThemes.append(.builtin(.nightAccent)) + } else { + availableThemes.append(.builtin(.night)) } + + entries.append(.themeItem(presentationData.theme, presentationData.strings, availableThemes, themeReference, themeSpecificAccentColors, themeSpecificAccentColors[themeReference.index], displayColorSlider)) + if theme.name == .builtin(.nightAccent) || theme.name == .builtin(.night) { - entries.append(.themeTint(presentationData.theme, strings.Appearance_TintAllColors, false)) + entries.append(.themeTint(presentationData.theme, strings.Appearance_TintAllColors, tintAllColors)) } if theme.name != .builtin(.dayClassic) { entries.append(.accentColor(presentationData.theme, strings.Appearance_AccentColor, themeSpecificAccentColors[themeReference.index])) @@ -392,7 +399,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The chatWallpaper = themeSpecificWallpaper } else { let accentColor = current.themeSpecificAccentColors[theme.index]?.color ?? defaultDayAccentColor - let theme = makePresentationTheme(themeReference: current.theme, accentColor: accentColor, serviceBackgroundColor: defaultServiceBackgroundColor) + let theme = makePresentationTheme(themeReference: theme, accentColor: accentColor, serviceBackgroundColor: defaultServiceBackgroundColor) chatWallpaper = theme.chat.defaultWallpaper } @@ -464,9 +471,14 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The } else { wallpaper = settings.chatWallpaper } + + var tintAllColors = settings.themeTintColors + if !tintAllColors, case let .builtin(theme) = settings.theme, case .nightAccent = theme { + tintAllColors = true + } let controllerState = ItemListControllerState(theme: presentationData.theme, title: .text(presentationData.strings.Appearance_Title), leftNavigationButton: nil, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) - let listState = ItemListNodeState(entries: themeSettingsControllerEntries(presentationData: presentationData, theme: theme, themeReference: settings.theme, themeSpecificAccentColors: settings.themeSpecificAccentColors, autoNightSettings: settings.automaticThemeSwitchSetting, strings: presentationData.strings, wallpaper: wallpaper, fontSize: fontSize, dateTimeFormat: dateTimeFormat, largeEmoji: largeEmoji, disableAnimations: disableAnimations, availableAppIcons: availableAppIcons, currentAppIconName: currentAppIconName, displayColorSlider: state.displayColorSlider), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: false) + let listState = ItemListNodeState(entries: themeSettingsControllerEntries(presentationData: presentationData, theme: theme, themeReference: settings.theme, themeSpecificAccentColors: settings.themeSpecificAccentColors, autoNightSettings: settings.automaticThemeSwitchSetting, strings: presentationData.strings, wallpaper: wallpaper, fontSize: fontSize, dateTimeFormat: dateTimeFormat, largeEmoji: largeEmoji, disableAnimations: disableAnimations, availableAppIcons: availableAppIcons, currentAppIconName: currentAppIconName, displayColorSlider: state.displayColorSlider, tintAllColors: tintAllColors), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: false) return (controllerState, (listState, arguments)) } diff --git a/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift b/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift index 8e692ee042..d080c1d16e 100644 --- a/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift +++ b/submodules/TelegramUI/TelegramUI/ThemeSettingsThemeItem.swift @@ -46,13 +46,11 @@ private func generateThemeIconImage(theme: PresentationThemeReference, accentCol let background: UIColor let incomingFill: UIColor - var incomingStrokeColor: UIColor? let outgoingFill: UIColor switch theme { case .dayClassic: background = UIColor(rgb: 0xd6e2ee) incomingFill = UIColor(rgb: 0xffffff) - incomingStrokeColor = UIColor(rgb: 0xc9d6e2) outgoingFill = UIColor(rgb: 0xe1ffc7) case .day: background = .white @@ -403,8 +401,8 @@ class ThemeSettingsThemeItemNode: ListViewItemNode, ItemListItemNode { } let previousBaseColor = strongSelf.colorSlider.baseColor - let newBaseColor = item.currentColor?.baseColor.color - strongSelf.colorSlider.baseColor = newBaseColor ?? .black + let newBaseColor = item.currentColor?.baseColor ?? .blue + strongSelf.colorSlider.baseColor = newBaseColor if previousBaseColor != newBaseColor { strongSelf.colorSlider.value = item.currentColor?.value ?? 0.5 } diff --git a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift index 7b90851be5..1bfc720441 100644 --- a/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift +++ b/submodules/TelegramUIPreferences/Sources/PresentationThemeSettings.swift @@ -206,6 +206,35 @@ public enum PresentationThemeBaseColor: Int32, CaseIterable { } return UIColor(rgb: value) } + + public var edgeColors: (UIColor, UIColor) { + let values: (UIColor, UIColor) + switch self { + case .blue: + values = (UIColor(rgb: 0x003d80), UIColor(rgb: 0x66afff)) + case .cyan: + values = (UIColor(rgb: 0x00c2ed), UIColor(rgb: 0x00c2ed)) + case .green: + values = (UIColor(rgb: 0x29b327), UIColor(rgb: 0x29b327)) + case .pink: + values = (UIColor(rgb: 0xeb6ca4), UIColor(rgb: 0xeb6ca4)) + case .orange: + values = (UIColor(rgb: 0xf08200), UIColor(rgb: 0xf08200)) + case .purple: + values = (UIColor(rgb: 0x9472ee), UIColor(rgb: 0x9472ee)) + case .red: + values = (UIColor(rgb: 0xd33213), UIColor(rgb: 0xd33213)) + case .yellow: + values = (UIColor(rgb: 0xedb400), UIColor(rgb: 0xedb400)) + case .gray: + values = (UIColor(rgb: 0x6d839e), UIColor(rgb: 0x6d839e)) + case .black: + values = (UIColor(rgb: 0x000000), UIColor(rgb: 0x000000)) + case .white: + values = (UIColor(rgb: 0xffffff), UIColor(rgb: 0xffffff)) + } + return values + } } public struct PresentationThemeAccentColor: PostboxCoding, Equatable { @@ -228,17 +257,15 @@ public struct PresentationThemeAccentColor: PostboxCoding, Equatable { } public var color: UIColor { - var hue: CGFloat = 0.0 - var saturation: CGFloat = 0.0 - var value: CGFloat = 0.0 - - let color = self.baseColor.color - let delta = (-0.5 + self.value) * 0.8 - if color.getHue(&hue, saturation: &saturation, brightness: &value, alpha: nil) { - return UIColor(hue: hue, saturation: saturation, brightness: min(1.0, max(0.0, value + delta)), alpha: 1.0) + let color: UIColor + if self.value < 0.5 { + color = self.baseColor.color.interpolateTo(self.baseColor.edgeColors.0, fraction: 0.5 - self.value)! + } else if self.value > 0.5 { + color = self.baseColor.color.interpolateTo(self.baseColor.edgeColors.1, fraction: self.value - 0.5)! } else { - return color + color = self.baseColor.color } + return color } } From eb48e43f72d4919a6b63914dca17a1ce5595aac3 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 19 Jul 2019 13:57:34 +0200 Subject: [PATCH 20/21] Fixed scam label color for outgoing messages in dark theme --- .../Sources/DefaultDarkPresentationTheme.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift index 278ef12555..6246d70b1e 100644 --- a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift +++ b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift @@ -9,15 +9,18 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem let badgeTextColor: UIColor let outgoingBubbleFillColor: UIColor let outgoingBubbleHighlightedFillColor: UIColor + let outgoingScamColor: UIColor if accentColor.rgb == UIColor.white.rgb { badgeTextColor = .black outgoingBubbleFillColor = UIColor(rgb: 0x313131) outgoingBubbleHighlightedFillColor = UIColor(rgb: 0x464646) + outgoingScamColor = destructiveColor } else { outgoingBubbleFillColor = accentColor badgeTextColor = .white outgoingBubbleHighlightedFillColor = accentColor.withMultipliedBrightnessBy(1.421) + outgoingScamColor = .white } let rootTabBar = PresentationThemeRootTabBar( @@ -169,7 +172,7 @@ private func makeDarkPresentationTheme(accentColor: UIColor) -> PresentationThem let message = PresentationThemeChatMessage( incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.4), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0x000000), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), - outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor)), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: .white, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: .white, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: .white, highlight: UIColor(white: 1.0, alpha: 0.12), separator: UIColor(white: 1.0, alpha: 0.3), bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), + outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor)), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: .white, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.3), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: .white, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: .white, highlight: UIColor(white: 1.0, alpha: 0.12), separator: UIColor(white: 1.0, alpha: 0.3), bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff))), freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f))), infoPrimaryTextColor: .white, infoLinkTextColor: accentColor, From 35dd5d51c3876ac0713686e42b1b2d24b9904704 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 19 Jul 2019 14:00:28 +0200 Subject: [PATCH 21/21] Implemented custom admin ranks --- Telegram-iOS/en.lproj/Localizable.strings | 6 + .../TelegramCore/Authorization.swift | 4 +- .../Sources/PresentationStrings.swift | 5886 +++++++++-------- .../AuthorizationSequenceController.swift | 2 +- .../TelegramUI/CachedChannelAdmins.swift | 62 +- .../TelegramUI/ChannelAdminController.swift | 448 +- .../TelegramUI/ChannelAdminsController.swift | 74 +- .../ChannelMemberCategoryListContext.swift | 35 +- .../ChatHistoryEntriesForView.swift | 16 +- .../TelegramUI/ChatHistoryEntry.swift | 2 +- .../TelegramUI/ChatHistoryListNode.swift | 2 +- .../ChatMessageBubbleItemNode.swift | 22 +- .../ChatRecentActionsHistoryTransition.swift | 54 +- .../TelegramUI/DeclareEncodables.swift | 2 +- .../ForwardPrivacyChatPreviewItem.swift | 2 +- .../TelegramUI/GroupInfoController.swift | 20 +- .../ItemListSingleLineInputItem.swift | 4 + .../Resources/PresentationStrings.mapping | Bin 118248 -> 119227 bytes .../ThemeSettingsChatPreviewItem.swift | 4 +- .../TelegramUI/UsernameSetupController.swift | 10 +- .../WallpaperGalleryController.swift | 4 +- 21 files changed, 3468 insertions(+), 3191 deletions(-) diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings index 796126ed7a..58d2eea53e 100644 --- a/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram-iOS/en.lproj/Localizable.strings @@ -4498,3 +4498,9 @@ Any member of this group will be able to see messages in the channel."; "Appearance.ThemePreview.ChatList.8.Name" = "What"; "Appearance.ThemePreview.ChatList.8.Text" = "Hola!"; + +"Conversation.Owner" = "owner"; + +"Group.EditAdmin.RankTitle" = "ROLE"; +"Group.EditAdmin.RankOwnerPlaceholder" = "owner"; +"Group.EditAdmin.RankAdminPlaceholder" = "admin"; diff --git a/submodules/TelegramCore/TelegramCore/Authorization.swift b/submodules/TelegramCore/TelegramCore/Authorization.swift index 51c9673471..95e5a98f92 100644 --- a/submodules/TelegramCore/TelegramCore/Authorization.swift +++ b/submodules/TelegramCore/TelegramCore/Authorization.swift @@ -260,7 +260,7 @@ public func authorizeWithCode(accountManager: AccountManager, account: Unauthori public func beginSignUp(account: UnauthorizedAccount, data: AuthorizationSignUpData) -> Signal { return account.postbox.transaction { transaction -> Void in - transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .signUp(number: data.number, codeHash: data.codeHash, code: data.code, firstName: "", lastName: "", termsOfService: data.termsOfService, syncContacts: data.syncContacts))) + transaction.setState(UnauthorizedAccountState(isTestingEnvironment: account.testingEnvironment, masterDatacenterId: account.masterDatacenterId, contents: .signUp(number: data.number, codeHash: data.codeHash, firstName: "", lastName: "", termsOfService: data.termsOfService, syncContacts: data.syncContacts))) } |> ignoreValues } @@ -441,7 +441,7 @@ public enum SignUpError { public func signUpWithName(accountManager: AccountManager, account: UnauthorizedAccount, firstName: String, lastName: String, avatarData: Data?) -> Signal { return account.postbox.transaction { transaction -> Signal in - if let state = transaction.getState() as? UnauthorizedAccountState, case let .signUp(number, codeHash, _, _, _, _, syncContacts) = state.contents { + if let state = transaction.getState() as? UnauthorizedAccountState, case let .signUp(number, codeHash, _, _, _, syncContacts) = state.contents { return account.network.request(Api.functions.auth.signUp(phoneNumber: number, phoneCodeHash: codeHash, firstName: firstName, lastName: lastName)) |> mapError { error -> SignUpError in if error.errorDescription.hasPrefix("FLOOD_WAIT") { diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift index 0daa235d02..b71ada6004 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift @@ -739,3717 +739,3737 @@ public final class PresentationStrings { public var SettingsSearch_Synonyms_Data_DownloadInBackground: String { return self._s[513]! } public var SettingsSearch_Synonyms_Data_Storage_KeepMedia: String { return self._s[514]! } public var DialogList_SearchSectionMessages: String { return self._s[517]! } - public var Notifications_ChannelNotifications: String { return self._s[518]! } - public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[519]! } - public var Passport_Language_sk: String { return self._s[520]! } - public var Notification_MessageLifetime1h: String { return self._s[521]! } - public var Wallpaper_ResetWallpapersInfo: String { return self._s[522]! } - public var Call_ReportSkip: String { return self._s[524]! } - public var Cache_ServiceFiles: String { return self._s[525]! } - public var Group_ErrorAddTooMuchAdmins: String { return self._s[526]! } - public var Map_Hybrid: String { return self._s[527]! } - public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[529]! } - public var ChatSettings_AutoDownloadVideos: String { return self._s[531]! } - public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[532]! } - public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[533]! } - public var SocksProxySetup_ProxyTelegram: String { return self._s[536]! } + public var Appearance_ThemePreview_ChatList_8_Name: String { return self._s[518]! } + public var Notifications_ChannelNotifications: String { return self._s[519]! } + public var CheckoutInfo_ShippingInfoAddress1Placeholder: String { return self._s[520]! } + public var Passport_Language_sk: String { return self._s[521]! } + public var Notification_MessageLifetime1h: String { return self._s[522]! } + public var Wallpaper_ResetWallpapersInfo: String { return self._s[523]! } + public var Call_ReportSkip: String { return self._s[525]! } + public var Cache_ServiceFiles: String { return self._s[526]! } + public var Group_ErrorAddTooMuchAdmins: String { return self._s[527]! } + public var Map_Hybrid: String { return self._s[528]! } + public var Contacts_SearchUsersAndGroupsLabel: String { return self._s[530]! } + public var ChatSettings_AutoDownloadVideos: String { return self._s[532]! } + public var Channel_BanUser_PermissionEmbedLinks: String { return self._s[533]! } + public var InfoPlist_NSLocationAlwaysAndWhenInUseUsageDescription: String { return self._s[534]! } + public var SocksProxySetup_ProxyTelegram: String { return self._s[537]! } public func PUSH_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[537]!, self._r[537]!, [_1]) + return formatWithArgumentRanges(self._s[538]!, self._r[538]!, [_1]) } - public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[539]! } + public var Channel_Username_CreatePrivateLinkHelp: String { return self._s[540]! } public func PUSH_CHAT_TITLE_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[540]!, self._r[540]!, [_1, _2]) + return formatWithArgumentRanges(self._s[541]!, self._r[541]!, [_1, _2]) } - public var Conversation_LiveLocationYou: String { return self._s[541]! } - public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[542]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[543]! } - public var UserInfo_ShareBot: String { return self._s[546]! } + public var Conversation_LiveLocationYou: String { return self._s[542]! } + public var SettingsSearch_Synonyms_Privacy_Calls: String { return self._s[543]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsPreview: String { return self._s[544]! } + public var UserInfo_ShareBot: String { return self._s[547]! } public func PUSH_AUTH_REGION(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[547]!, self._r[547]!, [_1, _2]) + return formatWithArgumentRanges(self._s[548]!, self._r[548]!, [_1, _2]) } - public var PhotoEditor_ShadowsTint: String { return self._s[548]! } - public var Message_Audio: String { return self._s[549]! } - public var Passport_Language_lt: String { return self._s[550]! } + public var PhotoEditor_ShadowsTint: String { return self._s[549]! } + public var Message_Audio: String { return self._s[550]! } + public var Passport_Language_lt: String { return self._s[551]! } public func Message_PinnedTextMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[551]!, self._r[551]!, [_0]) + return formatWithArgumentRanges(self._s[552]!, self._r[552]!, [_0]) } - public var Permissions_SiriText_v0: String { return self._s[552]! } - public var Conversation_FileICloudDrive: String { return self._s[553]! } - public var Notifications_Badge_IncludeMutedChats: String { return self._s[554]! } + public var Permissions_SiriText_v0: String { return self._s[553]! } + public var Conversation_FileICloudDrive: String { return self._s[554]! } + public var Notifications_Badge_IncludeMutedChats: String { return self._s[555]! } public func Notification_NewAuthDetected(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[555]!, self._r[555]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[556]!, self._r[556]!, [_1, _2, _3, _4, _5, _6]) } - public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[556]! } + public var DialogList_ProxyConnectionIssuesTooltip: String { return self._s[557]! } public func Time_MonthOfYear_m5(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[557]!, self._r[557]!, [_0]) + return formatWithArgumentRanges(self._s[558]!, self._r[558]!, [_0]) } - public var Channel_SignMessages: String { return self._s[558]! } + public var Channel_SignMessages: String { return self._s[559]! } public func PUSH_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[559]!, self._r[559]!, [_1]) + return formatWithArgumentRanges(self._s[560]!, self._r[560]!, [_1]) } - public var Compose_ChannelTokenListPlaceholder: String { return self._s[560]! } - public var Passport_ScanPassport: String { return self._s[561]! } - public var Watch_Suggestion_Thanks: String { return self._s[562]! } - public var BlockedUsers_AddNew: String { return self._s[563]! } + public var Compose_ChannelTokenListPlaceholder: String { return self._s[561]! } + public var Passport_ScanPassport: String { return self._s[562]! } + public var Watch_Suggestion_Thanks: String { return self._s[563]! } + public var BlockedUsers_AddNew: String { return self._s[564]! } public func PUSH_CHAT_MESSAGE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[564]!, self._r[564]!, [_1, _2]) + return formatWithArgumentRanges(self._s[565]!, self._r[565]!, [_1, _2]) } - public var Watch_Message_Invoice: String { return self._s[565]! } - public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[566]! } - public var Month_GenJuly: String { return self._s[567]! } - public var SocksProxySetup_ProxySocks5: String { return self._s[568]! } - public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[570]! } - public var Notification_ChannelInviterSelf: String { return self._s[571]! } - public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[572]! } + public var Watch_Message_Invoice: String { return self._s[566]! } + public var SettingsSearch_Synonyms_Privacy_LastSeen: String { return self._s[567]! } + public var Month_GenJuly: String { return self._s[568]! } + public var SocksProxySetup_ProxySocks5: String { return self._s[569]! } + public var Notification_Exceptions_DeleteAllConfirmation: String { return self._s[571]! } + public var Notification_ChannelInviterSelf: String { return self._s[572]! } + public var CheckoutInfo_ReceiverInfoEmail: String { return self._s[573]! } public func ApplyLanguage_ChangeLanguageUnofficialText(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[573]!, self._r[573]!, [_1, _2]) + return formatWithArgumentRanges(self._s[574]!, self._r[574]!, [_1, _2]) } - public var CheckoutInfo_Title: String { return self._s[574]! } - public var Watch_Stickers_RecentPlaceholder: String { return self._s[575]! } + public var CheckoutInfo_Title: String { return self._s[575]! } + public var Watch_Stickers_RecentPlaceholder: String { return self._s[576]! } public func Map_DistanceAway(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[576]!, self._r[576]!, [_0]) + return formatWithArgumentRanges(self._s[577]!, self._r[577]!, [_0]) } - public var Passport_Identity_MainPage: String { return self._s[577]! } - public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[578]! } - public var Passport_Language_de: String { return self._s[579]! } - public var Update_Title: String { return self._s[580]! } - public var ContactInfo_PhoneLabelWorkFax: String { return self._s[581]! } - public var Channel_AdminLog_BanEmbedLinks: String { return self._s[582]! } - public var Passport_Email_UseTelegramEmailHelp: String { return self._s[583]! } - public var Notifications_ChannelNotificationsPreview: String { return self._s[584]! } - public var NotificationsSound_Telegraph: String { return self._s[585]! } - public var Watch_LastSeen_ALongTimeAgo: String { return self._s[586]! } - public var ChannelMembers_WhoCanAddMembers: String { return self._s[587]! } + public var Passport_Identity_MainPage: String { return self._s[578]! } + public var TwoStepAuth_ConfirmEmailResendCode: String { return self._s[579]! } + public var Passport_Language_de: String { return self._s[580]! } + public var Update_Title: String { return self._s[581]! } + public var ContactInfo_PhoneLabelWorkFax: String { return self._s[582]! } + public var Channel_AdminLog_BanEmbedLinks: String { return self._s[583]! } + public var Passport_Email_UseTelegramEmailHelp: String { return self._s[584]! } + public var Notifications_ChannelNotificationsPreview: String { return self._s[585]! } + public var NotificationsSound_Telegraph: String { return self._s[586]! } + public var Watch_LastSeen_ALongTimeAgo: String { return self._s[587]! } + public var ChannelMembers_WhoCanAddMembers: String { return self._s[588]! } public func AutoDownloadSettings_UpTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[588]!, self._r[588]!, [_0]) + return formatWithArgumentRanges(self._s[589]!, self._r[589]!, [_0]) } - public var Stickers_SuggestAll: String { return self._s[589]! } - public var Conversation_ForwardTitle: String { return self._s[590]! } + public var Stickers_SuggestAll: String { return self._s[590]! } + public var Conversation_ForwardTitle: String { return self._s[591]! } + public var Appearance_ThemePreview_ChatList_7_Name: String { return self._s[592]! } public func Notification_JoinedChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[591]!, self._r[591]!, [_0]) + return formatWithArgumentRanges(self._s[593]!, self._r[593]!, [_0]) } - public var Calls_NewCall: String { return self._s[592]! } - public var Call_StatusEnded: String { return self._s[593]! } - public var AutoDownloadSettings_DataUsageLow: String { return self._s[594]! } - public var Settings_ProxyConnected: String { return self._s[595]! } - public var Channel_AdminLogFilter_EventsPinned: String { return self._s[596]! } - public var PhotoEditor_QualityVeryLow: String { return self._s[597]! } - public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[598]! } - public var Passport_PasswordPlaceholder: String { return self._s[599]! } - public var Message_PinnedInvoice: String { return self._s[600]! } - public var Passport_Identity_IssueDate: String { return self._s[601]! } - public var Passport_Language_pl: String { return self._s[602]! } + public var Calls_NewCall: String { return self._s[594]! } + public var Call_StatusEnded: String { return self._s[595]! } + public var AutoDownloadSettings_DataUsageLow: String { return self._s[596]! } + public var Settings_ProxyConnected: String { return self._s[597]! } + public var Channel_AdminLogFilter_EventsPinned: String { return self._s[598]! } + public var PhotoEditor_QualityVeryLow: String { return self._s[599]! } + public var Channel_AdminLogFilter_EventsDeletedMessages: String { return self._s[600]! } + public var Passport_PasswordPlaceholder: String { return self._s[601]! } + public var Message_PinnedInvoice: String { return self._s[602]! } + public var Passport_Identity_IssueDate: String { return self._s[603]! } + public var Passport_Language_pl: String { return self._s[604]! } public func ChannelInfo_ChannelForbidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[603]!, self._r[603]!, [_0]) + return formatWithArgumentRanges(self._s[605]!, self._r[605]!, [_0]) } - public var SocksProxySetup_PasteFromClipboard: String { return self._s[604]! } - public var Call_StatusConnecting: String { return self._s[605]! } + public var SocksProxySetup_PasteFromClipboard: String { return self._s[606]! } + public var Call_StatusConnecting: String { return self._s[607]! } public func Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[606]!, self._r[606]!, [_0]) + return formatWithArgumentRanges(self._s[608]!, self._r[608]!, [_0]) } - public var ChatSettings_ConnectionType_UseProxy: String { return self._s[608]! } - public var Common_Edit: String { return self._s[609]! } - public var PrivacySettings_LastSeenNobody: String { return self._s[610]! } + public var ChatSettings_ConnectionType_UseProxy: String { return self._s[610]! } + public var Common_Edit: String { return self._s[611]! } + public var PrivacySettings_LastSeenNobody: String { return self._s[612]! } public func Notification_LeftChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[611]!, self._r[611]!, [_0]) + return formatWithArgumentRanges(self._s[613]!, self._r[613]!, [_0]) } - public var GroupInfo_ChatAdmins: String { return self._s[612]! } - public var PrivateDataSettings_Title: String { return self._s[613]! } - public var Login_CancelPhoneVerificationStop: String { return self._s[614]! } - public var ChatList_Read: String { return self._s[615]! } - public var Undo_ChatClearedForBothSides: String { return self._s[616]! } - public var GroupPermission_SectionTitle: String { return self._s[617]! } + public var GroupInfo_ChatAdmins: String { return self._s[614]! } + public var PrivateDataSettings_Title: String { return self._s[615]! } + public var Login_CancelPhoneVerificationStop: String { return self._s[616]! } + public var ChatList_Read: String { return self._s[617]! } + public var Undo_ChatClearedForBothSides: String { return self._s[618]! } + public var GroupPermission_SectionTitle: String { return self._s[619]! } public func PUSH_CHAT_LEFT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[619]!, self._r[619]!, [_1, _2]) + return formatWithArgumentRanges(self._s[621]!, self._r[621]!, [_1, _2]) } - public var Checkout_ErrorPaymentFailed: String { return self._s[620]! } - public var Update_UpdateApp: String { return self._s[621]! } - public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[622]! } - public var Settings_Appearance: String { return self._s[623]! } - public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[625]! } - public var Watch_Location_Access: String { return self._s[626]! } - public var ShareMenu_CopyShareLink: String { return self._s[628]! } - public var TwoStepAuth_SetupHintTitle: String { return self._s[629]! } + public var Checkout_ErrorPaymentFailed: String { return self._s[622]! } + public var Update_UpdateApp: String { return self._s[623]! } + public var Group_Username_RevokeExistingUsernamesInfo: String { return self._s[624]! } + public var Settings_Appearance: String { return self._s[625]! } + public var SettingsSearch_Synonyms_Stickers_SuggestStickers: String { return self._s[627]! } + public var Watch_Location_Access: String { return self._s[628]! } + public var ShareMenu_CopyShareLink: String { return self._s[630]! } + public var TwoStepAuth_SetupHintTitle: String { return self._s[631]! } public func DialogList_SingleRecordingVideoMessageSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[631]!, self._r[631]!, [_0]) + return formatWithArgumentRanges(self._s[633]!, self._r[633]!, [_0]) } - public var Notifications_ClassicTones: String { return self._s[632]! } - public var Weekday_ShortWednesday: String { return self._s[633]! } - public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[634]! } - public var Undo_LeftGroup: String { return self._s[637]! } - public var Conversation_LinkDialogCopy: String { return self._s[638]! } - public var KeyCommand_FocusOnInputField: String { return self._s[640]! } - public var Contacts_SelectAll: String { return self._s[641]! } - public var Preview_SaveToCameraRoll: String { return self._s[642]! } - public var PrivacySettings_PasscodeOff: String { return self._s[643]! } - public var Wallpaper_Title: String { return self._s[644]! } - public var Conversation_FilePhotoOrVideo: String { return self._s[645]! } - public var AccessDenied_Camera: String { return self._s[646]! } - public var Watch_Compose_CurrentLocation: String { return self._s[647]! } - public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[649]! } + public var Notifications_ClassicTones: String { return self._s[634]! } + public var Weekday_ShortWednesday: String { return self._s[635]! } + public var WallpaperPreview_SwipeColorsBottomText: String { return self._s[636]! } + public var Undo_LeftGroup: String { return self._s[639]! } + public var Conversation_LinkDialogCopy: String { return self._s[640]! } + public var KeyCommand_FocusOnInputField: String { return self._s[642]! } + public var Contacts_SelectAll: String { return self._s[643]! } + public var Preview_SaveToCameraRoll: String { return self._s[644]! } + public var PrivacySettings_PasscodeOff: String { return self._s[645]! } + public var Appearance_ThemePreview_ChatList_6_Name: String { return self._s[646]! } + public var Wallpaper_Title: String { return self._s[647]! } + public var Conversation_FilePhotoOrVideo: String { return self._s[648]! } + public var AccessDenied_Camera: String { return self._s[649]! } + public var Watch_Compose_CurrentLocation: String { return self._s[650]! } + public var Channel_DiscussionGroup_MakeHistoryPublicProceed: String { return self._s[652]! } public func SecretImage_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[650]!, self._r[650]!, [_0]) + return formatWithArgumentRanges(self._s[653]!, self._r[653]!, [_0]) } - public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[651]! } - public var Passport_Language_ro: String { return self._s[652]! } - public var CheckoutInfo_SaveInfoHelp: String { return self._s[653]! } + public var GroupInfo_InvitationLinkDoesNotExist: String { return self._s[654]! } + public var Passport_Language_ro: String { return self._s[655]! } + public var CheckoutInfo_SaveInfoHelp: String { return self._s[656]! } public func Notification_SecretChatMessageScreenshot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[654]!, self._r[654]!, [_0]) + return formatWithArgumentRanges(self._s[657]!, self._r[657]!, [_0]) } - public var Login_CancelPhoneVerification: String { return self._s[655]! } - public var State_ConnectingToProxy: String { return self._s[656]! } - public var Calls_RatingTitle: String { return self._s[657]! } - public var Generic_ErrorMoreInfo: String { return self._s[658]! } - public var Appearance_PreviewReplyText: String { return self._s[659]! } - public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[660]! } - public var SharedMedia_CategoryLinks: String { return self._s[661]! } - public var Calls_Missed: String { return self._s[662]! } - public var Cache_Photos: String { return self._s[666]! } - public var GroupPermission_NoAddMembers: String { return self._s[667]! } + public var Login_CancelPhoneVerification: String { return self._s[658]! } + public var State_ConnectingToProxy: String { return self._s[659]! } + public var Calls_RatingTitle: String { return self._s[660]! } + public var Generic_ErrorMoreInfo: String { return self._s[661]! } + public var Appearance_PreviewReplyText: String { return self._s[662]! } + public var CheckoutInfo_ShippingInfoPostcodePlaceholder: String { return self._s[663]! } + public var SharedMedia_CategoryLinks: String { return self._s[664]! } + public var Calls_Missed: String { return self._s[665]! } + public var Cache_Photos: String { return self._s[669]! } + public var GroupPermission_NoAddMembers: String { return self._s[670]! } public func Channel_AdminLog_MessageUnpinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[668]!, self._r[668]!, [_0]) + return formatWithArgumentRanges(self._s[671]!, self._r[671]!, [_0]) } - public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[669]! } - public var Settings_ProxyDisabled: String { return self._s[670]! } + public var Conversation_ShareBotLocationConfirmationTitle: String { return self._s[672]! } + public var Settings_ProxyDisabled: String { return self._s[673]! } public func Settings_ApplyProxyAlertCredentials(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[671]!, self._r[671]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[674]!, self._r[674]!, [_1, _2, _3, _4]) } public func Conversation_RestrictedMediaTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[672]!, self._r[672]!, [_0]) - } - public var Appearance_Title: String { return self._s[673]! } - public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[675]!, self._r[675]!, [_0]) } - public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[676]! } - public var Channel_EditMessageErrorGeneric: String { return self._s[677]! } - public var Privacy_Calls_IntegrationHelp: String { return self._s[678]! } - public var Preview_DeletePhoto: String { return self._s[679]! } - public var Appearance_AppIconFilledX: String { return self._s[680]! } - public var PrivacySettings_PrivacyTitle: String { return self._s[681]! } + public var Appearance_Title: String { return self._s[676]! } + public func Time_MonthOfYear_m2(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[678]!, self._r[678]!, [_0]) + } + public var StickerPacksSettings_ShowStickersButtonHelp: String { return self._s[679]! } + public var Channel_EditMessageErrorGeneric: String { return self._s[680]! } + public var Privacy_Calls_IntegrationHelp: String { return self._s[681]! } + public var Preview_DeletePhoto: String { return self._s[682]! } + public var Appearance_AppIconFilledX: String { return self._s[683]! } + public var PrivacySettings_PrivacyTitle: String { return self._s[684]! } public func Conversation_BotInteractiveUrlAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[682]!, self._r[682]!, [_0]) + return formatWithArgumentRanges(self._s[685]!, self._r[685]!, [_0]) } - public var Coub_TapForSound: String { return self._s[684]! } - public var Map_LocatingError: String { return self._s[685]! } - public var TwoStepAuth_EmailChangeSuccess: String { return self._s[687]! } - public var Passport_ForgottenPassword: String { return self._s[688]! } - public var GroupInfo_InviteLink_RevokeLink: String { return self._s[689]! } - public var StickerPacksSettings_ArchivedPacks: String { return self._s[690]! } - public var Login_TermsOfServiceSignupDecline: String { return self._s[692]! } - public var Channel_Moderator_AccessLevelRevoke: String { return self._s[693]! } - public var Message_Location: String { return self._s[694]! } - public var Passport_Identity_NamePlaceholder: String { return self._s[695]! } - public var Channel_Management_Title: String { return self._s[696]! } - public var DialogList_SearchSectionDialogs: String { return self._s[698]! } - public var Compose_NewChannel_Members: String { return self._s[699]! } + public var Coub_TapForSound: String { return self._s[687]! } + public var Map_LocatingError: String { return self._s[688]! } + public var TwoStepAuth_EmailChangeSuccess: String { return self._s[690]! } + public var Passport_ForgottenPassword: String { return self._s[691]! } + public var GroupInfo_InviteLink_RevokeLink: String { return self._s[692]! } + public var StickerPacksSettings_ArchivedPacks: String { return self._s[693]! } + public var Login_TermsOfServiceSignupDecline: String { return self._s[695]! } + public var Channel_Moderator_AccessLevelRevoke: String { return self._s[696]! } + public var Message_Location: String { return self._s[697]! } + public var Passport_Identity_NamePlaceholder: String { return self._s[698]! } + public var Channel_Management_Title: String { return self._s[699]! } + public var DialogList_SearchSectionDialogs: String { return self._s[701]! } + public var Compose_NewChannel_Members: String { return self._s[702]! } public func DialogList_SingleUploadingFileSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[700]!, self._r[700]!, [_0]) + return formatWithArgumentRanges(self._s[703]!, self._r[703]!, [_0]) } - public var GroupInfo_Location: String { return self._s[701]! } - public var AutoNightTheme_ScheduledFrom: String { return self._s[702]! } - public var PhotoEditor_WarmthTool: String { return self._s[703]! } - public var Passport_Language_tr: String { return self._s[704]! } + public var GroupInfo_Location: String { return self._s[704]! } + public var Appearance_ThemePreview_ChatList_5_Name: String { return self._s[705]! } + public var AutoNightTheme_ScheduledFrom: String { return self._s[706]! } + public var PhotoEditor_WarmthTool: String { return self._s[707]! } + public var Passport_Language_tr: String { return self._s[708]! } public func PUSH_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[705]!, self._r[705]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[709]!, self._r[709]!, [_1, _2, _3]) } - public var Login_ResetAccountProtected_Reset: String { return self._s[707]! } - public var Watch_PhotoView_Title: String { return self._s[708]! } - public var Passport_Phone_Delete: String { return self._s[709]! } - public var Undo_ChatDeletedForBothSides: String { return self._s[710]! } - public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[711]! } - public var GroupInfo_Permissions: String { return self._s[712]! } - public var PasscodeSettings_TurnPasscodeOff: String { return self._s[713]! } - public var Profile_ShareContactButton: String { return self._s[714]! } - public var ChatSettings_Other: String { return self._s[715]! } - public var UserInfo_NotificationsDisabled: String { return self._s[716]! } - public var CheckoutInfo_ShippingInfoCity: String { return self._s[717]! } - public var LastSeen_WithinAMonth: String { return self._s[718]! } - public var Conversation_ReportGroupLocation: String { return self._s[719]! } - public var Conversation_EncryptionCanceled: String { return self._s[720]! } - public var MediaPicker_GroupDescription: String { return self._s[721]! } - public var WebSearch_Images: String { return self._s[722]! } + public var Login_ResetAccountProtected_Reset: String { return self._s[711]! } + public var Watch_PhotoView_Title: String { return self._s[712]! } + public var Passport_Phone_Delete: String { return self._s[713]! } + public var Undo_ChatDeletedForBothSides: String { return self._s[714]! } + public var Conversation_EditingMessageMediaEditCurrentPhoto: String { return self._s[715]! } + public var GroupInfo_Permissions: String { return self._s[716]! } + public var PasscodeSettings_TurnPasscodeOff: String { return self._s[717]! } + public var Profile_ShareContactButton: String { return self._s[718]! } + public var ChatSettings_Other: String { return self._s[719]! } + public var UserInfo_NotificationsDisabled: String { return self._s[720]! } + public var CheckoutInfo_ShippingInfoCity: String { return self._s[721]! } + public var LastSeen_WithinAMonth: String { return self._s[722]! } + public var Conversation_ReportGroupLocation: String { return self._s[723]! } + public var Conversation_EncryptionCanceled: String { return self._s[724]! } + public var MediaPicker_GroupDescription: String { return self._s[725]! } + public var WebSearch_Images: String { return self._s[726]! } public func Channel_Management_PromotedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[723]!, self._r[723]!, [_0]) + return formatWithArgumentRanges(self._s[727]!, self._r[727]!, [_0]) } - public var Message_Photo: String { return self._s[724]! } - public var PasscodeSettings_HelpBottom: String { return self._s[725]! } - public var AutoDownloadSettings_VideosTitle: String { return self._s[726]! } - public var Passport_Identity_AddDriversLicense: String { return self._s[727]! } - public var TwoStepAuth_EnterPasswordPassword: String { return self._s[728]! } - public var NotificationsSound_Calypso: String { return self._s[729]! } - public var Map_Map: String { return self._s[730]! } - public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[732]! } - public var ChatSettings_TextSizeUnits: String { return self._s[733]! } - public var Common_of: String { return self._s[734]! } - public var Conversation_ForwardContacts: String { return self._s[736]! } + public var Message_Photo: String { return self._s[728]! } + public var PasscodeSettings_HelpBottom: String { return self._s[729]! } + public var AutoDownloadSettings_VideosTitle: String { return self._s[730]! } + public var Passport_Identity_AddDriversLicense: String { return self._s[731]! } + public var TwoStepAuth_EnterPasswordPassword: String { return self._s[732]! } + public var NotificationsSound_Calypso: String { return self._s[733]! } + public var Map_Map: String { return self._s[734]! } + public var CheckoutInfo_ReceiverInfoTitle: String { return self._s[736]! } + public var ChatSettings_TextSizeUnits: String { return self._s[737]! } + public var Common_of: String { return self._s[738]! } + public var Conversation_ForwardContacts: String { return self._s[740]! } public func Call_AnsweringWithAccount(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[738]!, self._r[738]!, [_0]) + return formatWithArgumentRanges(self._s[742]!, self._r[742]!, [_0]) } - public var Passport_Language_hy: String { return self._s[739]! } - public var Notifications_MessageNotificationsHelp: String { return self._s[740]! } - public var AutoDownloadSettings_Reset: String { return self._s[741]! } - public var Paint_ClearConfirm: String { return self._s[742]! } - public var Camera_VideoMode: String { return self._s[743]! } + public var Passport_Language_hy: String { return self._s[743]! } + public var Notifications_MessageNotificationsHelp: String { return self._s[744]! } + public var AutoDownloadSettings_Reset: String { return self._s[745]! } + public var Paint_ClearConfirm: String { return self._s[746]! } + public var Camera_VideoMode: String { return self._s[747]! } public func Conversation_RestrictedStickersTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[744]!, self._r[744]!, [_0]) + return formatWithArgumentRanges(self._s[748]!, self._r[748]!, [_0]) } - public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[745]! } - public var Conversation_ViewBackground: String { return self._s[746]! } - public var Passport_Language_el: String { return self._s[747]! } - public var PhotoEditor_Original: String { return self._s[748]! } - public var Settings_FAQ_Button: String { return self._s[750]! } - public var Channel_Setup_PublicNoLink: String { return self._s[752]! } - public var Conversation_UnsupportedMedia: String { return self._s[753]! } - public var Conversation_SlideToCancel: String { return self._s[754]! } - public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[755]! } - public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[756]! } - public var Conversation_ReportSpamChannelConfirmation: String { return self._s[757]! } - public var AutoNightTheme_NotAvailable: String { return self._s[758]! } - public var Common_Create: String { return self._s[759]! } - public var Settings_ApplyProxyAlertEnable: String { return self._s[760]! } - public var Localization_ChooseLanguage: String { return self._s[762]! } - public var Settings_Proxy: String { return self._s[765]! } - public var Privacy_TopPeersHelp: String { return self._s[766]! } - public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[767]! } - public var Chat_UnsendMyMessages: String { return self._s[768]! } - public var TwoStepAuth_ConfirmationAbort: String { return self._s[769]! } + public var Privacy_Calls_AlwaysAllow_Placeholder: String { return self._s[749]! } + public var Conversation_ViewBackground: String { return self._s[750]! } + public var Passport_Language_el: String { return self._s[751]! } + public var PhotoEditor_Original: String { return self._s[752]! } + public var Settings_FAQ_Button: String { return self._s[754]! } + public var Channel_Setup_PublicNoLink: String { return self._s[756]! } + public var Conversation_UnsupportedMedia: String { return self._s[757]! } + public var Conversation_SlideToCancel: String { return self._s[758]! } + public var Appearance_ThemePreview_ChatList_4_Name: String { return self._s[759]! } + public var Passport_Identity_OneOfTypeInternalPassport: String { return self._s[760]! } + public var CheckoutInfo_ShippingInfoPostcode: String { return self._s[761]! } + public var Conversation_ReportSpamChannelConfirmation: String { return self._s[762]! } + public var AutoNightTheme_NotAvailable: String { return self._s[763]! } + public var Conversation_Owner: String { return self._s[764]! } + public var Common_Create: String { return self._s[765]! } + public var Settings_ApplyProxyAlertEnable: String { return self._s[766]! } + public var Localization_ChooseLanguage: String { return self._s[768]! } + public var Settings_Proxy: String { return self._s[771]! } + public var Privacy_TopPeersHelp: String { return self._s[772]! } + public var CheckoutInfo_ShippingInfoCountryPlaceholder: String { return self._s[773]! } + public var Chat_UnsendMyMessages: String { return self._s[774]! } + public var TwoStepAuth_ConfirmationAbort: String { return self._s[775]! } public func Contacts_AccessDeniedHelpPortrait(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[771]!, self._r[771]!, [_0]) + return formatWithArgumentRanges(self._s[777]!, self._r[777]!, [_0]) } - public var Contacts_SortedByPresence: String { return self._s[772]! } - public var Passport_Identity_SurnamePlaceholder: String { return self._s[773]! } - public var Cache_Title: String { return self._s[774]! } + public var Contacts_SortedByPresence: String { return self._s[778]! } + public var Passport_Identity_SurnamePlaceholder: String { return self._s[779]! } + public var Cache_Title: String { return self._s[780]! } public func Login_PhoneBannedEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[775]!, self._r[775]!, [_0]) + return formatWithArgumentRanges(self._s[781]!, self._r[781]!, [_0]) } - public var TwoStepAuth_EmailCodeExpired: String { return self._s[776]! } - public var Channel_Moderator_Title: String { return self._s[777]! } - public var InstantPage_AutoNightTheme: String { return self._s[779]! } + public var TwoStepAuth_EmailCodeExpired: String { return self._s[782]! } + public var Channel_Moderator_Title: String { return self._s[783]! } + public var InstantPage_AutoNightTheme: String { return self._s[785]! } public func PUSH_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[782]!, self._r[782]!, [_1]) + return formatWithArgumentRanges(self._s[788]!, self._r[788]!, [_1]) } - public var Passport_Scans_Upload: String { return self._s[783]! } - public var Undo_Undo: String { return self._s[785]! } - public var Contacts_AccessDeniedHelpON: String { return self._s[786]! } - public var TwoStepAuth_RemovePassword: String { return self._s[787]! } - public var Common_Delete: String { return self._s[788]! } - public var Contacts_AddPeopleNearby: String { return self._s[790]! } - public var Conversation_ContextMenuDelete: String { return self._s[791]! } - public var SocksProxySetup_Credentials: String { return self._s[792]! } - public var PasscodeSettings_AutoLock_Disabled: String { return self._s[794]! } - public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[797]! } - public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[798]! } - public var Passport_Language_id: String { return self._s[800]! } - public var WallpaperSearch_ColorTeal: String { return self._s[801]! } - public var ChannelIntro_Title: String { return self._s[802]! } + public var Passport_Scans_Upload: String { return self._s[789]! } + public var Undo_Undo: String { return self._s[791]! } + public var Contacts_AccessDeniedHelpON: String { return self._s[792]! } + public var TwoStepAuth_RemovePassword: String { return self._s[793]! } + public var Common_Delete: String { return self._s[794]! } + public var Contacts_AddPeopleNearby: String { return self._s[796]! } + public var Conversation_ContextMenuDelete: String { return self._s[797]! } + public var SocksProxySetup_Credentials: String { return self._s[798]! } + public var PasscodeSettings_AutoLock_Disabled: String { return self._s[800]! } + public var Passport_Address_OneOfTypeRentalAgreement: String { return self._s[803]! } + public var Conversation_ShareBotContactConfirmationTitle: String { return self._s[804]! } + public var Passport_Language_id: String { return self._s[806]! } + public var WallpaperSearch_ColorTeal: String { return self._s[807]! } + public var ChannelIntro_Title: String { return self._s[808]! } public func Channel_AdminLog_MessageToggleSignaturesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[803]!, self._r[803]!, [_0]) + return formatWithArgumentRanges(self._s[809]!, self._r[809]!, [_0]) } - public var Channel_Info_Description: String { return self._s[805]! } - public var Stickers_FavoriteStickers: String { return self._s[806]! } - public var Channel_BanUser_PermissionAddMembers: String { return self._s[807]! } - public var Notifications_DisplayNamesOnLockScreen: String { return self._s[808]! } - public var Calls_NoMissedCallsPlacehoder: String { return self._s[809]! } - public var Group_PublicLink_Placeholder: String { return self._s[810]! } - public var Notifications_ExceptionsDefaultSound: String { return self._s[811]! } + public var Channel_Info_Description: String { return self._s[811]! } + public var Stickers_FavoriteStickers: String { return self._s[812]! } + public var Channel_BanUser_PermissionAddMembers: String { return self._s[813]! } + public var Notifications_DisplayNamesOnLockScreen: String { return self._s[814]! } + public var Calls_NoMissedCallsPlacehoder: String { return self._s[815]! } + public var Group_PublicLink_Placeholder: String { return self._s[816]! } + public var Notifications_ExceptionsDefaultSound: String { return self._s[817]! } public func PUSH_CHANNEL_MESSAGE_POLL(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[812]!, self._r[812]!, [_1]) + return formatWithArgumentRanges(self._s[818]!, self._r[818]!, [_1]) } - public var TextFormat_Underline: String { return self._s[813]! } + public var TextFormat_Underline: String { return self._s[819]! } public func DialogList_SearchSubtitleFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[814]!, self._r[814]!, [_1, _2]) + return formatWithArgumentRanges(self._s[820]!, self._r[820]!, [_1, _2]) } public func Channel_AdminLog_MessageRemovedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[815]!, self._r[815]!, [_0]) + return formatWithArgumentRanges(self._s[821]!, self._r[821]!, [_0]) } + public var Appearance_ThemePreview_ChatList_3_Name: String { return self._s[822]! } public func Channel_OwnershipTransfer_TransferCompleted(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[816]!, self._r[816]!, [_1, _2]) + return formatWithArgumentRanges(self._s[823]!, self._r[823]!, [_1, _2]) } - public var GroupPermission_Delete: String { return self._s[817]! } - public var Passport_Language_uk: String { return self._s[818]! } - public var StickerPack_HideStickers: String { return self._s[820]! } - public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[821]! } + public var GroupPermission_Delete: String { return self._s[824]! } + public var Passport_Language_uk: String { return self._s[825]! } + public var StickerPack_HideStickers: String { return self._s[827]! } + public var ChangePhoneNumberNumber_NumberPlaceholder: String { return self._s[828]! } public func PUSH_CHAT_MESSAGE_PHOTO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[822]!, self._r[822]!, [_1, _2]) + return formatWithArgumentRanges(self._s[829]!, self._r[829]!, [_1, _2]) } - public var Activity_UploadingVideoMessage: String { return self._s[823]! } + public var Activity_UploadingVideoMessage: String { return self._s[830]! } public func GroupPermission_ApplyAlertText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[824]!, self._r[824]!, [_0]) + return formatWithArgumentRanges(self._s[831]!, self._r[831]!, [_0]) } - public var Channel_TitleInfo: String { return self._s[825]! } - public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[826]! } - public var Settings_CallSettings: String { return self._s[827]! } - public var Camera_SquareMode: String { return self._s[828]! } - public var GroupInfo_SharedMediaNone: String { return self._s[829]! } + public var Channel_TitleInfo: String { return self._s[832]! } + public var StickerPacksSettings_ArchivedPacks_Info: String { return self._s[833]! } + public var Settings_CallSettings: String { return self._s[834]! } + public var Camera_SquareMode: String { return self._s[835]! } + public var GroupInfo_SharedMediaNone: String { return self._s[836]! } public func PUSH_MESSAGE_VIDEO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[830]!, self._r[830]!, [_1]) + return formatWithArgumentRanges(self._s[837]!, self._r[837]!, [_1]) } - public var Bot_GenericBotStatus: String { return self._s[831]! } - public var Application_Update: String { return self._s[833]! } - public var Month_ShortJanuary: String { return self._s[834]! } - public var Contacts_PermissionsKeepDisabled: String { return self._s[835]! } - public var Channel_AdminLog_BanReadMessages: String { return self._s[836]! } - public var Settings_AppLanguage_Unofficial: String { return self._s[837]! } - public var Passport_Address_Street2Placeholder: String { return self._s[838]! } + public var Bot_GenericBotStatus: String { return self._s[838]! } + public var Application_Update: String { return self._s[840]! } + public var Month_ShortJanuary: String { return self._s[841]! } + public var Contacts_PermissionsKeepDisabled: String { return self._s[842]! } + public var Channel_AdminLog_BanReadMessages: String { return self._s[843]! } + public var Settings_AppLanguage_Unofficial: String { return self._s[844]! } + public var Passport_Address_Street2Placeholder: String { return self._s[845]! } public func Map_LiveLocationShortHour(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[839]!, self._r[839]!, [_0]) + return formatWithArgumentRanges(self._s[846]!, self._r[846]!, [_0]) } - public var NetworkUsageSettings_Cellular: String { return self._s[840]! } - public var Appearance_PreviewOutgoingText: String { return self._s[841]! } - public var Notifications_PermissionsAllowInSettings: String { return self._s[842]! } - public var AutoDownloadSettings_OnForAll: String { return self._s[844]! } - public var Map_Directions: String { return self._s[845]! } - public var Passport_FieldIdentityTranslationHelp: String { return self._s[847]! } - public var Appearance_ThemeDay: String { return self._s[848]! } - public var LogoutOptions_LogOut: String { return self._s[849]! } - public var Group_PublicLink_Title: String { return self._s[851]! } - public var Channel_AddBotErrorNoRights: String { return self._s[852]! } - public var Passport_Identity_AddPassport: String { return self._s[853]! } - public var LocalGroup_ButtonTitle: String { return self._s[854]! } - public var Call_Message: String { return self._s[855]! } - public var PhotoEditor_ExposureTool: String { return self._s[856]! } - public var Passport_FieldOneOf_Delimeter: String { return self._s[858]! } - public var Channel_AdminLog_CanBanUsers: String { return self._s[860]! } - public var Appearance_Preview: String { return self._s[861]! } - public var Compose_ChannelMembers: String { return self._s[862]! } - public var Conversation_DeleteManyMessages: String { return self._s[863]! } - public var ReportPeer_ReasonOther_Title: String { return self._s[864]! } - public var Checkout_ErrorProviderAccountTimeout: String { return self._s[865]! } - public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[866]! } - public var Channel_Stickers_CreateYourOwn: String { return self._s[869]! } - public var Conversation_UpdateTelegram: String { return self._s[870]! } + public var NetworkUsageSettings_Cellular: String { return self._s[847]! } + public var Appearance_PreviewOutgoingText: String { return self._s[848]! } + public var Notifications_PermissionsAllowInSettings: String { return self._s[849]! } + public var AutoDownloadSettings_OnForAll: String { return self._s[851]! } + public var Map_Directions: String { return self._s[852]! } + public var Passport_FieldIdentityTranslationHelp: String { return self._s[854]! } + public var Appearance_ThemeDay: String { return self._s[855]! } + public var LogoutOptions_LogOut: String { return self._s[856]! } + public var Group_PublicLink_Title: String { return self._s[858]! } + public var Channel_AddBotErrorNoRights: String { return self._s[859]! } + public var Passport_Identity_AddPassport: String { return self._s[860]! } + public var LocalGroup_ButtonTitle: String { return self._s[861]! } + public var Call_Message: String { return self._s[862]! } + public var PhotoEditor_ExposureTool: String { return self._s[863]! } + public var Passport_FieldOneOf_Delimeter: String { return self._s[865]! } + public var Channel_AdminLog_CanBanUsers: String { return self._s[867]! } + public var Appearance_ThemePreview_ChatList_2_Name: String { return self._s[868]! } + public var Appearance_Preview: String { return self._s[869]! } + public var Compose_ChannelMembers: String { return self._s[870]! } + public var Conversation_DeleteManyMessages: String { return self._s[871]! } + public var ReportPeer_ReasonOther_Title: String { return self._s[872]! } + public var Checkout_ErrorProviderAccountTimeout: String { return self._s[873]! } + public var TwoStepAuth_ResetAccountConfirmation: String { return self._s[874]! } + public var Channel_Stickers_CreateYourOwn: String { return self._s[877]! } + public var Conversation_UpdateTelegram: String { return self._s[878]! } public func Notification_PinnedPhotoMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[871]!, self._r[871]!, [_0]) + return formatWithArgumentRanges(self._s[879]!, self._r[879]!, [_0]) } public func PUSH_PINNED_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[872]!, self._r[872]!, [_1]) + return formatWithArgumentRanges(self._s[880]!, self._r[880]!, [_1]) } - public var GroupInfo_Administrators_Title: String { return self._s[873]! } - public var Privacy_Forwards_PreviewMessageText: String { return self._s[874]! } + public var GroupInfo_Administrators_Title: String { return self._s[881]! } + public var Privacy_Forwards_PreviewMessageText: String { return self._s[882]! } public func PrivacySettings_LastSeenNobodyPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[875]!, self._r[875]!, [_0]) + return formatWithArgumentRanges(self._s[883]!, self._r[883]!, [_0]) } - public var Tour_Title3: String { return self._s[876]! } - public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[877]! } - public var Clipboard_SendPhoto: String { return self._s[881]! } - public var MediaPicker_Videos: String { return self._s[882]! } - public var Passport_Email_Title: String { return self._s[883]! } + public var Tour_Title3: String { return self._s[884]! } + public var Channel_EditAdmin_PermissionInviteSubscribers: String { return self._s[885]! } + public var Clipboard_SendPhoto: String { return self._s[889]! } + public var MediaPicker_Videos: String { return self._s[890]! } + public var Passport_Email_Title: String { return self._s[891]! } public func PrivacySettings_LastSeenEverybodyMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[884]!, self._r[884]!, [_0]) + return formatWithArgumentRanges(self._s[892]!, self._r[892]!, [_0]) } - public var StickerPacksSettings_Title: String { return self._s[885]! } - public var Conversation_MessageDialogDelete: String { return self._s[886]! } - public var Privacy_Calls_CustomHelp: String { return self._s[888]! } - public var Message_Wallpaper: String { return self._s[889]! } - public var MemberSearch_BotSection: String { return self._s[890]! } - public var GroupInfo_SetSound: String { return self._s[891]! } - public var Core_ServiceUserStatus: String { return self._s[892]! } - public var LiveLocationUpdated_JustNow: String { return self._s[893]! } - public var Call_StatusFailed: String { return self._s[894]! } - public var TwoStepAuth_SetupPasswordDescription: String { return self._s[895]! } - public var TwoStepAuth_SetPassword: String { return self._s[896]! } - public var Permissions_PeopleNearbyText_v0: String { return self._s[897]! } + public var StickerPacksSettings_Title: String { return self._s[893]! } + public var Conversation_MessageDialogDelete: String { return self._s[894]! } + public var Privacy_Calls_CustomHelp: String { return self._s[896]! } + public var Message_Wallpaper: String { return self._s[897]! } + public var MemberSearch_BotSection: String { return self._s[898]! } + public var GroupInfo_SetSound: String { return self._s[899]! } + public var Core_ServiceUserStatus: String { return self._s[900]! } + public var LiveLocationUpdated_JustNow: String { return self._s[901]! } + public var Call_StatusFailed: String { return self._s[902]! } + public var TwoStepAuth_SetupPasswordDescription: String { return self._s[903]! } + public var TwoStepAuth_SetPassword: String { return self._s[904]! } + public var Permissions_PeopleNearbyText_v0: String { return self._s[905]! } public func SocksProxySetup_ProxyStatusPing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[899]!, self._r[899]!, [_0]) + return formatWithArgumentRanges(self._s[907]!, self._r[907]!, [_0]) } - public var Calls_SubmitRating: String { return self._s[900]! } - public var Profile_Username: String { return self._s[901]! } - public var Bot_DescriptionTitle: String { return self._s[902]! } - public var MaskStickerSettings_Title: String { return self._s[903]! } - public var SharedMedia_CategoryOther: String { return self._s[904]! } - public var GroupInfo_SetGroupPhoto: String { return self._s[905]! } - public var Common_NotNow: String { return self._s[906]! } - public var CallFeedback_IncludeLogsInfo: String { return self._s[907]! } - public var Conversation_ShareMyPhoneNumber: String { return self._s[908]! } - public var Map_Location: String { return self._s[909]! } - public var Invitation_JoinGroup: String { return self._s[910]! } - public var AutoDownloadSettings_Title: String { return self._s[912]! } - public var Conversation_DiscardVoiceMessageDescription: String { return self._s[913]! } - public var Channel_ErrorAddBlocked: String { return self._s[914]! } - public var Conversation_UnblockUser: String { return self._s[915]! } - public var Watch_Bot_Restart: String { return self._s[916]! } - public var TwoStepAuth_Title: String { return self._s[917]! } - public var Channel_AdminLog_BanSendMessages: String { return self._s[918]! } - public var Checkout_ShippingMethod: String { return self._s[919]! } - public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[920]! } + public var Calls_SubmitRating: String { return self._s[908]! } + public var Profile_Username: String { return self._s[909]! } + public var Bot_DescriptionTitle: String { return self._s[910]! } + public var MaskStickerSettings_Title: String { return self._s[911]! } + public var SharedMedia_CategoryOther: String { return self._s[912]! } + public var GroupInfo_SetGroupPhoto: String { return self._s[913]! } + public var Common_NotNow: String { return self._s[914]! } + public var CallFeedback_IncludeLogsInfo: String { return self._s[915]! } + public var Conversation_ShareMyPhoneNumber: String { return self._s[916]! } + public var Map_Location: String { return self._s[917]! } + public var Invitation_JoinGroup: String { return self._s[918]! } + public var AutoDownloadSettings_Title: String { return self._s[920]! } + public var Conversation_DiscardVoiceMessageDescription: String { return self._s[921]! } + public var Channel_ErrorAddBlocked: String { return self._s[922]! } + public var Conversation_UnblockUser: String { return self._s[923]! } + public var Watch_Bot_Restart: String { return self._s[924]! } + public var TwoStepAuth_Title: String { return self._s[925]! } + public var Channel_AdminLog_BanSendMessages: String { return self._s[926]! } + public var Checkout_ShippingMethod: String { return self._s[927]! } + public var Passport_Identity_OneOfTypeIdentityCard: String { return self._s[928]! } public func PUSH_CHAT_MESSAGE_STICKER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[921]!, self._r[921]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[929]!, self._r[929]!, [_1, _2, _3]) } public func Chat_UnsendMyMessagesAlertTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[923]!, self._r[923]!, [_0]) + return formatWithArgumentRanges(self._s[931]!, self._r[931]!, [_0]) } public func Channel_Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[924]!, self._r[924]!, [_0]) + return formatWithArgumentRanges(self._s[932]!, self._r[932]!, [_0]) } - public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[925]! } - public var AuthSessions_TerminateOtherSessions: String { return self._s[926]! } - public var Contacts_FailedToSendInvitesMessage: String { return self._s[927]! } - public var PrivacySettings_TwoStepAuth: String { return self._s[928]! } - public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[929]! } - public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[930]! } - public var Conversation_EditingMessagePanelMedia: String { return self._s[931]! } - public var Checkout_PaymentMethod_Title: String { return self._s[932]! } - public var SocksProxySetup_Connection: String { return self._s[933]! } - public var Group_MessagePhotoRemoved: String { return self._s[934]! } - public var Channel_Stickers_NotFound: String { return self._s[936]! } - public var Group_About_Help: String { return self._s[937]! } - public var Notification_PassportValueProofOfIdentity: String { return self._s[938]! } - public var PeopleNearby_Title: String { return self._s[940]! } + public var Appearance_ThemePreview_ChatList_1_Name: String { return self._s[933]! } + public var SettingsSearch_Synonyms_Data_AutoplayGifs: String { return self._s[934]! } + public var AuthSessions_TerminateOtherSessions: String { return self._s[935]! } + public var Contacts_FailedToSendInvitesMessage: String { return self._s[936]! } + public var PrivacySettings_TwoStepAuth: String { return self._s[937]! } + public var Notification_Exceptions_PreviewAlwaysOn: String { return self._s[938]! } + public var SettingsSearch_Synonyms_Privacy_Passcode: String { return self._s[939]! } + public var Conversation_EditingMessagePanelMedia: String { return self._s[940]! } + public var Checkout_PaymentMethod_Title: String { return self._s[941]! } + public var SocksProxySetup_Connection: String { return self._s[942]! } + public var Group_MessagePhotoRemoved: String { return self._s[943]! } + public var Channel_Stickers_NotFound: String { return self._s[945]! } + public var Group_About_Help: String { return self._s[946]! } + public var Notification_PassportValueProofOfIdentity: String { return self._s[947]! } + public var PeopleNearby_Title: String { return self._s[949]! } public func ApplyLanguage_ChangeLanguageOfficialText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[941]!, self._r[941]!, [_1]) + return formatWithArgumentRanges(self._s[950]!, self._r[950]!, [_1]) } - public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[943]! } - public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[944]! } - public var SocksProxySetup_Password: String { return self._s[945]! } - public var Notifications_PermissionsEnable: String { return self._s[946]! } - public var TwoStepAuth_ChangeEmail: String { return self._s[948]! } + public var CheckoutInfo_ShippingInfoStatePlaceholder: String { return self._s[952]! } + public var Notifications_GroupNotificationsExceptionsHelp: String { return self._s[953]! } + public var SocksProxySetup_Password: String { return self._s[954]! } + public var Notifications_PermissionsEnable: String { return self._s[955]! } + public var TwoStepAuth_ChangeEmail: String { return self._s[957]! } public func Channel_AdminLog_MessageInvitedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[949]!, self._r[949]!, [_1]) + return formatWithArgumentRanges(self._s[958]!, self._r[958]!, [_1]) } public func Time_MonthOfYear_m10(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[951]!, self._r[951]!, [_0]) + return formatWithArgumentRanges(self._s[960]!, self._r[960]!, [_0]) } - public var Passport_Identity_TypeDriversLicense: String { return self._s[952]! } - public var ArchivedPacksAlert_Title: String { return self._s[953]! } + public var Passport_Identity_TypeDriversLicense: String { return self._s[961]! } + public var ArchivedPacksAlert_Title: String { return self._s[962]! } public func Time_PreciseDate_m7(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[954]!, self._r[954]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[963]!, self._r[963]!, [_1, _2, _3]) } - public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[955]! } - public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[957]! } - public var Conversation_StatusTyping: String { return self._s[958]! } - public var Broadcast_AdminLog_EmptyText: String { return self._s[959]! } - public var Notification_PassportValueProofOfAddress: String { return self._s[960]! } - public var UserInfo_CreateNewContact: String { return self._s[961]! } - public var Passport_Identity_FrontSide: String { return self._s[962]! } - public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[963]! } - public var Calls_CallTabTitle: String { return self._s[964]! } - public var Channel_AdminLog_ChannelEmptyText: String { return self._s[965]! } + public var PrivacyLastSeenSettings_GroupsAndChannelsHelp: String { return self._s[964]! } + public var Privacy_Calls_NeverAllow_Placeholder: String { return self._s[966]! } + public var Conversation_StatusTyping: String { return self._s[967]! } + public var Broadcast_AdminLog_EmptyText: String { return self._s[968]! } + public var Notification_PassportValueProofOfAddress: String { return self._s[969]! } + public var UserInfo_CreateNewContact: String { return self._s[970]! } + public var Passport_Identity_FrontSide: String { return self._s[971]! } + public var Login_PhoneNumberAlreadyAuthorizedSwitch: String { return self._s[972]! } + public var Calls_CallTabTitle: String { return self._s[973]! } + public var Channel_AdminLog_ChannelEmptyText: String { return self._s[974]! } public func Login_BannedPhoneBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[966]!, self._r[966]!, [_0]) + return formatWithArgumentRanges(self._s[975]!, self._r[975]!, [_0]) } - public var Watch_UserInfo_MuteTitle: String { return self._s[967]! } - public var SharedMedia_EmptyMusicText: String { return self._s[968]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[969]! } - public var Paint_Stickers: String { return self._s[970]! } - public var Privacy_GroupsAndChannels: String { return self._s[971]! } - public var UserInfo_AddContact: String { return self._s[973]! } + public var Watch_UserInfo_MuteTitle: String { return self._s[976]! } + public var Group_EditAdmin_RankAdminPlaceholder: String { return self._s[977]! } + public var SharedMedia_EmptyMusicText: String { return self._s[978]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1minute: String { return self._s[979]! } + public var Paint_Stickers: String { return self._s[980]! } + public var Privacy_GroupsAndChannels: String { return self._s[981]! } + public var UserInfo_AddContact: String { return self._s[983]! } public func Conversation_MessageViaUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[974]!, self._r[974]!, [_0]) + return formatWithArgumentRanges(self._s[984]!, self._r[984]!, [_0]) } - public var PhoneNumberHelp_ChangeNumber: String { return self._s[976]! } + public var PhoneNumberHelp_ChangeNumber: String { return self._s[986]! } public func ChatList_ClearChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[978]!, self._r[978]!, [_0]) + return formatWithArgumentRanges(self._s[988]!, self._r[988]!, [_0]) } - public var DialogList_NoMessagesTitle: String { return self._s[979]! } - public var EditProfile_NameAndPhotoHelp: String { return self._s[980]! } - public var BlockedUsers_BlockUser: String { return self._s[981]! } - public var Notifications_PermissionsOpenSettings: String { return self._s[982]! } - public var MediaPicker_UngroupDescription: String { return self._s[983]! } - public var Watch_NoConnection: String { return self._s[984]! } - public var Month_GenSeptember: String { return self._s[985]! } - public var Conversation_ViewGroup: String { return self._s[986]! } - public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[989]! } - public var Privacy_Forwards_AlwaysLink: String { return self._s[990]! } - public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[991]! } - public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[992]! } - public var MediaPicker_CameraRoll: String { return self._s[994]! } - public var Month_GenAugust: String { return self._s[995]! } - public var AccessDenied_VideoMessageMicrophone: String { return self._s[996]! } - public var SharedMedia_EmptyText: String { return self._s[997]! } - public var Map_ShareLiveLocation: String { return self._s[998]! } - public var Calls_All: String { return self._s[999]! } - public var Appearance_ThemeNight: String { return self._s[1002]! } - public var Conversation_HoldForAudio: String { return self._s[1003]! } - public var SettingsSearch_Synonyms_Support: String { return self._s[1006]! } - public var GroupInfo_GroupHistoryHidden: String { return self._s[1007]! } - public var SocksProxySetup_Secret: String { return self._s[1008]! } + public var DialogList_NoMessagesTitle: String { return self._s[989]! } + public var EditProfile_NameAndPhotoHelp: String { return self._s[990]! } + public var BlockedUsers_BlockUser: String { return self._s[991]! } + public var Notifications_PermissionsOpenSettings: String { return self._s[992]! } + public var MediaPicker_UngroupDescription: String { return self._s[993]! } + public var Watch_NoConnection: String { return self._s[994]! } + public var Month_GenSeptember: String { return self._s[995]! } + public var Conversation_ViewGroup: String { return self._s[996]! } + public var Channel_AdminLogFilter_EventsLeavingSubscribers: String { return self._s[999]! } + public var Privacy_Forwards_AlwaysLink: String { return self._s[1000]! } + public var Channel_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[1001]! } + public var Passport_FieldOneOf_FinalDelimeter: String { return self._s[1002]! } + public var MediaPicker_CameraRoll: String { return self._s[1004]! } + public var Month_GenAugust: String { return self._s[1005]! } + public var AccessDenied_VideoMessageMicrophone: String { return self._s[1006]! } + public var SharedMedia_EmptyText: String { return self._s[1007]! } + public var Map_ShareLiveLocation: String { return self._s[1008]! } + public var Calls_All: String { return self._s[1009]! } + public var Appearance_ThemeNight: String { return self._s[1012]! } + public var Conversation_HoldForAudio: String { return self._s[1013]! } + public var SettingsSearch_Synonyms_Support: String { return self._s[1016]! } + public var GroupInfo_GroupHistoryHidden: String { return self._s[1017]! } + public var SocksProxySetup_Secret: String { return self._s[1018]! } public func Activity_RemindAboutChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1009]!, self._r[1009]!, [_0]) + return formatWithArgumentRanges(self._s[1019]!, self._r[1019]!, [_0]) } - public var Channel_BanList_RestrictedTitle: String { return self._s[1011]! } - public var Conversation_Location: String { return self._s[1012]! } + public var Channel_BanList_RestrictedTitle: String { return self._s[1021]! } + public var Conversation_Location: String { return self._s[1022]! } public func AutoDownloadSettings_UpToFor(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1013]!, self._r[1013]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1023]!, self._r[1023]!, [_1, _2]) } - public var ChatSettings_AutoDownloadPhotos: String { return self._s[1015]! } - public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1016]! } - public var Notifications_PermissionsText: String { return self._s[1017]! } - public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1018]! } - public var Call_Flip: String { return self._s[1019]! } - public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1020]! } - public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1022]! } - public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1024]! } - public var Channel_TooMuchBots: String { return self._s[1026]! } - public var Passport_DeletePassportConfirmation: String { return self._s[1027]! } - public var Login_InvalidCodeError: String { return self._s[1028]! } - public var StickerPacksSettings_FeaturedPacks: String { return self._s[1029]! } + public var ChatSettings_AutoDownloadPhotos: String { return self._s[1025]! } + public var SettingsSearch_Synonyms_Privacy_Title: String { return self._s[1026]! } + public var Notifications_PermissionsText: String { return self._s[1027]! } + public var SettingsSearch_Synonyms_Data_SaveIncomingPhotos: String { return self._s[1028]! } + public var Call_Flip: String { return self._s[1029]! } + public var SocksProxySetup_ProxyStatusConnecting: String { return self._s[1030]! } + public var Channel_EditAdmin_PermissionPinMessages: String { return self._s[1032]! } + public var TwoStepAuth_ReEnterPasswordDescription: String { return self._s[1034]! } + public var Channel_TooMuchBots: String { return self._s[1036]! } + public var Passport_DeletePassportConfirmation: String { return self._s[1037]! } + public var Login_InvalidCodeError: String { return self._s[1038]! } + public var StickerPacksSettings_FeaturedPacks: String { return self._s[1039]! } public func ChatList_DeleteSecretChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1030]!, self._r[1030]!, [_0]) + return formatWithArgumentRanges(self._s[1040]!, self._r[1040]!, [_0]) } public func GroupInfo_InvitationLinkAcceptChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1031]!, self._r[1031]!, [_0]) + return formatWithArgumentRanges(self._s[1041]!, self._r[1041]!, [_0]) } - public var Call_CallInProgressTitle: String { return self._s[1032]! } - public var Month_ShortSeptember: String { return self._s[1033]! } - public var Watch_ChannelInfo_Title: String { return self._s[1034]! } - public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1037]! } - public var DialogList_PasscodeLockHelp: String { return self._s[1038]! } - public var Notifications_Badge_IncludePublicGroups: String { return self._s[1039]! } - public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1040]! } - public var PhotoEditor_CropReset: String { return self._s[1041]! } - public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1043]! } - public var Channel_Management_LabelEditor: String { return self._s[1044]! } - public var Passport_Identity_LatinNameHelp: String { return self._s[1046]! } - public var PhotoEditor_HighlightsTool: String { return self._s[1047]! } - public var UserInfo_Title: String { return self._s[1048]! } - public var ChatList_HideAction: String { return self._s[1049]! } - public var AccessDenied_Title: String { return self._s[1050]! } - public var DialogList_SearchLabel: String { return self._s[1051]! } - public var Group_Setup_HistoryHidden: String { return self._s[1052]! } - public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1053]! } - public var State_Updating: String { return self._s[1055]! } - public var Contacts_TabTitle: String { return self._s[1056]! } - public var Notifications_Badge_CountUnreadMessages: String { return self._s[1058]! } - public var GroupInfo_GroupHistory: String { return self._s[1059]! } - public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1060]! } - public var Wallpaper_SetColor: String { return self._s[1061]! } - public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1062]! } - public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1063]! } - public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1064]! } - public var Contacts_NotRegisteredSection: String { return self._s[1065]! } + public var Call_CallInProgressTitle: String { return self._s[1042]! } + public var Month_ShortSeptember: String { return self._s[1043]! } + public var Watch_ChannelInfo_Title: String { return self._s[1044]! } + public var ChatList_DeleteSavedMessagesConfirmation: String { return self._s[1047]! } + public var DialogList_PasscodeLockHelp: String { return self._s[1048]! } + public var Notifications_Badge_IncludePublicGroups: String { return self._s[1049]! } + public var Channel_AdminLogFilter_EventsTitle: String { return self._s[1050]! } + public var PhotoEditor_CropReset: String { return self._s[1051]! } + public var Group_Username_CreatePrivateLinkHelp: String { return self._s[1053]! } + public var Channel_Management_LabelEditor: String { return self._s[1054]! } + public var Passport_Identity_LatinNameHelp: String { return self._s[1056]! } + public var PhotoEditor_HighlightsTool: String { return self._s[1057]! } + public var UserInfo_Title: String { return self._s[1058]! } + public var ChatList_HideAction: String { return self._s[1059]! } + public var AccessDenied_Title: String { return self._s[1060]! } + public var DialogList_SearchLabel: String { return self._s[1061]! } + public var Group_Setup_HistoryHidden: String { return self._s[1062]! } + public var TwoStepAuth_PasswordChangeSuccess: String { return self._s[1063]! } + public var State_Updating: String { return self._s[1065]! } + public var Contacts_TabTitle: String { return self._s[1066]! } + public var Notifications_Badge_CountUnreadMessages: String { return self._s[1068]! } + public var GroupInfo_GroupHistory: String { return self._s[1069]! } + public var Conversation_UnsupportedMediaPlaceholder: String { return self._s[1070]! } + public var Wallpaper_SetColor: String { return self._s[1071]! } + public var CheckoutInfo_ShippingInfoCountry: String { return self._s[1072]! } + public var SettingsSearch_Synonyms_SavedMessages: String { return self._s[1073]! } + public var Passport_Identity_OneOfTypeDriversLicense: String { return self._s[1074]! } + public var Contacts_NotRegisteredSection: String { return self._s[1075]! } public func Time_PreciseDate_m4(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1066]!, self._r[1066]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1076]!, self._r[1076]!, [_1, _2, _3]) } - public var Paint_Clear: String { return self._s[1067]! } - public var StickerPacksSettings_ArchivedMasks: String { return self._s[1068]! } - public var SocksProxySetup_Connecting: String { return self._s[1069]! } - public var ExplicitContent_AlertChannel: String { return self._s[1070]! } - public var CreatePoll_AllOptionsAdded: String { return self._s[1071]! } - public var Conversation_Contact: String { return self._s[1072]! } - public var Login_CodeExpired: String { return self._s[1073]! } - public var Passport_DiscardMessageAction: String { return self._s[1074]! } - public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1075]! } - public var Channel_AdminLog_EmptyMessageText: String { return self._s[1076]! } - public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1077]! } - public var Month_ShortApril: String { return self._s[1078]! } - public var AuthSessions_CurrentSession: String { return self._s[1079]! } - public var WallpaperPreview_CropTopText: String { return self._s[1083]! } - public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1084]! } - public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1085]! } - public var Channel_Setup_TypePrivate: String { return self._s[1087]! } - public var Forward_ChannelReadOnly: String { return self._s[1090]! } - public var PhotoEditor_CurvesBlue: String { return self._s[1091]! } - public var AddContact_SharedContactException: String { return self._s[1092]! } - public var UserInfo_BotPrivacy: String { return self._s[1093]! } - public var Notification_PassportValueEmail: String { return self._s[1094]! } - public var EmptyGroupInfo_Subtitle: String { return self._s[1095]! } - public var GroupPermission_NewTitle: String { return self._s[1096]! } - public var CallFeedback_ReasonDropped: String { return self._s[1097]! } - public var GroupInfo_Permissions_AddException: String { return self._s[1098]! } - public var Channel_SignMessages_Help: String { return self._s[1100]! } - public var Undo_ChatDeleted: String { return self._s[1102]! } - public var Conversation_ChatBackground: String { return self._s[1103]! } - public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1104]! } - public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1105]! } - public var Passport_Language_pt: String { return self._s[1106]! } - public var NotificationsSound_Popcorn: String { return self._s[1109]! } - public var AutoNightTheme_Disabled: String { return self._s[1110]! } - public var BlockedUsers_LeavePrefix: String { return self._s[1111]! } - public var WallpaperPreview_CustomColorTopText: String { return self._s[1112]! } - public var Contacts_PermissionsSuppressWarningText: String { return self._s[1113]! } - public var WallpaperSearch_ColorBlue: String { return self._s[1114]! } + public var Paint_Clear: String { return self._s[1077]! } + public var StickerPacksSettings_ArchivedMasks: String { return self._s[1078]! } + public var SocksProxySetup_Connecting: String { return self._s[1079]! } + public var ExplicitContent_AlertChannel: String { return self._s[1080]! } + public var CreatePoll_AllOptionsAdded: String { return self._s[1081]! } + public var Conversation_Contact: String { return self._s[1082]! } + public var Login_CodeExpired: String { return self._s[1083]! } + public var Passport_DiscardMessageAction: String { return self._s[1084]! } + public var Channel_AdminLog_MessagePreviousDescription: String { return self._s[1085]! } + public var Channel_AdminLog_EmptyMessageText: String { return self._s[1086]! } + public var SettingsSearch_Synonyms_Data_NetworkUsage: String { return self._s[1087]! } + public var Month_ShortApril: String { return self._s[1088]! } + public var AuthSessions_CurrentSession: String { return self._s[1089]! } + public var WallpaperPreview_CropTopText: String { return self._s[1093]! } + public var PrivacySettings_DeleteAccountIfAwayFor: String { return self._s[1094]! } + public var CheckoutInfo_ShippingInfoTitle: String { return self._s[1095]! } + public var Channel_Setup_TypePrivate: String { return self._s[1097]! } + public var Forward_ChannelReadOnly: String { return self._s[1100]! } + public var PhotoEditor_CurvesBlue: String { return self._s[1101]! } + public var AddContact_SharedContactException: String { return self._s[1102]! } + public var UserInfo_BotPrivacy: String { return self._s[1103]! } + public var Notification_PassportValueEmail: String { return self._s[1104]! } + public var EmptyGroupInfo_Subtitle: String { return self._s[1105]! } + public var GroupPermission_NewTitle: String { return self._s[1106]! } + public var CallFeedback_ReasonDropped: String { return self._s[1107]! } + public var GroupInfo_Permissions_AddException: String { return self._s[1108]! } + public var Channel_SignMessages_Help: String { return self._s[1110]! } + public var Undo_ChatDeleted: String { return self._s[1112]! } + public var Conversation_ChatBackground: String { return self._s[1113]! } + public var ChannelMembers_WhoCanAddMembers_Admins: String { return self._s[1114]! } + public var FastTwoStepSetup_EmailPlaceholder: String { return self._s[1115]! } + public var Passport_Language_pt: String { return self._s[1116]! } + public var NotificationsSound_Popcorn: String { return self._s[1119]! } + public var AutoNightTheme_Disabled: String { return self._s[1120]! } + public var BlockedUsers_LeavePrefix: String { return self._s[1121]! } + public var WallpaperPreview_CustomColorTopText: String { return self._s[1122]! } + public var Contacts_PermissionsSuppressWarningText: String { return self._s[1123]! } + public var WallpaperSearch_ColorBlue: String { return self._s[1124]! } public func CancelResetAccount_TextSMS(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1115]!, self._r[1115]!, [_0]) + return formatWithArgumentRanges(self._s[1125]!, self._r[1125]!, [_0]) } - public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1116]! } - public var SocksProxySetup_UseForCalls: String { return self._s[1117]! } - public var Passport_DeleteDocumentConfirmation: String { return self._s[1119]! } + public var CheckoutInfo_ErrorNameInvalid: String { return self._s[1126]! } + public var SocksProxySetup_UseForCalls: String { return self._s[1127]! } + public var Passport_DeleteDocumentConfirmation: String { return self._s[1129]! } public func Conversation_Megabytes(_ _0: Float) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1120]!, self._r[1120]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1130]!, self._r[1130]!, ["\(_0)"]) } - public var SocksProxySetup_Hostname: String { return self._s[1123]! } - public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1124]! } - public var Compose_NewEncryptedChat: String { return self._s[1125]! } - public var Login_CodeFloodError: String { return self._s[1126]! } - public var Calls_TabTitle: String { return self._s[1127]! } - public var Privacy_ProfilePhoto: String { return self._s[1128]! } - public var Passport_Language_he: String { return self._s[1129]! } - public var GroupPermission_Title: String { return self._s[1130]! } + public var SocksProxySetup_Hostname: String { return self._s[1133]! } + public var ChatSettings_AutoDownloadSettings_OffForAll: String { return self._s[1134]! } + public var Compose_NewEncryptedChat: String { return self._s[1135]! } + public var Login_CodeFloodError: String { return self._s[1136]! } + public var Calls_TabTitle: String { return self._s[1137]! } + public var Privacy_ProfilePhoto: String { return self._s[1138]! } + public var Passport_Language_he: String { return self._s[1139]! } + public var GroupPermission_Title: String { return self._s[1140]! } public func Channel_AdminLog_MessageGroupPreHistoryHidden(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1131]!, self._r[1131]!, [_0]) + return formatWithArgumentRanges(self._s[1141]!, self._r[1141]!, [_0]) } - public var GroupPermission_NoChangeInfo: String { return self._s[1132]! } - public var ChatList_DeleteForCurrentUser: String { return self._s[1133]! } - public var Tour_Text1: String { return self._s[1134]! } - public var Channel_EditAdmin_TransferOwnership: String { return self._s[1135]! } - public var Month_ShortFebruary: String { return self._s[1136]! } - public var TwoStepAuth_EmailSkip: String { return self._s[1137]! } - public var NotificationsSound_Glass: String { return self._s[1138]! } - public var Appearance_ThemeNightBlue: String { return self._s[1139]! } - public var CheckoutInfo_Pay: String { return self._s[1140]! } - public var Invite_LargeRecipientsCountWarning: String { return self._s[1142]! } - public var Call_CallAgain: String { return self._s[1144]! } - public var AttachmentMenu_SendAsFile: String { return self._s[1145]! } - public var AccessDenied_MicrophoneRestricted: String { return self._s[1146]! } - public var Passport_InvalidPasswordError: String { return self._s[1147]! } - public var Watch_Message_Game: String { return self._s[1148]! } - public var Stickers_Install: String { return self._s[1149]! } - public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1150]! } - public var Passport_Identity_ResidenceCountry: String { return self._s[1152]! } - public var Notifications_GroupNotificationsHelp: String { return self._s[1153]! } - public var AuthSessions_OtherSessions: String { return self._s[1154]! } - public var Channel_Username_Help: String { return self._s[1155]! } - public var Camera_Title: String { return self._s[1156]! } - public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1158]! } - public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1159]! } - public var Channel_AdminLog_SendPolls: String { return self._s[1160]! } - public var Channel_AdminLog_TitleAllEvents: String { return self._s[1161]! } - public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1162]! } - public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1163]! } - public var Conversation_RestrictedStickers: String { return self._s[1164]! } - public var Notifications_ExceptionsResetToDefaults: String { return self._s[1166]! } - public var UserInfo_TelegramCall: String { return self._s[1168]! } - public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1169]! } - public var CreatePoll_OptionsHeader: String { return self._s[1170]! } - public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1171]! } - public var ArchivedChats_IntroTitle1: String { return self._s[1172]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1173]! } - public var Passport_Identity_EditPersonalDetails: String { return self._s[1174]! } + public var GroupPermission_NoChangeInfo: String { return self._s[1142]! } + public var ChatList_DeleteForCurrentUser: String { return self._s[1143]! } + public var Tour_Text1: String { return self._s[1144]! } + public var Channel_EditAdmin_TransferOwnership: String { return self._s[1145]! } + public var Month_ShortFebruary: String { return self._s[1146]! } + public var TwoStepAuth_EmailSkip: String { return self._s[1147]! } + public var NotificationsSound_Glass: String { return self._s[1148]! } + public var Appearance_ThemeNightBlue: String { return self._s[1149]! } + public var CheckoutInfo_Pay: String { return self._s[1150]! } + public var Invite_LargeRecipientsCountWarning: String { return self._s[1152]! } + public var Call_CallAgain: String { return self._s[1154]! } + public var AttachmentMenu_SendAsFile: String { return self._s[1155]! } + public var AccessDenied_MicrophoneRestricted: String { return self._s[1156]! } + public var Passport_InvalidPasswordError: String { return self._s[1157]! } + public var Watch_Message_Game: String { return self._s[1158]! } + public var Stickers_Install: String { return self._s[1159]! } + public var PrivacyLastSeenSettings_NeverShareWith: String { return self._s[1160]! } + public var Passport_Identity_ResidenceCountry: String { return self._s[1162]! } + public var Notifications_GroupNotificationsHelp: String { return self._s[1163]! } + public var AuthSessions_OtherSessions: String { return self._s[1164]! } + public var Channel_Username_Help: String { return self._s[1165]! } + public var Camera_Title: String { return self._s[1166]! } + public var GroupInfo_SetGroupPhotoDelete: String { return self._s[1168]! } + public var Privacy_ProfilePhoto_NeverShareWith_Title: String { return self._s[1169]! } + public var Channel_AdminLog_SendPolls: String { return self._s[1170]! } + public var Channel_AdminLog_TitleAllEvents: String { return self._s[1171]! } + public var Channel_EditAdmin_PermissionInviteMembers: String { return self._s[1172]! } + public var Contacts_MemberSearchSectionTitleGroup: String { return self._s[1173]! } + public var Conversation_RestrictedStickers: String { return self._s[1174]! } + public var Notifications_ExceptionsResetToDefaults: String { return self._s[1176]! } + public var UserInfo_TelegramCall: String { return self._s[1178]! } + public var TwoStepAuth_SetupResendEmailCode: String { return self._s[1179]! } + public var CreatePoll_OptionsHeader: String { return self._s[1180]! } + public var SettingsSearch_Synonyms_Data_CallsUseLessData: String { return self._s[1181]! } + public var ArchivedChats_IntroTitle1: String { return self._s[1182]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Title: String { return self._s[1183]! } + public var Passport_Identity_EditPersonalDetails: String { return self._s[1184]! } public func Time_PreciseDate_m1(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1175]!, self._r[1175]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1185]!, self._r[1185]!, [_1, _2, _3]) } - public var Settings_SaveEditedPhotos: String { return self._s[1176]! } - public var TwoStepAuth_ConfirmationTitle: String { return self._s[1177]! } - public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1178]! } - public var Conversation_MessageDialogRetry: String { return self._s[1179]! } - public var Conversation_DiscardVoiceMessageAction: String { return self._s[1180]! } - public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1181]! } - public var Group_Setup_TypeHeader: String { return self._s[1182]! } - public var Paint_RecentStickers: String { return self._s[1183]! } - public var PhotoEditor_GrainTool: String { return self._s[1184]! } - public var CheckoutInfo_ShippingInfoState: String { return self._s[1185]! } - public var EmptyGroupInfo_Line4: String { return self._s[1186]! } - public var Watch_AuthRequired: String { return self._s[1188]! } + public var Settings_SaveEditedPhotos: String { return self._s[1186]! } + public var TwoStepAuth_ConfirmationTitle: String { return self._s[1187]! } + public var Privacy_GroupsAndChannels_NeverAllow_Title: String { return self._s[1188]! } + public var Conversation_MessageDialogRetry: String { return self._s[1189]! } + public var Conversation_DiscardVoiceMessageAction: String { return self._s[1190]! } + public var Permissions_PeopleNearbyTitle_v0: String { return self._s[1191]! } + public var Group_Setup_TypeHeader: String { return self._s[1192]! } + public var Paint_RecentStickers: String { return self._s[1193]! } + public var PhotoEditor_GrainTool: String { return self._s[1194]! } + public var CheckoutInfo_ShippingInfoState: String { return self._s[1195]! } + public var EmptyGroupInfo_Line4: String { return self._s[1196]! } + public var Watch_AuthRequired: String { return self._s[1198]! } public func Passport_Email_UseTelegramEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1189]!, self._r[1189]!, [_0]) + return formatWithArgumentRanges(self._s[1199]!, self._r[1199]!, [_0]) } - public var Conversation_EncryptedDescriptionTitle: String { return self._s[1190]! } - public var ChannelIntro_Text: String { return self._s[1191]! } - public var DialogList_DeleteBotConfirmation: String { return self._s[1192]! } - public var GroupPermission_NoSendMedia: String { return self._s[1193]! } - public var Calls_AddTab: String { return self._s[1194]! } - public var Message_ReplyActionButtonShowReceipt: String { return self._s[1195]! } - public var Channel_AdminLog_EmptyFilterText: String { return self._s[1196]! } - public var Notification_MessageLifetime1d: String { return self._s[1197]! } - public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1198]! } - public var Channel_BanUser_PermissionsHeader: String { return self._s[1199]! } - public var Passport_Identity_GenderFemale: String { return self._s[1200]! } - public var BlockedUsers_BlockTitle: String { return self._s[1201]! } + public var Conversation_EncryptedDescriptionTitle: String { return self._s[1200]! } + public var ChannelIntro_Text: String { return self._s[1201]! } + public var DialogList_DeleteBotConfirmation: String { return self._s[1202]! } + public var GroupPermission_NoSendMedia: String { return self._s[1203]! } + public var Calls_AddTab: String { return self._s[1204]! } + public var Message_ReplyActionButtonShowReceipt: String { return self._s[1205]! } + public var Channel_AdminLog_EmptyFilterText: String { return self._s[1206]! } + public var Notification_MessageLifetime1d: String { return self._s[1207]! } + public var Notifications_ChannelNotificationsExceptionsHelp: String { return self._s[1208]! } + public var Channel_BanUser_PermissionsHeader: String { return self._s[1209]! } + public var Passport_Identity_GenderFemale: String { return self._s[1210]! } + public var BlockedUsers_BlockTitle: String { return self._s[1211]! } public func PUSH_CHANNEL_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1202]!, self._r[1202]!, [_1]) + return formatWithArgumentRanges(self._s[1212]!, self._r[1212]!, [_1]) } - public var Weekday_Yesterday: String { return self._s[1203]! } - public var WallpaperSearch_ColorBlack: String { return self._s[1204]! } - public var ChatList_ArchiveAction: String { return self._s[1205]! } - public var AutoNightTheme_Scheduled: String { return self._s[1206]! } + public var Weekday_Yesterday: String { return self._s[1213]! } + public var WallpaperSearch_ColorBlack: String { return self._s[1214]! } + public var ChatList_ArchiveAction: String { return self._s[1215]! } + public var AutoNightTheme_Scheduled: String { return self._s[1216]! } public func Login_PhoneGenericEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String, _ _6: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1207]!, self._r[1207]!, [_1, _2, _3, _4, _5, _6]) + return formatWithArgumentRanges(self._s[1217]!, self._r[1217]!, [_1, _2, _3, _4, _5, _6]) } - public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1208]! } + public var PrivacyPolicy_DeclineDeleteNow: String { return self._s[1218]! } public func PUSH_CHAT_JOINED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1209]!, self._r[1209]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1219]!, self._r[1219]!, [_1, _2]) } - public var CreatePoll_Create: String { return self._s[1210]! } - public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1211]! } + public var CreatePoll_Create: String { return self._s[1220]! } + public var Channel_Members_AddBannedErrorAdmin: String { return self._s[1221]! } public func Notification_CallFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1212]!, self._r[1212]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1222]!, self._r[1222]!, [_1, _2]) } - public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1213]! } - public var Notifications_InAppNotificationsSounds: String { return self._s[1215]! } + public var Checkout_ErrorProviderAccountInvalid: String { return self._s[1223]! } + public var Notifications_InAppNotificationsSounds: String { return self._s[1225]! } public func PUSH_PINNED_GAME_SCORE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1216]!, self._r[1216]!, [_1]) + return formatWithArgumentRanges(self._s[1226]!, self._r[1226]!, [_1]) } - public var Preview_OpenInInstagram: String { return self._s[1217]! } - public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1218]! } + public var Preview_OpenInInstagram: String { return self._s[1227]! } + public var Notification_MessageLifetimeRemovedOutgoing: String { return self._s[1228]! } public func PUSH_CHAT_ADD_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1219]!, self._r[1219]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1229]!, self._r[1229]!, [_1, _2, _3]) } public func Passport_PrivacyPolicy(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1220]!, self._r[1220]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1230]!, self._r[1230]!, [_1, _2]) } - public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1221]! } - public var ArchivedChats_IntroText3: String { return self._s[1222]! } - public var ChatList_UndoArchiveHiddenText: String { return self._s[1223]! } - public var NetworkUsageSettings_TotalSection: String { return self._s[1224]! } - public var Channel_Setup_TypePrivateHelp: String { return self._s[1225]! } + public var Channel_AdminLog_InfoPanelAlertTitle: String { return self._s[1231]! } + public var ArchivedChats_IntroText3: String { return self._s[1232]! } + public var ChatList_UndoArchiveHiddenText: String { return self._s[1233]! } + public var NetworkUsageSettings_TotalSection: String { return self._s[1234]! } + public var Channel_Setup_TypePrivateHelp: String { return self._s[1235]! } public func PUSH_CHAT_MESSAGE_POLL(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1226]!, self._r[1226]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1236]!, self._r[1236]!, [_1, _2, _3]) } - public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1228]! } - public var FastTwoStepSetup_HintSection: String { return self._s[1229]! } - public var Wallpaper_PhotoLibrary: String { return self._s[1230]! } - public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1231]! } - public var Gif_NoGifsFound: String { return self._s[1232]! } - public var Watch_LastSeen_WithinAMonth: String { return self._s[1233]! } - public var GroupInfo_ActionPromote: String { return self._s[1234]! } - public var PasscodeSettings_SimplePasscode: String { return self._s[1235]! } - public var GroupInfo_Permissions_Title: String { return self._s[1236]! } - public var Permissions_ContactsText_v0: String { return self._s[1237]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1238]! } - public var PrivacySettings_DataSettingsHelp: String { return self._s[1241]! } - public var Passport_FieldEmailHelp: String { return self._s[1242]! } + public var Privacy_GroupsAndChannels_NeverAllow_Placeholder: String { return self._s[1238]! } + public var FastTwoStepSetup_HintSection: String { return self._s[1239]! } + public var Wallpaper_PhotoLibrary: String { return self._s[1240]! } + public var TwoStepAuth_SetupResendEmailCodeAlert: String { return self._s[1241]! } + public var Gif_NoGifsFound: String { return self._s[1242]! } + public var Watch_LastSeen_WithinAMonth: String { return self._s[1243]! } + public var GroupInfo_ActionPromote: String { return self._s[1244]! } + public var PasscodeSettings_SimplePasscode: String { return self._s[1245]! } + public var GroupInfo_Permissions_Title: String { return self._s[1246]! } + public var Permissions_ContactsText_v0: String { return self._s[1247]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedPublicGroups: String { return self._s[1248]! } + public var PrivacySettings_DataSettingsHelp: String { return self._s[1251]! } + public var Passport_FieldEmailHelp: String { return self._s[1252]! } public func Activity_RemindAboutUser(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1243]!, self._r[1243]!, [_0]) + return formatWithArgumentRanges(self._s[1253]!, self._r[1253]!, [_0]) } - public var Passport_Identity_GenderPlaceholder: String { return self._s[1244]! } - public var Weekday_ShortSaturday: String { return self._s[1245]! } - public var ContactInfo_PhoneLabelMain: String { return self._s[1246]! } - public var Watch_Conversation_UserInfo: String { return self._s[1247]! } - public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1248]! } - public var PrivacyLastSeenSettings_Title: String { return self._s[1249]! } - public var Conversation_ShareBotLocationConfirmation: String { return self._s[1250]! } - public var PhotoEditor_VignetteTool: String { return self._s[1251]! } - public var Passport_Address_Street1Placeholder: String { return self._s[1252]! } - public var Passport_Language_et: String { return self._s[1253]! } - public var AppUpgrade_Running: String { return self._s[1254]! } - public var Channel_DiscussionGroup_Info: String { return self._s[1256]! } - public var Passport_Language_bg: String { return self._s[1257]! } - public var Stickers_NoStickersFound: String { return self._s[1259]! } + public var Passport_Identity_GenderPlaceholder: String { return self._s[1254]! } + public var Weekday_ShortSaturday: String { return self._s[1255]! } + public var ContactInfo_PhoneLabelMain: String { return self._s[1256]! } + public var Watch_Conversation_UserInfo: String { return self._s[1257]! } + public var CheckoutInfo_ShippingInfoCityPlaceholder: String { return self._s[1258]! } + public var PrivacyLastSeenSettings_Title: String { return self._s[1259]! } + public var Conversation_ShareBotLocationConfirmation: String { return self._s[1260]! } + public var PhotoEditor_VignetteTool: String { return self._s[1261]! } + public var Passport_Address_Street1Placeholder: String { return self._s[1262]! } + public var Passport_Language_et: String { return self._s[1263]! } + public var AppUpgrade_Running: String { return self._s[1264]! } + public var Channel_DiscussionGroup_Info: String { return self._s[1266]! } + public var Passport_Language_bg: String { return self._s[1267]! } + public var Stickers_NoStickersFound: String { return self._s[1269]! } public func PUSH_CHANNEL_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1261]!, self._r[1261]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1271]!, self._r[1271]!, [_1, _2]) } - public var Settings_About: String { return self._s[1262]! } + public var Settings_About: String { return self._s[1272]! } public func Channel_AdminLog_MessageRestricted(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1263]!, self._r[1263]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1273]!, self._r[1273]!, [_0, _1, _2]) } - public var KeyCommand_NewMessage: String { return self._s[1265]! } - public var Group_ErrorAddBlocked: String { return self._s[1266]! } + public var KeyCommand_NewMessage: String { return self._s[1275]! } + public var Group_ErrorAddBlocked: String { return self._s[1276]! } public func Message_PaymentSent(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1267]!, self._r[1267]!, [_0]) + return formatWithArgumentRanges(self._s[1277]!, self._r[1277]!, [_0]) } - public var Map_LocationTitle: String { return self._s[1268]! } - public var ReportGroupLocation_Title: String { return self._s[1269]! } - public var CallSettings_UseLessDataLongDescription: String { return self._s[1270]! } - public var Cache_ClearProgress: String { return self._s[1271]! } + public var Map_LocationTitle: String { return self._s[1278]! } + public var ReportGroupLocation_Title: String { return self._s[1279]! } + public var CallSettings_UseLessDataLongDescription: String { return self._s[1280]! } + public var Cache_ClearProgress: String { return self._s[1281]! } public func Channel_Management_ErrorNotMember(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1272]!, self._r[1272]!, [_0]) + return formatWithArgumentRanges(self._s[1282]!, self._r[1282]!, [_0]) } - public var GroupRemoved_AddToGroup: String { return self._s[1273]! } - public var Passport_UpdateRequiredError: String { return self._s[1274]! } + public var GroupRemoved_AddToGroup: String { return self._s[1283]! } + public var Passport_UpdateRequiredError: String { return self._s[1284]! } public func PUSH_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1275]!, self._r[1275]!, [_1]) + return formatWithArgumentRanges(self._s[1285]!, self._r[1285]!, [_1]) } - public var Notifications_PermissionsSuppressWarningText: String { return self._s[1277]! } - public var Passport_Identity_MainPageHelp: String { return self._s[1278]! } - public var Conversation_StatusKickedFromGroup: String { return self._s[1279]! } - public var Passport_Language_ka: String { return self._s[1280]! } - public var Call_Decline: String { return self._s[1281]! } - public var SocksProxySetup_ProxyEnabled: String { return self._s[1282]! } + public var Notifications_PermissionsSuppressWarningText: String { return self._s[1287]! } + public var Passport_Identity_MainPageHelp: String { return self._s[1288]! } + public var Conversation_StatusKickedFromGroup: String { return self._s[1289]! } + public var Passport_Language_ka: String { return self._s[1290]! } + public var Call_Decline: String { return self._s[1291]! } + public var SocksProxySetup_ProxyEnabled: String { return self._s[1292]! } public func AuthCode_Alert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1285]!, self._r[1285]!, [_0]) + return formatWithArgumentRanges(self._s[1295]!, self._r[1295]!, [_0]) } - public var CallFeedback_Send: String { return self._s[1286]! } + public var CallFeedback_Send: String { return self._s[1296]! } public func Channel_AdminLog_MessagePromotedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1287]!, self._r[1287]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1297]!, self._r[1297]!, [_1, _2]) } - public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1288]! } - public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1290]! } - public var Passport_DeletePassport: String { return self._s[1291]! } - public var Appearance_AppIconFilled: String { return self._s[1292]! } - public var Privacy_Calls_P2PAlways: String { return self._s[1293]! } - public var Month_ShortDecember: String { return self._s[1294]! } - public var Channel_AdminLog_CanEditMessages: String { return self._s[1296]! } + public var Passport_Phone_UseTelegramNumberHelp: String { return self._s[1298]! } + public var SettingsSearch_Synonyms_Data_Title: String { return self._s[1300]! } + public var Passport_DeletePassport: String { return self._s[1301]! } + public var Appearance_AppIconFilled: String { return self._s[1302]! } + public var Privacy_Calls_P2PAlways: String { return self._s[1303]! } + public var Month_ShortDecember: String { return self._s[1304]! } + public var Channel_AdminLog_CanEditMessages: String { return self._s[1306]! } public func Contacts_AccessDeniedHelpLandscape(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1297]!, self._r[1297]!, [_0]) + return formatWithArgumentRanges(self._s[1307]!, self._r[1307]!, [_0]) } - public var Channel_Stickers_Searching: String { return self._s[1298]! } - public var Conversation_EncryptedDescription1: String { return self._s[1299]! } - public var Conversation_EncryptedDescription2: String { return self._s[1300]! } - public var PasscodeSettings_PasscodeOptions: String { return self._s[1301]! } - public var Conversation_EncryptedDescription3: String { return self._s[1302]! } - public var PhotoEditor_SharpenTool: String { return self._s[1303]! } + public var Channel_Stickers_Searching: String { return self._s[1308]! } + public var Conversation_EncryptedDescription1: String { return self._s[1309]! } + public var Conversation_EncryptedDescription2: String { return self._s[1310]! } + public var PasscodeSettings_PasscodeOptions: String { return self._s[1311]! } + public var Conversation_EncryptedDescription3: String { return self._s[1312]! } + public var PhotoEditor_SharpenTool: String { return self._s[1313]! } public func Conversation_AddNameToContacts(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1304]!, self._r[1304]!, [_0]) + return formatWithArgumentRanges(self._s[1314]!, self._r[1314]!, [_0]) } - public var Conversation_EncryptedDescription4: String { return self._s[1306]! } - public var Channel_Members_AddMembers: String { return self._s[1307]! } - public var Wallpaper_Search: String { return self._s[1308]! } - public var Weekday_Friday: String { return self._s[1309]! } - public var Privacy_ContactsSync: String { return self._s[1310]! } - public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1311]! } - public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1312]! } + public var Conversation_EncryptedDescription4: String { return self._s[1316]! } + public var Channel_Members_AddMembers: String { return self._s[1317]! } + public var Wallpaper_Search: String { return self._s[1318]! } + public var Weekday_Friday: String { return self._s[1319]! } + public var Privacy_ContactsSync: String { return self._s[1320]! } + public var SettingsSearch_Synonyms_Privacy_Data_ContactsReset: String { return self._s[1321]! } + public var ApplyLanguage_ChangeLanguageAction: String { return self._s[1322]! } public func Channel_Management_RestrictedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1313]!, self._r[1313]!, [_0]) + return formatWithArgumentRanges(self._s[1323]!, self._r[1323]!, [_0]) } - public var GroupInfo_Permissions_Removed: String { return self._s[1314]! } - public var Passport_Identity_GenderMale: String { return self._s[1315]! } + public var GroupInfo_Permissions_Removed: String { return self._s[1324]! } + public var Passport_Identity_GenderMale: String { return self._s[1325]! } public func Call_StatusBar(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1316]!, self._r[1316]!, [_0]) + return formatWithArgumentRanges(self._s[1326]!, self._r[1326]!, [_0]) } - public var Notifications_PermissionsKeepDisabled: String { return self._s[1317]! } - public var Conversation_JumpToDate: String { return self._s[1318]! } - public var Contacts_GlobalSearch: String { return self._s[1319]! } - public var AutoDownloadSettings_ResetHelp: String { return self._s[1320]! } - public var SettingsSearch_Synonyms_FAQ: String { return self._s[1321]! } - public var Profile_MessageLifetime1d: String { return self._s[1322]! } + public var Notifications_PermissionsKeepDisabled: String { return self._s[1327]! } + public var Conversation_JumpToDate: String { return self._s[1328]! } + public var Contacts_GlobalSearch: String { return self._s[1329]! } + public var AutoDownloadSettings_ResetHelp: String { return self._s[1330]! } + public var SettingsSearch_Synonyms_FAQ: String { return self._s[1331]! } + public var Profile_MessageLifetime1d: String { return self._s[1332]! } public func MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1323]!, self._r[1323]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1333]!, self._r[1333]!, [_1, _2]) } - public var StickerPack_BuiltinPackName: String { return self._s[1326]! } + public var StickerPack_BuiltinPackName: String { return self._s[1336]! } public func PUSH_CHAT_MESSAGE_AUDIO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1327]!, self._r[1327]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1337]!, self._r[1337]!, [_1, _2]) } - public var Passport_InfoTitle: String { return self._s[1329]! } - public var Notifications_PermissionsUnreachableText: String { return self._s[1330]! } + public var Passport_InfoTitle: String { return self._s[1339]! } + public var Notifications_PermissionsUnreachableText: String { return self._s[1340]! } public func NetworkUsageSettings_CellularUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1334]!, self._r[1334]!, [_0]) + return formatWithArgumentRanges(self._s[1344]!, self._r[1344]!, [_0]) } public func PUSH_CHAT_MESSAGE_GEO(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1335]!, self._r[1335]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1345]!, self._r[1345]!, [_1, _2]) } - public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1336]! } - public var Profile_BotInfo: String { return self._s[1337]! } - public var Watch_Compose_CreateMessage: String { return self._s[1338]! } - public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1339]! } - public var Month_ShortNovember: String { return self._s[1340]! } - public var Conversation_ScamWarning: String { return self._s[1341]! } - public var Wallpaper_SetCustomBackground: String { return self._s[1342]! } - public var Passport_Identity_TranslationsHelp: String { return self._s[1343]! } - public var NotificationsSound_Chime: String { return self._s[1344]! } - public var Passport_Language_ko: String { return self._s[1346]! } - public var InviteText_URL: String { return self._s[1347]! } - public var TextFormat_Monospace: String { return self._s[1348]! } + public var Passport_Address_TypePassportRegistrationUploadScan: String { return self._s[1346]! } + public var Profile_BotInfo: String { return self._s[1347]! } + public var Watch_Compose_CreateMessage: String { return self._s[1348]! } + public var AutoDownloadSettings_VoiceMessagesInfo: String { return self._s[1349]! } + public var Month_ShortNovember: String { return self._s[1350]! } + public var Conversation_ScamWarning: String { return self._s[1351]! } + public var Wallpaper_SetCustomBackground: String { return self._s[1352]! } + public var Passport_Identity_TranslationsHelp: String { return self._s[1353]! } + public var NotificationsSound_Chime: String { return self._s[1354]! } + public var Passport_Language_ko: String { return self._s[1356]! } + public var InviteText_URL: String { return self._s[1357]! } + public var TextFormat_Monospace: String { return self._s[1358]! } public func Time_PreciseDate_m11(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1349]!, self._r[1349]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1359]!, self._r[1359]!, [_1, _2, _3]) } public func Login_WillSendSms(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1350]!, self._r[1350]!, [_0]) + return formatWithArgumentRanges(self._s[1360]!, self._r[1360]!, [_0]) } public func Watch_Time_ShortWeekdayAt(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1351]!, self._r[1351]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1361]!, self._r[1361]!, [_1, _2]) } - public var Passport_InfoLearnMore: String { return self._s[1353]! } - public var TwoStepAuth_EmailPlaceholder: String { return self._s[1354]! } - public var Passport_Identity_AddIdentityCard: String { return self._s[1355]! } - public var Your_card_has_expired: String { return self._s[1356]! } - public var StickerPacksSettings_StickerPacksSection: String { return self._s[1357]! } - public var GroupInfo_InviteLink_Help: String { return self._s[1358]! } - public var Conversation_Report: String { return self._s[1362]! } - public var Notifications_MessageNotificationsSound: String { return self._s[1363]! } - public var Notification_MessageLifetime1m: String { return self._s[1364]! } - public var Privacy_ContactsTitle: String { return self._s[1365]! } - public var Conversation_ShareMyContactInfo: String { return self._s[1366]! } - public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1367]! } - public var Channel_Members_Title: String { return self._s[1368]! } - public var Map_OpenInWaze: String { return self._s[1369]! } - public var Login_PhoneBannedError: String { return self._s[1370]! } + public var Passport_InfoLearnMore: String { return self._s[1363]! } + public var TwoStepAuth_EmailPlaceholder: String { return self._s[1364]! } + public var Passport_Identity_AddIdentityCard: String { return self._s[1365]! } + public var Your_card_has_expired: String { return self._s[1366]! } + public var StickerPacksSettings_StickerPacksSection: String { return self._s[1367]! } + public var GroupInfo_InviteLink_Help: String { return self._s[1368]! } + public var Conversation_Report: String { return self._s[1372]! } + public var Notifications_MessageNotificationsSound: String { return self._s[1373]! } + public var Notification_MessageLifetime1m: String { return self._s[1374]! } + public var Privacy_ContactsTitle: String { return self._s[1375]! } + public var Conversation_ShareMyContactInfo: String { return self._s[1376]! } + public var ChannelMembers_WhoCanAddMembersAdminsHelp: String { return self._s[1377]! } + public var Channel_Members_Title: String { return self._s[1378]! } + public var Map_OpenInWaze: String { return self._s[1379]! } + public var Login_PhoneBannedError: String { return self._s[1380]! } public func LiveLocationUpdated_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1371]!, self._r[1371]!, [_0]) - } - public var Group_Management_AddModeratorHelp: String { return self._s[1372]! } - public var AutoDownloadSettings_WifiTitle: String { return self._s[1373]! } - public var Common_OK: String { return self._s[1374]! } - public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1375]! } - public var Cache_Music: String { return self._s[1376]! } - public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1377]! } - public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1378]! } - public var TwoStepAuth_HintPlaceholder: String { return self._s[1379]! } - public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1380]!, self._r[1380]!, [_1]) - } - public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1381]!, self._r[1381]!, [_0]) } - public var Watch_MessageView_ViewOnPhone: String { return self._s[1383]! } - public var Privacy_Calls_CustomShareHelp: String { return self._s[1384]! } - public var ChangePhoneNumberNumber_Title: String { return self._s[1386]! } - public var State_ConnectingToProxyInfo: String { return self._s[1387]! } - public var Message_VideoMessage: String { return self._s[1389]! } - public var ChannelInfo_DeleteChannel: String { return self._s[1390]! } - public var ContactInfo_PhoneLabelOther: String { return self._s[1391]! } - public var Channel_EditAdmin_CannotEdit: String { return self._s[1392]! } - public var Passport_DeleteAddressConfirmation: String { return self._s[1393]! } - public var WallpaperPreview_SwipeBottomText: String { return self._s[1394]! } - public var Activity_RecordingAudio: String { return self._s[1395]! } - public var SettingsSearch_Synonyms_Watch: String { return self._s[1396]! } - public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1397]! } + public var Group_Management_AddModeratorHelp: String { return self._s[1382]! } + public var AutoDownloadSettings_WifiTitle: String { return self._s[1383]! } + public var Common_OK: String { return self._s[1384]! } + public var Passport_Address_TypeBankStatementUploadScan: String { return self._s[1385]! } + public var Cache_Music: String { return self._s[1386]! } + public var SettingsSearch_Synonyms_EditProfile_PhoneNumber: String { return self._s[1387]! } + public var PasscodeSettings_UnlockWithTouchId: String { return self._s[1388]! } + public var TwoStepAuth_HintPlaceholder: String { return self._s[1389]! } + public func PUSH_PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1390]!, self._r[1390]!, [_1]) + } + public func Passport_RequestHeader(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1391]!, self._r[1391]!, [_0]) + } + public var Watch_MessageView_ViewOnPhone: String { return self._s[1393]! } + public var Privacy_Calls_CustomShareHelp: String { return self._s[1394]! } + public var ChangePhoneNumberNumber_Title: String { return self._s[1396]! } + public var State_ConnectingToProxyInfo: String { return self._s[1397]! } + public var Message_VideoMessage: String { return self._s[1399]! } + public var ChannelInfo_DeleteChannel: String { return self._s[1400]! } + public var ContactInfo_PhoneLabelOther: String { return self._s[1401]! } + public var Channel_EditAdmin_CannotEdit: String { return self._s[1402]! } + public var Passport_DeleteAddressConfirmation: String { return self._s[1403]! } + public var WallpaperPreview_SwipeBottomText: String { return self._s[1404]! } + public var Activity_RecordingAudio: String { return self._s[1405]! } + public var SettingsSearch_Synonyms_Watch: String { return self._s[1406]! } + public var PasscodeSettings_TryAgainIn1Minute: String { return self._s[1407]! } public func Notification_ChangedGroupName(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1399]!, self._r[1399]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1409]!, self._r[1409]!, [_0, _1]) } public func EmptyGroupInfo_Line1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1403]!, self._r[1403]!, [_0]) + return formatWithArgumentRanges(self._s[1413]!, self._r[1413]!, [_0]) } - public var Conversation_ApplyLocalization: String { return self._s[1404]! } - public var UserInfo_AddPhone: String { return self._s[1405]! } - public var Map_ShareLiveLocationHelp: String { return self._s[1406]! } + public var Conversation_ApplyLocalization: String { return self._s[1414]! } + public var UserInfo_AddPhone: String { return self._s[1415]! } + public var Map_ShareLiveLocationHelp: String { return self._s[1416]! } public func Passport_Identity_NativeNameGenericHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1407]!, self._r[1407]!, [_0]) + return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, [_0]) } - public var Passport_Scans: String { return self._s[1409]! } - public var BlockedUsers_Unblock: String { return self._s[1410]! } + public var Passport_Scans: String { return self._s[1419]! } + public var BlockedUsers_Unblock: String { return self._s[1420]! } public func PUSH_ENCRYPTION_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1411]!, self._r[1411]!, [_1]) + return formatWithArgumentRanges(self._s[1421]!, self._r[1421]!, [_1]) } - public var Channel_Management_LabelCreator: String { return self._s[1412]! } - public var Conversation_ReportSpamAndLeave: String { return self._s[1413]! } - public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1414]! } - public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1415]! } - public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1416]! } + public var Channel_Management_LabelCreator: String { return self._s[1422]! } + public var Conversation_ReportSpamAndLeave: String { return self._s[1423]! } + public var SettingsSearch_Synonyms_EditProfile_Bio: String { return self._s[1424]! } + public var ChatList_UndoArchiveMultipleTitle: String { return self._s[1425]! } + public var Passport_Identity_NativeNameGenericTitle: String { return self._s[1426]! } public func Login_EmailPhoneBody(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1417]!, self._r[1417]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_0, _1, _2]) } - public var Login_PhoneNumberHelp: String { return self._s[1418]! } - public var LastSeen_ALongTimeAgo: String { return self._s[1419]! } - public var Channel_AdminLog_CanPinMessages: String { return self._s[1420]! } - public var ChannelIntro_CreateChannel: String { return self._s[1421]! } - public var Conversation_UnreadMessages: String { return self._s[1422]! } - public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1423]! } - public var Channel_AdminLog_EmptyText: String { return self._s[1424]! } - public var Notification_GroupActivated: String { return self._s[1425]! } - public var NotificationSettings_ContactJoinedInfo: String { return self._s[1426]! } + public var Login_PhoneNumberHelp: String { return self._s[1428]! } + public var LastSeen_ALongTimeAgo: String { return self._s[1429]! } + public var Channel_AdminLog_CanPinMessages: String { return self._s[1430]! } + public var ChannelIntro_CreateChannel: String { return self._s[1431]! } + public var Conversation_UnreadMessages: String { return self._s[1432]! } + public var SettingsSearch_Synonyms_Stickers_ArchivedPacks: String { return self._s[1433]! } + public var Channel_AdminLog_EmptyText: String { return self._s[1434]! } + public var Notification_GroupActivated: String { return self._s[1435]! } + public var NotificationSettings_ContactJoinedInfo: String { return self._s[1436]! } public func Notification_PinnedContactMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1427]!, self._r[1427]!, [_0]) + return formatWithArgumentRanges(self._s[1437]!, self._r[1437]!, [_0]) } public func DownloadingStatus(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1428]!, self._r[1428]!, [_0, _1]) + return formatWithArgumentRanges(self._s[1438]!, self._r[1438]!, [_0, _1]) } - public var GroupInfo_ConvertToSupergroup: String { return self._s[1430]! } + public var GroupInfo_ConvertToSupergroup: String { return self._s[1440]! } public func PrivacyPolicy_AgeVerificationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1431]!, self._r[1431]!, [_0]) + return formatWithArgumentRanges(self._s[1441]!, self._r[1441]!, [_0]) } - public var Undo_DeletedChannel: String { return self._s[1432]! } - public var CallFeedback_AddComment: String { return self._s[1433]! } + public var Undo_DeletedChannel: String { return self._s[1442]! } + public var CallFeedback_AddComment: String { return self._s[1443]! } public func Conversation_OpenBotLinkAllowMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1434]!, self._r[1434]!, [_0]) + return formatWithArgumentRanges(self._s[1444]!, self._r[1444]!, [_0]) } - public var Document_TargetConfirmationFormat: String { return self._s[1435]! } + public var Document_TargetConfirmationFormat: String { return self._s[1445]! } public func Call_StatusOngoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1436]!, self._r[1436]!, [_0]) + return formatWithArgumentRanges(self._s[1446]!, self._r[1446]!, [_0]) } - public var LogoutOptions_SetPasscodeTitle: String { return self._s[1437]! } + public var LogoutOptions_SetPasscodeTitle: String { return self._s[1447]! } public func PUSH_CHAT_MESSAGE_GAME_SCORE(_ _1: String, _ _2: String, _ _3: String, _ _4: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1438]!, self._r[1438]!, [_1, _2, _3, _4]) + return formatWithArgumentRanges(self._s[1448]!, self._r[1448]!, [_1, _2, _3, _4]) } - public var Contacts_SortByName: String { return self._s[1439]! } - public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1440]! } + public var Contacts_SortByName: String { return self._s[1449]! } + public var SettingsSearch_Synonyms_Privacy_Forwards: String { return self._s[1450]! } public func CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1442]!, self._r[1442]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1452]!, self._r[1452]!, [_1, _2, _3]) } - public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1443]! } - public var Conversation_ClearSelfHistory: String { return self._s[1444]! } - public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1445]! } - public var PasscodeSettings_DoNotMatch: String { return self._s[1446]! } - public var Stickers_SuggestNone: String { return self._s[1447]! } - public var ChatSettings_Cache: String { return self._s[1448]! } - public var Settings_SaveIncomingPhotos: String { return self._s[1449]! } - public var Media_ShareThisPhoto: String { return self._s[1450]! } - public var InfoPlist_NSContactsUsageDescription: String { return self._s[1451]! } - public var Conversation_ContextMenuCopyLink: String { return self._s[1452]! } - public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1453]! } - public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1454]! } - public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1455]! } - public var Permissions_CellularDataTitle_v0: String { return self._s[1456]! } - public var WallpaperSearch_ColorWhite: String { return self._s[1458]! } - public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1459]! } - public var Conversation_ErrorInaccessibleMessage: String { return self._s[1460]! } - public var Map_OpenIn: String { return self._s[1461]! } + public var Notification_Exceptions_RemoveFromExceptions: String { return self._s[1453]! } + public var Conversation_ClearSelfHistory: String { return self._s[1454]! } + public var Checkout_NewCard_PostcodePlaceholder: String { return self._s[1455]! } + public var PasscodeSettings_DoNotMatch: String { return self._s[1456]! } + public var Stickers_SuggestNone: String { return self._s[1457]! } + public var ChatSettings_Cache: String { return self._s[1458]! } + public var Settings_SaveIncomingPhotos: String { return self._s[1459]! } + public var Media_ShareThisPhoto: String { return self._s[1460]! } + public var InfoPlist_NSContactsUsageDescription: String { return self._s[1461]! } + public var Conversation_ContextMenuCopyLink: String { return self._s[1462]! } + public var PrivacyPolicy_AgeVerificationTitle: String { return self._s[1463]! } + public var SettingsSearch_Synonyms_Stickers_Masks: String { return self._s[1464]! } + public var TwoStepAuth_SetupPasswordEnterPasswordNew: String { return self._s[1465]! } + public var Permissions_CellularDataTitle_v0: String { return self._s[1466]! } + public var WallpaperSearch_ColorWhite: String { return self._s[1468]! } + public var Channel_AdminLog_DefaultRestrictionsUpdated: String { return self._s[1469]! } + public var Conversation_ErrorInaccessibleMessage: String { return self._s[1470]! } + public var Map_OpenIn: String { return self._s[1471]! } public func PUSH_PHONE_CALL_MISSED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1464]!, self._r[1464]!, [_1]) + return formatWithArgumentRanges(self._s[1474]!, self._r[1474]!, [_1]) } public func ChannelInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1465]!, self._r[1465]!, [_0]) + return formatWithArgumentRanges(self._s[1475]!, self._r[1475]!, [_0]) } - public var MessagePoll_LabelClosed: String { return self._s[1466]! } - public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1468]! } - public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1469]! } - public var UserInfo_FirstNamePlaceholder: String { return self._s[1470]! } - public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1471]! } - public var Login_SelectCountry_Title: String { return self._s[1472]! } - public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1473]! } + public var MessagePoll_LabelClosed: String { return self._s[1476]! } + public var GroupPermission_PermissionGloballyDisabled: String { return self._s[1478]! } + public var Passport_Identity_MiddleNamePlaceholder: String { return self._s[1479]! } + public var UserInfo_FirstNamePlaceholder: String { return self._s[1480]! } + public var PrivacyLastSeenSettings_WhoCanSeeMyTimestamp: String { return self._s[1481]! } + public var Login_SelectCountry_Title: String { return self._s[1482]! } + public var Channel_EditAdmin_PermissionBanUsers: String { return self._s[1483]! } public func Conversation_OpenBotLinkLogin(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1474]!, self._r[1474]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1484]!, self._r[1484]!, [_1, _2]) } - public var Channel_AdminLog_ChangeInfo: String { return self._s[1475]! } - public var Watch_Suggestion_BRB: String { return self._s[1476]! } - public var Passport_Identity_EditIdentityCard: String { return self._s[1477]! } - public var Contacts_PermissionsTitle: String { return self._s[1478]! } - public var Conversation_RestrictedInline: String { return self._s[1479]! } - public var StickerPack_ViewPack: String { return self._s[1481]! } + public var Channel_AdminLog_ChangeInfo: String { return self._s[1485]! } + public var Watch_Suggestion_BRB: String { return self._s[1486]! } + public var Passport_Identity_EditIdentityCard: String { return self._s[1487]! } + public var Contacts_PermissionsTitle: String { return self._s[1488]! } + public var Conversation_RestrictedInline: String { return self._s[1489]! } + public var StickerPack_ViewPack: String { return self._s[1491]! } public func Update_AppVersion(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1482]!, self._r[1482]!, [_0]) + return formatWithArgumentRanges(self._s[1492]!, self._r[1492]!, [_0]) } - public var Compose_NewChannel: String { return self._s[1484]! } - public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1487]! } - public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1489]! } - public var Channel_Info_Stickers: String { return self._s[1490]! } - public var AutoNightTheme_PreferredTheme: String { return self._s[1491]! } - public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1492]! } - public var Passport_DeletePersonalDetails: String { return self._s[1493]! } - public var LogoutOptions_AddAccountTitle: String { return self._s[1494]! } - public var Channel_DiscussionGroupInfo: String { return self._s[1495]! } - public var Conversation_SearchNoResults: String { return self._s[1497]! } - public var MessagePoll_LabelAnonymous: String { return self._s[1498]! } - public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1499]! } - public var Login_Code: String { return self._s[1500]! } - public var Watch_Suggestion_WhatsUp: String { return self._s[1501]! } - public var Weekday_ShortThursday: String { return self._s[1502]! } - public var Resolve_ErrorNotFound: String { return self._s[1504]! } - public var LastSeen_Offline: String { return self._s[1505]! } - public var PeopleNearby_NoMembers: String { return self._s[1506]! } - public var GroupPermission_AddMembersNotAvailable: String { return self._s[1507]! } - public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1508]! } - public var GroupInfo_Title: String { return self._s[1509]! } - public var NotificationsSound_Note: String { return self._s[1510]! } - public var Conversation_EditingMessagePanelTitle: String { return self._s[1511]! } - public var Watch_Message_Poll: String { return self._s[1512]! } - public var Privacy_Calls: String { return self._s[1513]! } - public var Month_ShortAugust: String { return self._s[1514]! } - public var TwoStepAuth_SetPasswordHelp: String { return self._s[1515]! } - public var Notifications_Reset: String { return self._s[1516]! } - public var Conversation_Pin: String { return self._s[1517]! } - public var Passport_Language_lv: String { return self._s[1518]! } - public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1519]! } - public var BlockedUsers_Info: String { return self._s[1520]! } - public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1522]! } - public var Watch_Conversation_Unblock: String { return self._s[1524]! } + public var Compose_NewChannel: String { return self._s[1494]! } + public var ChatSettings_AutoDownloadSettings_TypePhoto: String { return self._s[1497]! } + public var Conversation_ReportSpamGroupConfirmation: String { return self._s[1499]! } + public var Channel_Info_Stickers: String { return self._s[1500]! } + public var AutoNightTheme_PreferredTheme: String { return self._s[1501]! } + public var PrivacyPolicy_AgeVerificationAgree: String { return self._s[1502]! } + public var Passport_DeletePersonalDetails: String { return self._s[1503]! } + public var LogoutOptions_AddAccountTitle: String { return self._s[1504]! } + public var Channel_DiscussionGroupInfo: String { return self._s[1505]! } + public var Group_EditAdmin_RankOwnerPlaceholder: String { return self._s[1506]! } + public var Conversation_SearchNoResults: String { return self._s[1508]! } + public var MessagePoll_LabelAnonymous: String { return self._s[1509]! } + public var Channel_Members_AddAdminErrorNotAMember: String { return self._s[1510]! } + public var Login_Code: String { return self._s[1511]! } + public var Watch_Suggestion_WhatsUp: String { return self._s[1512]! } + public var Weekday_ShortThursday: String { return self._s[1513]! } + public var Resolve_ErrorNotFound: String { return self._s[1515]! } + public var LastSeen_Offline: String { return self._s[1516]! } + public var PeopleNearby_NoMembers: String { return self._s[1517]! } + public var GroupPermission_AddMembersNotAvailable: String { return self._s[1518]! } + public var Privacy_Calls_AlwaysAllow_Title: String { return self._s[1519]! } + public var GroupInfo_Title: String { return self._s[1520]! } + public var NotificationsSound_Note: String { return self._s[1521]! } + public var Conversation_EditingMessagePanelTitle: String { return self._s[1522]! } + public var Watch_Message_Poll: String { return self._s[1523]! } + public var Privacy_Calls: String { return self._s[1524]! } + public var Month_ShortAugust: String { return self._s[1525]! } + public var TwoStepAuth_SetPasswordHelp: String { return self._s[1526]! } + public var Notifications_Reset: String { return self._s[1527]! } + public var Conversation_Pin: String { return self._s[1528]! } + public var Passport_Language_lv: String { return self._s[1529]! } + public var Permissions_PeopleNearbyAllowInSettings_v0: String { return self._s[1530]! } + public var BlockedUsers_Info: String { return self._s[1531]! } + public var SettingsSearch_Synonyms_Data_AutoplayVideos: String { return self._s[1533]! } + public var Watch_Conversation_Unblock: String { return self._s[1535]! } public func Time_MonthOfYear_m9(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1525]!, self._r[1525]!, [_0]) + return formatWithArgumentRanges(self._s[1536]!, self._r[1536]!, [_0]) } - public var CloudStorage_Title: String { return self._s[1526]! } - public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1527]! } + public var CloudStorage_Title: String { return self._s[1537]! } + public var GroupInfo_DeleteAndExitConfirmation: String { return self._s[1538]! } public func NetworkUsageSettings_WifiUsageSince(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1528]!, self._r[1528]!, [_0]) + return formatWithArgumentRanges(self._s[1539]!, self._r[1539]!, [_0]) } - public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1529]! } - public var Watch_Suggestion_OnMyWay: String { return self._s[1530]! } - public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1531]! } - public var Passport_Address_EditBankStatement: String { return self._s[1532]! } + public var Channel_AdminLogFilter_AdminsTitle: String { return self._s[1540]! } + public var Watch_Suggestion_OnMyWay: String { return self._s[1541]! } + public var TwoStepAuth_RecoveryEmailTitle: String { return self._s[1542]! } + public var Passport_Address_EditBankStatement: String { return self._s[1543]! } public func Channel_AdminLog_MessageChangedUnlinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1533]!, self._r[1533]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1544]!, self._r[1544]!, [_1, _2]) } - public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1534]! } - public var ShareMenu_Comment: String { return self._s[1535]! } - public var Permissions_ContactsTitle_v0: String { return self._s[1536]! } - public var Notifications_PermissionsTitle: String { return self._s[1537]! } - public var GroupPermission_NoSendLinks: String { return self._s[1538]! } - public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1539]! } - public var Settings_Support: String { return self._s[1540]! } - public var Notifications_ChannelNotificationsSound: String { return self._s[1541]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1542]! } - public var Privacy_Forwards_Preview: String { return self._s[1543]! } - public var GroupPermission_ApplyAlertAction: String { return self._s[1544]! } - public var Watch_Stickers_StickerPacks: String { return self._s[1545]! } - public var Common_Select: String { return self._s[1547]! } - public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1548]! } - public var WallpaperSearch_ColorGray: String { return self._s[1550]! } - public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1551]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1552]! } - public var Appearance_PreviewReplyAuthor: String { return self._s[1553]! } - public var TwoStepAuth_RecoveryTitle: String { return self._s[1554]! } - public var Widget_AuthRequired: String { return self._s[1555]! } - public var Camera_FlashOn: String { return self._s[1556]! } - public var Channel_Stickers_NotFoundHelp: String { return self._s[1557]! } - public var Watch_Suggestion_OK: String { return self._s[1558]! } + public var ChatSettings_DownloadInBackgroundInfo: String { return self._s[1545]! } + public var ShareMenu_Comment: String { return self._s[1546]! } + public var Permissions_ContactsTitle_v0: String { return self._s[1547]! } + public var Notifications_PermissionsTitle: String { return self._s[1548]! } + public var GroupPermission_NoSendLinks: String { return self._s[1549]! } + public var Privacy_Forwards_NeverAllow_Title: String { return self._s[1550]! } + public var Settings_Support: String { return self._s[1551]! } + public var Notifications_ChannelNotificationsSound: String { return self._s[1552]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadReset: String { return self._s[1553]! } + public var Privacy_Forwards_Preview: String { return self._s[1554]! } + public var GroupPermission_ApplyAlertAction: String { return self._s[1555]! } + public var Watch_Stickers_StickerPacks: String { return self._s[1556]! } + public var Common_Select: String { return self._s[1558]! } + public var CheckoutInfo_ErrorEmailInvalid: String { return self._s[1559]! } + public var WallpaperSearch_ColorGray: String { return self._s[1561]! } + public var ChatAdmins_AllMembersAreAdminsOffHelp: String { return self._s[1562]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5hours: String { return self._s[1563]! } + public var Appearance_PreviewReplyAuthor: String { return self._s[1564]! } + public var TwoStepAuth_RecoveryTitle: String { return self._s[1565]! } + public var Widget_AuthRequired: String { return self._s[1566]! } + public var Camera_FlashOn: String { return self._s[1567]! } + public var Channel_Stickers_NotFoundHelp: String { return self._s[1568]! } + public var Watch_Suggestion_OK: String { return self._s[1569]! } public func Username_LinkHint(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1560]!, self._r[1560]!, [_0]) + return formatWithArgumentRanges(self._s[1571]!, self._r[1571]!, [_0]) } public func Notification_PinnedLiveLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1562]!, self._r[1562]!, [_0]) + return formatWithArgumentRanges(self._s[1573]!, self._r[1573]!, [_0]) } - public var TextFormat_Strikethrough: String { return self._s[1563]! } - public var DialogList_AdLabel: String { return self._s[1564]! } - public var WatchRemote_NotificationText: String { return self._s[1565]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1566]! } - public var Conversation_ReportSpam: String { return self._s[1567]! } - public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1568]! } - public var Settings_LogoutConfirmationTitle: String { return self._s[1570]! } - public var PhoneLabel_Title: String { return self._s[1571]! } - public var Passport_Address_EditRentalAgreement: String { return self._s[1572]! } - public var Settings_ChangePhoneNumber: String { return self._s[1573]! } - public var Notifications_ExceptionsTitle: String { return self._s[1574]! } - public var Notifications_AlertTones: String { return self._s[1575]! } - public var Call_ReportIncludeLogDescription: String { return self._s[1576]! } - public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1577]! } - public var AutoDownloadSettings_PrivateChats: String { return self._s[1578]! } - public var TwoStepAuth_AddHintTitle: String { return self._s[1580]! } - public var ReportPeer_ReasonOther: String { return self._s[1581]! } - public var KeyCommand_ScrollDown: String { return self._s[1583]! } + public var TextFormat_Strikethrough: String { return self._s[1574]! } + public var DialogList_AdLabel: String { return self._s[1575]! } + public var WatchRemote_NotificationText: String { return self._s[1576]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsAlert: String { return self._s[1577]! } + public var Conversation_ReportSpam: String { return self._s[1578]! } + public var SettingsSearch_Synonyms_Privacy_Data_TopPeers: String { return self._s[1579]! } + public var Settings_LogoutConfirmationTitle: String { return self._s[1581]! } + public var PhoneLabel_Title: String { return self._s[1582]! } + public var Passport_Address_EditRentalAgreement: String { return self._s[1583]! } + public var Settings_ChangePhoneNumber: String { return self._s[1584]! } + public var Notifications_ExceptionsTitle: String { return self._s[1585]! } + public var Notifications_AlertTones: String { return self._s[1586]! } + public var Call_ReportIncludeLogDescription: String { return self._s[1587]! } + public var SettingsSearch_Synonyms_Notifications_ResetAllNotifications: String { return self._s[1588]! } + public var AutoDownloadSettings_PrivateChats: String { return self._s[1589]! } + public var TwoStepAuth_AddHintTitle: String { return self._s[1591]! } + public var ReportPeer_ReasonOther: String { return self._s[1592]! } + public var KeyCommand_ScrollDown: String { return self._s[1594]! } public func Login_BannedPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1584]!, self._r[1584]!, [_0]) + return formatWithArgumentRanges(self._s[1595]!, self._r[1595]!, [_0]) } - public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1585]! } - public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1586]! } - public var AuthSessions_LogOut: String { return self._s[1587]! } - public var Passport_Identity_TypeInternalPassport: String { return self._s[1588]! } - public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1589]! } - public var Passport_Phone_Title: String { return self._s[1590]! } - public var Settings_PhoneNumber: String { return self._s[1591]! } - public var NotificationsSound_Alert: String { return self._s[1592]! } - public var WebSearch_SearchNoResults: String { return self._s[1593]! } - public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1595]! } - public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1596]! } - public var SettingsSearch_Synonyms_Passport: String { return self._s[1597]! } - public var PhotoEditor_CurvesTool: String { return self._s[1598]! } - public var Checkout_PaymentMethod: String { return self._s[1600]! } + public var NetworkUsageSettings_MediaVideoDataSection: String { return self._s[1596]! } + public var ChannelInfo_DeleteGroupConfirmation: String { return self._s[1597]! } + public var AuthSessions_LogOut: String { return self._s[1598]! } + public var Passport_Identity_TypeInternalPassport: String { return self._s[1599]! } + public var ChatSettings_AutoDownloadVoiceMessages: String { return self._s[1600]! } + public var Passport_Phone_Title: String { return self._s[1601]! } + public var Settings_PhoneNumber: String { return self._s[1602]! } + public var NotificationsSound_Alert: String { return self._s[1603]! } + public var WebSearch_SearchNoResults: String { return self._s[1604]! } + public var Privacy_ProfilePhoto_AlwaysShareWith_Title: String { return self._s[1606]! } + public var LogoutOptions_AlternativeOptionsSection: String { return self._s[1607]! } + public var SettingsSearch_Synonyms_Passport: String { return self._s[1608]! } + public var PhotoEditor_CurvesTool: String { return self._s[1609]! } + public var Checkout_PaymentMethod: String { return self._s[1611]! } public func PUSH_CHAT_ADD_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1601]!, self._r[1601]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1612]!, self._r[1612]!, [_1, _2]) } - public var Contacts_AccessDeniedError: String { return self._s[1602]! } - public var Camera_PhotoMode: String { return self._s[1605]! } - public var Passport_Address_AddUtilityBill: String { return self._s[1606]! } - public var CallSettings_OnMobile: String { return self._s[1607]! } - public var Tour_Text2: String { return self._s[1608]! } + public var Contacts_AccessDeniedError: String { return self._s[1613]! } + public var Camera_PhotoMode: String { return self._s[1616]! } + public var Passport_Address_AddUtilityBill: String { return self._s[1617]! } + public var CallSettings_OnMobile: String { return self._s[1618]! } + public var Tour_Text2: String { return self._s[1619]! } public func PUSH_CHAT_MESSAGE_ROUND(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1609]!, self._r[1609]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1620]!, self._r[1620]!, [_1, _2]) } - public var DialogList_EncryptionProcessing: String { return self._s[1611]! } - public var Permissions_Skip: String { return self._s[1612]! } - public var SecretImage_Title: String { return self._s[1613]! } - public var Watch_MessageView_Title: String { return self._s[1614]! } - public var Channel_DiscussionGroupAdd: String { return self._s[1615]! } - public var AttachmentMenu_Poll: String { return self._s[1616]! } + public var DialogList_EncryptionProcessing: String { return self._s[1622]! } + public var Permissions_Skip: String { return self._s[1623]! } + public var SecretImage_Title: String { return self._s[1624]! } + public var Watch_MessageView_Title: String { return self._s[1625]! } + public var Channel_DiscussionGroupAdd: String { return self._s[1626]! } + public var AttachmentMenu_Poll: String { return self._s[1627]! } public func Notification_GroupInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1617]!, self._r[1617]!, [_0]) + return formatWithArgumentRanges(self._s[1628]!, self._r[1628]!, [_0]) } public func Channel_DiscussionGroup_PrivateChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1618]!, self._r[1618]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1629]!, self._r[1629]!, [_1, _2]) } - public var Notification_CallCanceled: String { return self._s[1619]! } - public var WallpaperPreview_Title: String { return self._s[1620]! } - public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1621]! } - public var Settings_ProxyConnecting: String { return self._s[1622]! } - public var Settings_CheckPhoneNumberText: String { return self._s[1624]! } - public var Profile_MessageLifetime5s: String { return self._s[1625]! } - public var Username_InvalidCharacters: String { return self._s[1626]! } - public var WallpaperPreview_CropBottomText: String { return self._s[1627]! } - public var AutoDownloadSettings_LimitBySize: String { return self._s[1628]! } - public var Settings_AddAccount: String { return self._s[1629]! } - public var Notification_CreatedChannel: String { return self._s[1632]! } + public var Notification_CallCanceled: String { return self._s[1630]! } + public var WallpaperPreview_Title: String { return self._s[1631]! } + public var Privacy_PaymentsClear_PaymentInfo: String { return self._s[1632]! } + public var Settings_ProxyConnecting: String { return self._s[1633]! } + public var Settings_CheckPhoneNumberText: String { return self._s[1635]! } + public var Profile_MessageLifetime5s: String { return self._s[1636]! } + public var Username_InvalidCharacters: String { return self._s[1637]! } + public var WallpaperPreview_CropBottomText: String { return self._s[1638]! } + public var AutoDownloadSettings_LimitBySize: String { return self._s[1639]! } + public var Settings_AddAccount: String { return self._s[1640]! } + public var Notification_CreatedChannel: String { return self._s[1643]! } public func PUSH_CHAT_DELETE_MEMBER(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1633]!, self._r[1633]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[1644]!, self._r[1644]!, [_1, _2, _3]) } - public var Passcode_AppLockedAlert: String { return self._s[1635]! } - public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1636]! } - public var Contacts_TopSection: String { return self._s[1637]! } + public var Passcode_AppLockedAlert: String { return self._s[1646]! } + public var StickerPacksSettings_AnimatedStickersInfo: String { return self._s[1647]! } + public var Contacts_TopSection: String { return self._s[1648]! } public func Time_MonthOfYear_m6(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1638]!, self._r[1638]!, [_0]) + return formatWithArgumentRanges(self._s[1649]!, self._r[1649]!, [_0]) } - public var ReportPeer_ReasonSpam: String { return self._s[1639]! } - public var UserInfo_TapToCall: String { return self._s[1640]! } - public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1642]! } - public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1643]! } - public var Common_Search: String { return self._s[1644]! } + public var ReportPeer_ReasonSpam: String { return self._s[1650]! } + public var UserInfo_TapToCall: String { return self._s[1651]! } + public var Conversation_ForwardAuthorHiddenTooltip: String { return self._s[1653]! } + public var AutoDownloadSettings_DataUsageCustom: String { return self._s[1654]! } + public var Common_Search: String { return self._s[1655]! } public func Channel_AdminLog_MessageChangedGroupGeoLocation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1645]!, self._r[1645]!, [_0]) + return formatWithArgumentRanges(self._s[1656]!, self._r[1656]!, [_0]) } - public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1646]! } - public var Message_InvoiceLabel: String { return self._s[1647]! } - public var Conversation_InputTextPlaceholder: String { return self._s[1648]! } - public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1649]! } + public var AuthSessions_IncompleteAttemptsInfo: String { return self._s[1657]! } + public var Message_InvoiceLabel: String { return self._s[1658]! } + public var Conversation_InputTextPlaceholder: String { return self._s[1659]! } + public var NetworkUsageSettings_MediaImageDataSection: String { return self._s[1660]! } public func Passport_Address_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1650]!, self._r[1650]!, [_0]) + return formatWithArgumentRanges(self._s[1661]!, self._r[1661]!, [_0]) } - public var Conversation_Info: String { return self._s[1651]! } - public var Login_InfoDeletePhoto: String { return self._s[1652]! } - public var Passport_Language_vi: String { return self._s[1654]! } - public var UserInfo_ScamUserWarning: String { return self._s[1655]! } - public var Conversation_Search: String { return self._s[1656]! } - public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1657]! } - public var ReportPeer_ReasonPornography: String { return self._s[1658]! } - public var AutoDownloadSettings_PhotosTitle: String { return self._s[1659]! } - public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1660]! } - public var Map_LiveLocationGroupDescription: String { return self._s[1661]! } - public var Channel_Setup_TypeHeader: String { return self._s[1662]! } - public var AuthSessions_LoggedIn: String { return self._s[1663]! } - public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1664]! } - public var Login_SmsRequestState3: String { return self._s[1665]! } - public var Passport_Address_EditUtilityBill: String { return self._s[1666]! } - public var Appearance_ReduceMotionInfo: String { return self._s[1667]! } - public var Join_ChannelsTooMuch: String { return self._s[1668]! } - public var Channel_Edit_LinkItem: String { return self._s[1669]! } - public var Privacy_Calls_P2PNever: String { return self._s[1670]! } - public var Conversation_AddToReadingList: String { return self._s[1672]! } - public var Message_Animation: String { return self._s[1673]! } - public var Conversation_DefaultRestrictedMedia: String { return self._s[1674]! } - public var Map_Unknown: String { return self._s[1675]! } - public var AutoDownloadSettings_LastDelimeter: String { return self._s[1676]! } + public var Conversation_Info: String { return self._s[1662]! } + public var Login_InfoDeletePhoto: String { return self._s[1663]! } + public var Passport_Language_vi: String { return self._s[1665]! } + public var UserInfo_ScamUserWarning: String { return self._s[1666]! } + public var Conversation_Search: String { return self._s[1667]! } + public var DialogList_DeleteBotConversationConfirmation: String { return self._s[1668]! } + public var ReportPeer_ReasonPornography: String { return self._s[1669]! } + public var AutoDownloadSettings_PhotosTitle: String { return self._s[1670]! } + public var Conversation_SendMessageErrorGroupRestricted: String { return self._s[1671]! } + public var Map_LiveLocationGroupDescription: String { return self._s[1672]! } + public var Channel_Setup_TypeHeader: String { return self._s[1673]! } + public var AuthSessions_LoggedIn: String { return self._s[1674]! } + public var Privacy_Forwards_AlwaysAllow_Title: String { return self._s[1675]! } + public var Login_SmsRequestState3: String { return self._s[1676]! } + public var Passport_Address_EditUtilityBill: String { return self._s[1677]! } + public var Appearance_ReduceMotionInfo: String { return self._s[1678]! } + public var Join_ChannelsTooMuch: String { return self._s[1679]! } + public var Channel_Edit_LinkItem: String { return self._s[1680]! } + public var Privacy_Calls_P2PNever: String { return self._s[1681]! } + public var Conversation_AddToReadingList: String { return self._s[1683]! } + public var Message_Animation: String { return self._s[1684]! } + public var Conversation_DefaultRestrictedMedia: String { return self._s[1685]! } + public var Map_Unknown: String { return self._s[1686]! } + public var AutoDownloadSettings_LastDelimeter: String { return self._s[1687]! } public func PUSH_PINNED_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1677]!, self._r[1677]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1688]!, self._r[1688]!, [_1, _2]) } public func Passport_FieldOneOf_Or(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1678]!, self._r[1678]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1689]!, self._r[1689]!, [_1, _2]) } - public var Call_StatusRequesting: String { return self._s[1679]! } - public var Conversation_SecretChatContextBotAlert: String { return self._s[1680]! } - public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1681]! } + public var Call_StatusRequesting: String { return self._s[1690]! } + public var Conversation_SecretChatContextBotAlert: String { return self._s[1691]! } + public var SocksProxySetup_ProxyStatusChecking: String { return self._s[1692]! } public func PUSH_CHAT_MESSAGE_DOC(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1682]!, self._r[1682]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1693]!, self._r[1693]!, [_1, _2]) } public func Notification_PinnedLocationMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1683]!, self._r[1683]!, [_0]) + return formatWithArgumentRanges(self._s[1694]!, self._r[1694]!, [_0]) } - public var Update_Skip: String { return self._s[1684]! } - public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1685]! } - public var Message_PinnedPollMessage: String { return self._s[1686]! } - public var BlockedUsers_Title: String { return self._s[1687]! } + public var Update_Skip: String { return self._s[1695]! } + public var Group_Username_RemoveExistingUsernamesInfo: String { return self._s[1696]! } + public var Message_PinnedPollMessage: String { return self._s[1697]! } + public var BlockedUsers_Title: String { return self._s[1698]! } public func PUSH_CHANNEL_MESSAGE_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1688]!, self._r[1688]!, [_1]) + return formatWithArgumentRanges(self._s[1699]!, self._r[1699]!, [_1]) } - public var Username_CheckingUsername: String { return self._s[1689]! } - public var NotificationsSound_Bell: String { return self._s[1690]! } - public var Conversation_SendMessageErrorFlood: String { return self._s[1691]! } - public var Weekday_Monday: String { return self._s[1692]! } - public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1693]! } - public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1694]! } - public var ChatSettings_Groups: String { return self._s[1695]! } - public var Your_card_was_declined: String { return self._s[1696]! } - public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1698]! } - public var ChatList_Unmute: String { return self._s[1699]! } - public var PhotoEditor_CurvesAll: String { return self._s[1700]! } - public var Weekday_ShortTuesday: String { return self._s[1701]! } - public var DialogList_Read: String { return self._s[1702]! } - public var Appearance_AppIconClassic: String { return self._s[1703]! } - public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1704]! } - public var Passport_Identity_Gender: String { return self._s[1705]! } + public var Username_CheckingUsername: String { return self._s[1700]! } + public var NotificationsSound_Bell: String { return self._s[1701]! } + public var Conversation_SendMessageErrorFlood: String { return self._s[1702]! } + public var Weekday_Monday: String { return self._s[1703]! } + public var SettingsSearch_Synonyms_Notifications_DisplayNamesOnLockScreen: String { return self._s[1704]! } + public var ChannelMembers_ChannelAdminsTitle: String { return self._s[1705]! } + public var ChatSettings_Groups: String { return self._s[1706]! } + public var Your_card_was_declined: String { return self._s[1707]! } + public var TwoStepAuth_EnterPasswordHelp: String { return self._s[1709]! } + public var ChatList_Unmute: String { return self._s[1710]! } + public var PhotoEditor_CurvesAll: String { return self._s[1711]! } + public var Weekday_ShortTuesday: String { return self._s[1712]! } + public var DialogList_Read: String { return self._s[1713]! } + public var Appearance_AppIconClassic: String { return self._s[1714]! } + public var ChannelMembers_WhoCanAddMembers_AllMembers: String { return self._s[1715]! } + public var Passport_Identity_Gender: String { return self._s[1716]! } public func Target_ShareGameConfirmationPrivate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1706]!, self._r[1706]!, [_0]) + return formatWithArgumentRanges(self._s[1717]!, self._r[1717]!, [_0]) } - public var Target_SelectGroup: String { return self._s[1707]! } + public var Target_SelectGroup: String { return self._s[1718]! } public func DialogList_EncryptedChatStartedIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1709]!, self._r[1709]!, [_0]) + return formatWithArgumentRanges(self._s[1720]!, self._r[1720]!, [_0]) } - public var Passport_Language_en: String { return self._s[1710]! } - public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1711]! } - public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1712]! } - public var Login_CancelPhoneVerificationContinue: String { return self._s[1713]! } - public var Checkout_NewCard_PaymentCard: String { return self._s[1715]! } - public var Login_InfoHelp: String { return self._s[1716]! } - public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1717]! } - public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1718]! } + public var Passport_Language_en: String { return self._s[1721]! } + public var AutoDownloadSettings_AutodownloadPhotos: String { return self._s[1722]! } + public var Channel_Username_CreatePublicLinkHelp: String { return self._s[1723]! } + public var Login_CancelPhoneVerificationContinue: String { return self._s[1724]! } + public var Checkout_NewCard_PaymentCard: String { return self._s[1726]! } + public var Login_InfoHelp: String { return self._s[1727]! } + public var Contacts_PermissionsSuppressWarningTitle: String { return self._s[1728]! } + public var SettingsSearch_Synonyms_Stickers_FeaturedPacks: String { return self._s[1729]! } public func Channel_AdminLog_MessageChangedLinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1719]!, self._r[1719]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1730]!, self._r[1730]!, [_1, _2]) } - public var SocksProxySetup_AddProxy: String { return self._s[1722]! } - public var CreatePoll_Title: String { return self._s[1723]! } - public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1724]! } - public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1725]! } - public var UserInfo_GroupsInCommon: String { return self._s[1726]! } - public var Call_AudioRouteHide: String { return self._s[1727]! } - public var ContactInfo_PhoneLabelMobile: String { return self._s[1729]! } + public var SocksProxySetup_AddProxy: String { return self._s[1733]! } + public var CreatePoll_Title: String { return self._s[1734]! } + public var SettingsSearch_Synonyms_Privacy_Data_SecretChatLinkPreview: String { return self._s[1735]! } + public var PasscodeSettings_SimplePasscodeHelp: String { return self._s[1736]! } + public var UserInfo_GroupsInCommon: String { return self._s[1737]! } + public var Call_AudioRouteHide: String { return self._s[1738]! } + public var ContactInfo_PhoneLabelMobile: String { return self._s[1740]! } public func ChatList_LeaveGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1730]!, self._r[1730]!, [_0]) + return formatWithArgumentRanges(self._s[1741]!, self._r[1741]!, [_0]) } - public var TextFormat_Bold: String { return self._s[1731]! } - public var FastTwoStepSetup_EmailSection: String { return self._s[1732]! } - public var Notifications_Title: String { return self._s[1733]! } - public var Group_Username_InvalidTooShort: String { return self._s[1734]! } - public var Channel_ErrorAddTooMuch: String { return self._s[1735]! } + public var TextFormat_Bold: String { return self._s[1742]! } + public var FastTwoStepSetup_EmailSection: String { return self._s[1743]! } + public var Notifications_Title: String { return self._s[1744]! } + public var Group_Username_InvalidTooShort: String { return self._s[1745]! } + public var Channel_ErrorAddTooMuch: String { return self._s[1746]! } public func DialogList_MultipleTypingSuffix(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1736]!, self._r[1736]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[1747]!, self._r[1747]!, ["\(_0)"]) } - public var Stickers_SuggestAdded: String { return self._s[1738]! } - public var Login_CountryCode: String { return self._s[1739]! } - public var ChatSettings_AutoPlayVideos: String { return self._s[1740]! } - public var Map_GetDirections: String { return self._s[1741]! } - public var Login_PhoneFloodError: String { return self._s[1742]! } + public var Stickers_SuggestAdded: String { return self._s[1749]! } + public var Login_CountryCode: String { return self._s[1750]! } + public var ChatSettings_AutoPlayVideos: String { return self._s[1751]! } + public var Map_GetDirections: String { return self._s[1752]! } + public var Login_PhoneFloodError: String { return self._s[1753]! } public func Time_MonthOfYear_m3(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1743]!, self._r[1743]!, [_0]) - } - public var Settings_SetUsername: String { return self._s[1745]! } - public var Group_Location_ChangeLocation: String { return self._s[1746]! } - public var Notification_GroupInviterSelf: String { return self._s[1747]! } - public var InstantPage_TapToOpenLink: String { return self._s[1748]! } - public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1749]!, self._r[1749]!, [_0]) - } - public var Watch_Suggestion_TalkLater: String { return self._s[1750]! } - public var SecretChat_Title: String { return self._s[1751]! } - public var Group_UpgradeNoticeText1: String { return self._s[1752]! } - public var AuthSessions_Title: String { return self._s[1753]! } - public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1754]!, self._r[1754]!, [_0]) } - public var PhotoEditor_CropAuto: String { return self._s[1755]! } - public var Channel_About_Title: String { return self._s[1756]! } - public var FastTwoStepSetup_EmailHelp: String { return self._s[1757]! } - public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1759]!, self._r[1759]!, ["\(_0)"]) + public var Settings_SetUsername: String { return self._s[1756]! } + public var Group_Location_ChangeLocation: String { return self._s[1757]! } + public var Notification_GroupInviterSelf: String { return self._s[1758]! } + public var InstantPage_TapToOpenLink: String { return self._s[1759]! } + public func Notification_ChannelInviter(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1760]!, self._r[1760]!, [_0]) } - public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1761]! } - public var Group_Setup_HistoryVisibleHelp: String { return self._s[1762]! } - public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1763]!, self._r[1763]!, [_1]) - } - public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Watch_Suggestion_TalkLater: String { return self._s[1761]! } + public var SecretChat_Title: String { return self._s[1762]! } + public var Group_UpgradeNoticeText1: String { return self._s[1763]! } + public var AuthSessions_Title: String { return self._s[1764]! } + public func TextFormat_AddLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1765]!, self._r[1765]!, [_0]) } - public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1766]!, self._r[1766]!, [_0]) + public var PhotoEditor_CropAuto: String { return self._s[1766]! } + public var Channel_About_Title: String { return self._s[1767]! } + public var FastTwoStepSetup_EmailHelp: String { return self._s[1768]! } + public func Conversation_Bytes(_ _0: Int) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1770]!, self._r[1770]!, ["\(_0)"]) } - public var Privacy_PaymentsClearInfoHelp: String { return self._s[1767]! } - public var Presence_online: String { return self._s[1769]! } - public var PasscodeSettings_Title: String { return self._s[1770]! } - public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1771]! } - public var Web_OpenExternal: String { return self._s[1772]! } - public var AutoDownloadSettings_AutoDownload: String { return self._s[1774]! } - public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1775]! } - public var LocalGroup_Title: String { return self._s[1776]! } - public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Conversation_PinMessageAlert_OnlyPin: String { return self._s[1772]! } + public var Group_Setup_HistoryVisibleHelp: String { return self._s[1773]! } + public func PUSH_MESSAGE_GIF(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1774]!, self._r[1774]!, [_1]) + } + public func SharedMedia_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1776]!, self._r[1776]!, [_0]) + } + public func TwoStepAuth_RecoveryEmailUnavailable(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1777]!, self._r[1777]!, [_0]) } - public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1778]! } - public var Map_YouAreHere: String { return self._s[1779]! } - public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1780]!, self._r[1780]!, [_0]) - } - public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1781]!, self._r[1781]!, [_0]) - } - public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1782]! } - public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1783]! } - public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1784]!, self._r[1784]!, [_0]) - } - public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1785]!, self._r[1785]!, [_0]) - } - public var SocksProxySetup_Username: String { return self._s[1786]! } - public var Bot_Start: String { return self._s[1787]! } - public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { + public var Privacy_PaymentsClearInfoHelp: String { return self._s[1778]! } + public var Presence_online: String { return self._s[1780]! } + public var PasscodeSettings_Title: String { return self._s[1781]! } + public var Passport_Identity_ExpiryDatePlaceholder: String { return self._s[1782]! } + public var Web_OpenExternal: String { return self._s[1783]! } + public var AutoDownloadSettings_AutoDownload: String { return self._s[1785]! } + public var Channel_OwnershipTransfer_EnterPasswordText: String { return self._s[1786]! } + public var LocalGroup_Title: String { return self._s[1787]! } + public func AutoNightTheme_AutomaticHelp(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1788]!, self._r[1788]!, [_0]) } - public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1789]!, self._r[1789]!, [_0]) + public var FastTwoStepSetup_PasswordConfirmationPlaceholder: String { return self._s[1789]! } + public var Map_YouAreHere: String { return self._s[1790]! } + public func AuthSessions_Message(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1791]!, self._r[1791]!, [_0]) } - public var Contacts_SortByPresence: String { return self._s[1790]! } - public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1792]! } + public func ChatList_DeleteChatConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1792]!, self._r[1792]!, [_0]) + } + public var PrivacyLastSeenSettings_AlwaysShareWith: String { return self._s[1793]! } + public var Target_InviteToGroupErrorAlreadyInvited: String { return self._s[1794]! } + public func AuthSessions_AppUnofficial(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1795]!, self._r[1795]!, [_0]) + } + public func DialogList_LiveLocationSharingTo(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1796]!, self._r[1796]!, [_0]) + } + public var SocksProxySetup_Username: String { return self._s[1797]! } + public var Bot_Start: String { return self._s[1798]! } + public func Channel_AdminLog_EmptyFilterQueryText(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1799]!, self._r[1799]!, [_0]) + } + public func Channel_AdminLog_MessagePinned(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1800]!, self._r[1800]!, [_0]) + } + public var Contacts_SortByPresence: String { return self._s[1801]! } + public var Conversation_DiscardVoiceMessageTitle: String { return self._s[1803]! } public func PUSH_CHAT_CREATED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1793]!, self._r[1793]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1804]!, self._r[1804]!, [_1, _2]) } public func PrivacySettings_LastSeenContactsMinus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1794]!, self._r[1794]!, [_0]) + return formatWithArgumentRanges(self._s[1805]!, self._r[1805]!, [_0]) } public func Channel_AdminLog_MessageChangedLinkedGroup(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1795]!, self._r[1795]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1806]!, self._r[1806]!, [_1, _2]) } - public var Passport_Email_EnterOtherEmail: String { return self._s[1796]! } - public var Login_InfoAvatarPhoto: String { return self._s[1797]! } - public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1798]! } - public var Tour_Title4: String { return self._s[1799]! } - public var Passport_Identity_Translation: String { return self._s[1800]! } - public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1801]! } - public var Login_TermsOfServiceLabel: String { return self._s[1803]! } - public var Passport_Language_it: String { return self._s[1804]! } - public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1805]! } - public var Passport_Identity_SelfieHelp: String { return self._s[1806]! } - public var Conversation_ClearAll: String { return self._s[1808]! } - public var Channel_OwnershipTransfer_Title: String { return self._s[1810]! } - public var TwoStepAuth_FloodError: String { return self._s[1811]! } + public var Passport_Email_EnterOtherEmail: String { return self._s[1807]! } + public var Login_InfoAvatarPhoto: String { return self._s[1808]! } + public var Privacy_PaymentsClear_ShippingInfo: String { return self._s[1809]! } + public var Tour_Title4: String { return self._s[1810]! } + public var Passport_Identity_Translation: String { return self._s[1811]! } + public var SettingsSearch_Synonyms_Notifications_ContactJoined: String { return self._s[1812]! } + public var Login_TermsOfServiceLabel: String { return self._s[1814]! } + public var Passport_Language_it: String { return self._s[1815]! } + public var KeyCommand_JumpToNextUnreadChat: String { return self._s[1816]! } + public var Passport_Identity_SelfieHelp: String { return self._s[1817]! } + public var Conversation_ClearAll: String { return self._s[1819]! } + public var Channel_OwnershipTransfer_Title: String { return self._s[1821]! } + public var TwoStepAuth_FloodError: String { return self._s[1822]! } public func PUSH_CHANNEL_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1812]!, self._r[1812]!, [_1]) + return formatWithArgumentRanges(self._s[1823]!, self._r[1823]!, [_1]) } - public var Paint_Delete: String { return self._s[1813]! } - public var Privacy_AddNewPeer: String { return self._s[1814]! } - public var LogoutOptions_SetPasscodeText: String { return self._s[1815]! } + public var Paint_Delete: String { return self._s[1824]! } + public var Privacy_AddNewPeer: String { return self._s[1825]! } + public var LogoutOptions_SetPasscodeText: String { return self._s[1826]! } public func Passport_AcceptHelp(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1816]!, self._r[1816]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1827]!, self._r[1827]!, [_1, _2]) } - public var Message_PinnedAudioMessage: String { return self._s[1817]! } + public var Message_PinnedAudioMessage: String { return self._s[1828]! } public func Watch_Time_ShortTodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1818]!, self._r[1818]!, [_0]) + return formatWithArgumentRanges(self._s[1829]!, self._r[1829]!, [_0]) } - public var Notification_Mute1hMin: String { return self._s[1819]! } - public var Notifications_GroupNotificationsSound: String { return self._s[1820]! } - public var SocksProxySetup_ShareProxyList: String { return self._s[1821]! } - public var Conversation_MessageEditedLabel: String { return self._s[1822]! } - public var Notification_Exceptions_AlwaysOff: String { return self._s[1823]! } - public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[1824]! } + public var Notification_Mute1hMin: String { return self._s[1830]! } + public var Notifications_GroupNotificationsSound: String { return self._s[1831]! } + public var SocksProxySetup_ShareProxyList: String { return self._s[1832]! } + public var Conversation_MessageEditedLabel: String { return self._s[1833]! } + public var Notification_Exceptions_AlwaysOff: String { return self._s[1834]! } + public var Notification_Exceptions_NewException_MessagePreviewHeader: String { return self._s[1835]! } public func Channel_AdminLog_MessageAdmin(_ _0: String, _ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1825]!, self._r[1825]!, [_0, _1, _2]) + return formatWithArgumentRanges(self._s[1836]!, self._r[1836]!, [_0, _1, _2]) } - public var NetworkUsageSettings_ResetStats: String { return self._s[1826]! } + public var NetworkUsageSettings_ResetStats: String { return self._s[1837]! } public func PUSH_MESSAGE_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1827]!, self._r[1827]!, [_1]) + return formatWithArgumentRanges(self._s[1838]!, self._r[1838]!, [_1]) } - public var AccessDenied_LocationTracking: String { return self._s[1828]! } - public var Month_GenOctober: String { return self._s[1829]! } - public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1830]! } - public var EnterPasscode_EnterPasscode: String { return self._s[1831]! } - public var MediaPicker_TimerTooltip: String { return self._s[1833]! } - public var SharedMedia_TitleAll: String { return self._s[1834]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[1837]! } - public var Conversation_RestrictedMedia: String { return self._s[1838]! } - public var AccessDenied_PhotosRestricted: String { return self._s[1839]! } - public var Privacy_Forwards_WhoCanForward: String { return self._s[1841]! } - public var ChangePhoneNumberCode_Called: String { return self._s[1842]! } + public var AccessDenied_LocationTracking: String { return self._s[1839]! } + public var Month_GenOctober: String { return self._s[1840]! } + public var GroupInfo_InviteLink_RevokeAlert_Revoke: String { return self._s[1841]! } + public var EnterPasscode_EnterPasscode: String { return self._s[1842]! } + public var MediaPicker_TimerTooltip: String { return self._s[1844]! } + public var SharedMedia_TitleAll: String { return self._s[1845]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsExceptions: String { return self._s[1848]! } + public var Conversation_RestrictedMedia: String { return self._s[1849]! } + public var AccessDenied_PhotosRestricted: String { return self._s[1850]! } + public var Privacy_Forwards_WhoCanForward: String { return self._s[1852]! } + public var ChangePhoneNumberCode_Called: String { return self._s[1853]! } public func Notification_PinnedDocumentMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1843]!, self._r[1843]!, [_0]) + return formatWithArgumentRanges(self._s[1854]!, self._r[1854]!, [_0]) } - public var Conversation_SavedMessages: String { return self._s[1846]! } - public var Your_cards_expiration_month_is_invalid: String { return self._s[1848]! } - public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1849]! } + public var Conversation_SavedMessages: String { return self._s[1857]! } + public var Your_cards_expiration_month_is_invalid: String { return self._s[1859]! } + public var FastTwoStepSetup_PasswordPlaceholder: String { return self._s[1860]! } public func Target_ShareGameConfirmationGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1851]!, self._r[1851]!, [_0]) + return formatWithArgumentRanges(self._s[1862]!, self._r[1862]!, [_0]) } - public var ReportPeer_AlertSuccess: String { return self._s[1852]! } - public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1853]! } + public var ReportPeer_AlertSuccess: String { return self._s[1863]! } + public var PhotoEditor_CropAspectRatioOriginal: String { return self._s[1864]! } public func InstantPage_RelatedArticleAuthorAndDateTitle(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1854]!, self._r[1854]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1865]!, self._r[1865]!, [_1, _2]) } - public var Checkout_PasswordEntry_Title: String { return self._s[1855]! } - public var PhotoEditor_FadeTool: String { return self._s[1856]! } - public var Privacy_ContactsReset: String { return self._s[1857]! } + public var Checkout_PasswordEntry_Title: String { return self._s[1866]! } + public var PhotoEditor_FadeTool: String { return self._s[1867]! } + public var Privacy_ContactsReset: String { return self._s[1868]! } public func Channel_AdminLog_MessageRestrictedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1859]!, self._r[1859]!, [_0]) + return formatWithArgumentRanges(self._s[1870]!, self._r[1870]!, [_0]) } - public var Message_PinnedVideoMessage: String { return self._s[1860]! } - public var ChatList_Mute: String { return self._s[1861]! } - public var Permissions_CellularDataText_v0: String { return self._s[1862]! } - public var ShareMenu_SelectChats: String { return self._s[1864]! } - public var MusicPlayer_VoiceNote: String { return self._s[1865]! } - public var Conversation_RestrictedText: String { return self._s[1866]! } - public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[1867]! } - public var TwoStepAuth_DisableSuccess: String { return self._s[1868]! } - public var Cache_Videos: String { return self._s[1869]! } - public var PrivacySettings_PhoneNumber: String { return self._s[1870]! } - public var FeatureDisabled_Oops: String { return self._s[1872]! } - public var Passport_Address_PostcodePlaceholder: String { return self._s[1873]! } + public var Message_PinnedVideoMessage: String { return self._s[1871]! } + public var ChatList_Mute: String { return self._s[1872]! } + public var Permissions_CellularDataText_v0: String { return self._s[1873]! } + public var ShareMenu_SelectChats: String { return self._s[1875]! } + public var MusicPlayer_VoiceNote: String { return self._s[1876]! } + public var Conversation_RestrictedText: String { return self._s[1877]! } + public var SettingsSearch_Synonyms_Privacy_Data_DeleteDrafts: String { return self._s[1878]! } + public var TwoStepAuth_DisableSuccess: String { return self._s[1879]! } + public var Cache_Videos: String { return self._s[1880]! } + public var PrivacySettings_PhoneNumber: String { return self._s[1881]! } + public var FeatureDisabled_Oops: String { return self._s[1883]! } + public var Passport_Address_PostcodePlaceholder: String { return self._s[1884]! } public func AddContact_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1874]!, self._r[1874]!, [_0]) + return formatWithArgumentRanges(self._s[1885]!, self._r[1885]!, [_0]) } - public var Stickers_GroupStickersHelp: String { return self._s[1875]! } - public var GroupPermission_NoSendPolls: String { return self._s[1876]! } - public var Message_VideoExpired: String { return self._s[1878]! } - public var Notifications_Badge: String { return self._s[1879]! } - public var GroupInfo_GroupHistoryVisible: String { return self._s[1880]! } - public var CreatePoll_OptionPlaceholder: String { return self._s[1881]! } - public var Username_InvalidTooShort: String { return self._s[1882]! } - public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1883]! } - public var Channel_AdminLog_PinMessages: String { return self._s[1884]! } - public var ArchivedChats_IntroTitle3: String { return self._s[1885]! } + public var Stickers_GroupStickersHelp: String { return self._s[1886]! } + public var GroupPermission_NoSendPolls: String { return self._s[1887]! } + public var Message_VideoExpired: String { return self._s[1889]! } + public var Notifications_Badge: String { return self._s[1890]! } + public var GroupInfo_GroupHistoryVisible: String { return self._s[1891]! } + public var CreatePoll_OptionPlaceholder: String { return self._s[1892]! } + public var Username_InvalidTooShort: String { return self._s[1893]! } + public var EnterPasscode_EnterNewPasscodeChange: String { return self._s[1894]! } + public var Channel_AdminLog_PinMessages: String { return self._s[1895]! } + public var ArchivedChats_IntroTitle3: String { return self._s[1896]! } public func Notification_MessageLifetimeRemoved(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1886]!, self._r[1886]!, [_1]) + return formatWithArgumentRanges(self._s[1897]!, self._r[1897]!, [_1]) } - public var Permissions_SiriAllowInSettings_v0: String { return self._s[1887]! } - public var Conversation_DefaultRestrictedText: String { return self._s[1888]! } - public var SharedMedia_CategoryDocs: String { return self._s[1891]! } + public var Permissions_SiriAllowInSettings_v0: String { return self._s[1898]! } + public var Conversation_DefaultRestrictedText: String { return self._s[1899]! } + public var SharedMedia_CategoryDocs: String { return self._s[1902]! } public func PUSH_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1892]!, self._r[1892]!, [_1]) + return formatWithArgumentRanges(self._s[1903]!, self._r[1903]!, [_1]) } - public var Privacy_Forwards_NeverLink: String { return self._s[1894]! } + public var Privacy_Forwards_NeverLink: String { return self._s[1905]! } public func Notification_MessageLifetimeChangedOutgoing(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1895]!, self._r[1895]!, [_1]) + return formatWithArgumentRanges(self._s[1906]!, self._r[1906]!, [_1]) } - public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1896]! } + public var CheckoutInfo_ErrorShippingNotAvailable: String { return self._s[1907]! } public func Time_MonthOfYear_m12(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1897]!, self._r[1897]!, [_0]) + return formatWithArgumentRanges(self._s[1908]!, self._r[1908]!, [_0]) } - public var ChatSettings_PrivateChats: String { return self._s[1898]! } - public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[1899]! } - public var Conversation_PrivateMessageLinkCopied: String { return self._s[1900]! } - public var Channel_UpdatePhotoItem: String { return self._s[1901]! } - public var GroupInfo_LeftStatus: String { return self._s[1902]! } - public var Watch_MessageView_Forward: String { return self._s[1904]! } - public var ReportPeer_ReasonChildAbuse: String { return self._s[1905]! } - public var Cache_ClearEmpty: String { return self._s[1907]! } - public var Localization_LanguageName: String { return self._s[1908]! } - public var WebSearch_GIFs: String { return self._s[1909]! } - public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1910]! } - public var Username_InvalidStartsWithNumber: String { return self._s[1911]! } - public var Common_Back: String { return self._s[1912]! } - public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1913]! } + public var ChatSettings_PrivateChats: String { return self._s[1909]! } + public var SettingsSearch_Synonyms_EditProfile_Logout: String { return self._s[1910]! } + public var Conversation_PrivateMessageLinkCopied: String { return self._s[1911]! } + public var Channel_UpdatePhotoItem: String { return self._s[1912]! } + public var GroupInfo_LeftStatus: String { return self._s[1913]! } + public var Watch_MessageView_Forward: String { return self._s[1915]! } + public var ReportPeer_ReasonChildAbuse: String { return self._s[1916]! } + public var Cache_ClearEmpty: String { return self._s[1918]! } + public var Localization_LanguageName: String { return self._s[1919]! } + public var WebSearch_GIFs: String { return self._s[1920]! } + public var Notifications_DisplayNamesOnLockScreenInfoWithLink: String { return self._s[1921]! } + public var Username_InvalidStartsWithNumber: String { return self._s[1922]! } + public var Common_Back: String { return self._s[1923]! } + public var Passport_Identity_DateOfBirthPlaceholder: String { return self._s[1924]! } public func PUSH_CHANNEL_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1914]!, self._r[1914]!, [_1, _2]) + return formatWithArgumentRanges(self._s[1925]!, self._r[1925]!, [_1, _2]) } - public var Passport_Email_Help: String { return self._s[1915]! } - public var Watch_Conversation_Reply: String { return self._s[1917]! } - public var Conversation_EditingMessageMediaChange: String { return self._s[1919]! } - public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1920]! } - public var Channel_BanUser_Unban: String { return self._s[1922]! } - public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1923]! } - public var Group_Username_CreatePublicLinkHelp: String { return self._s[1924]! } - public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1926]! } - public var Passport_Identity_Name: String { return self._s[1927]! } + public var Passport_Email_Help: String { return self._s[1926]! } + public var Watch_Conversation_Reply: String { return self._s[1928]! } + public var Conversation_EditingMessageMediaChange: String { return self._s[1930]! } + public var Passport_Identity_IssueDatePlaceholder: String { return self._s[1931]! } + public var Channel_BanUser_Unban: String { return self._s[1933]! } + public var Channel_EditAdmin_PermissionPostMessages: String { return self._s[1934]! } + public var Group_Username_CreatePublicLinkHelp: String { return self._s[1935]! } + public var TwoStepAuth_ConfirmEmailCodePlaceholder: String { return self._s[1937]! } + public var Passport_Identity_Name: String { return self._s[1938]! } public func Channel_DiscussionGroup_HeaderGroupSet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1928]!, self._r[1928]!, [_0]) + return formatWithArgumentRanges(self._s[1939]!, self._r[1939]!, [_0]) } - public var GroupRemoved_ViewUserInfo: String { return self._s[1929]! } - public var Conversation_BlockUser: String { return self._s[1930]! } - public var Month_GenJanuary: String { return self._s[1931]! } - public var ChatSettings_TextSize: String { return self._s[1932]! } - public var Notification_PassportValuePhone: String { return self._s[1933]! } - public var Passport_Language_ne: String { return self._s[1934]! } - public var Notification_CallBack: String { return self._s[1935]! } - public var TwoStepAuth_EmailHelp: String { return self._s[1936]! } + public var GroupRemoved_ViewUserInfo: String { return self._s[1940]! } + public var Conversation_BlockUser: String { return self._s[1941]! } + public var Month_GenJanuary: String { return self._s[1942]! } + public var ChatSettings_TextSize: String { return self._s[1943]! } + public var Notification_PassportValuePhone: String { return self._s[1944]! } + public var Passport_Language_ne: String { return self._s[1945]! } + public var Notification_CallBack: String { return self._s[1946]! } + public var TwoStepAuth_EmailHelp: String { return self._s[1947]! } public func Time_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1937]!, self._r[1937]!, [_0]) - } - public var Channel_Info_Management: String { return self._s[1938]! } - public var Passport_FieldIdentityUploadHelp: String { return self._s[1939]! } - public var Stickers_FrequentlyUsed: String { return self._s[1940]! } - public var Channel_BanUser_PermissionSendMessages: String { return self._s[1941]! } - public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1943]! } - public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1944]!, self._r[1944]!, [_1, "\(_2)"]) - } - public var Passport_Address_EditResidentialAddress: String { return self._s[1945]! } - public var PrivacyPolicy_DeclineTitle: String { return self._s[1946]! } - public var CreatePoll_TextHeader: String { return self._s[1947]! } - public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[1948]!, self._r[1948]!, [_0]) } - public var PhotoEditor_QualityMedium: String { return self._s[1949]! } - public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1950]! } - public var Conversation_StatusKickedFromChannel: String { return self._s[1952]! } - public var CheckoutInfo_ReceiverInfoName: String { return self._s[1953]! } - public var Group_ErrorSendRestrictedStickers: String { return self._s[1954]! } + public var Channel_Info_Management: String { return self._s[1949]! } + public var Passport_FieldIdentityUploadHelp: String { return self._s[1950]! } + public var Stickers_FrequentlyUsed: String { return self._s[1951]! } + public var Channel_BanUser_PermissionSendMessages: String { return self._s[1952]! } + public var Passport_Address_OneOfTypeUtilityBill: String { return self._s[1954]! } + public func LOCAL_CHANNEL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1955]!, self._r[1955]!, [_1, "\(_2)"]) + } + public var Passport_Address_EditResidentialAddress: String { return self._s[1956]! } + public var PrivacyPolicy_DeclineTitle: String { return self._s[1957]! } + public var CreatePoll_TextHeader: String { return self._s[1958]! } + public func Checkout_SavePasswordTimeoutAndTouchId(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[1959]!, self._r[1959]!, [_0]) + } + public var PhotoEditor_QualityMedium: String { return self._s[1960]! } + public var InfoPlist_NSMicrophoneUsageDescription: String { return self._s[1961]! } + public var Conversation_StatusKickedFromChannel: String { return self._s[1963]! } + public var CheckoutInfo_ReceiverInfoName: String { return self._s[1964]! } + public var Group_ErrorSendRestrictedStickers: String { return self._s[1965]! } public func Conversation_RestrictedInlineTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1955]!, self._r[1955]!, [_0]) + return formatWithArgumentRanges(self._s[1966]!, self._r[1966]!, [_0]) } public func Channel_AdminLog_MessageTransferedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1956]!, self._r[1956]!, [_1]) + return formatWithArgumentRanges(self._s[1967]!, self._r[1967]!, [_1]) } - public var Conversation_LinkDialogOpen: String { return self._s[1958]! } - public var Settings_Username: String { return self._s[1959]! } - public var Conversation_Block: String { return self._s[1961]! } - public var Wallpaper_Wallpaper: String { return self._s[1962]! } - public var SocksProxySetup_UseProxy: String { return self._s[1964]! } - public var UserInfo_ShareMyContactInfo: String { return self._s[1965]! } - public var MessageTimer_Forever: String { return self._s[1966]! } - public var Privacy_Calls_WhoCanCallMe: String { return self._s[1967]! } - public var PhotoEditor_DiscardChanges: String { return self._s[1968]! } - public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1969]! } - public var Passport_Language_da: String { return self._s[1970]! } - public var SocksProxySetup_PortPlaceholder: String { return self._s[1971]! } + public var Conversation_LinkDialogOpen: String { return self._s[1969]! } + public var Settings_Username: String { return self._s[1970]! } + public var Conversation_Block: String { return self._s[1972]! } + public var Wallpaper_Wallpaper: String { return self._s[1973]! } + public var SocksProxySetup_UseProxy: String { return self._s[1975]! } + public var UserInfo_ShareMyContactInfo: String { return self._s[1976]! } + public var MessageTimer_Forever: String { return self._s[1977]! } + public var Privacy_Calls_WhoCanCallMe: String { return self._s[1978]! } + public var PhotoEditor_DiscardChanges: String { return self._s[1979]! } + public var AuthSessions_TerminateOtherSessionsHelp: String { return self._s[1980]! } + public var Passport_Language_da: String { return self._s[1981]! } + public var SocksProxySetup_PortPlaceholder: String { return self._s[1982]! } public func SecretGIF_NotViewedYet(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1972]!, self._r[1972]!, [_0]) + return formatWithArgumentRanges(self._s[1983]!, self._r[1983]!, [_0]) } - public var Passport_Address_EditPassportRegistration: String { return self._s[1973]! } + public var Passport_Address_EditPassportRegistration: String { return self._s[1984]! } public func Channel_AdminLog_MessageChangedGroupAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1975]!, self._r[1975]!, [_0]) + return formatWithArgumentRanges(self._s[1986]!, self._r[1986]!, [_0]) } - public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1977]! } - public var Conversation_SearchByName_Prefix: String { return self._s[1978]! } - public var Conversation_PinnedPoll: String { return self._s[1979]! } - public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1980]! } + public var Passport_Identity_ResidenceCountryPlaceholder: String { return self._s[1988]! } + public var Conversation_SearchByName_Prefix: String { return self._s[1989]! } + public var Conversation_PinnedPoll: String { return self._s[1990]! } + public var Conversation_EmptyGifPanelPlaceholder: String { return self._s[1991]! } public func PUSH_ENCRYPTION_ACCEPT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1981]!, self._r[1981]!, [_1]) + return formatWithArgumentRanges(self._s[1992]!, self._r[1992]!, [_1]) } - public var WallpaperSearch_ColorPurple: String { return self._s[1982]! } - public var Cache_ByPeerHeader: String { return self._s[1983]! } + public var WallpaperSearch_ColorPurple: String { return self._s[1993]! } + public var Cache_ByPeerHeader: String { return self._s[1994]! } public func Conversation_EncryptedPlaceholderTitleIncoming(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1984]!, self._r[1984]!, [_0]) + return formatWithArgumentRanges(self._s[1995]!, self._r[1995]!, [_0]) } - public var ChatSettings_AutoDownloadDocuments: String { return self._s[1985]! } - public var Notification_PinnedMessage: String { return self._s[1988]! } - public var Contacts_SortBy: String { return self._s[1990]! } + public var ChatSettings_AutoDownloadDocuments: String { return self._s[1996]! } + public var Notification_PinnedMessage: String { return self._s[1999]! } + public var Contacts_SortBy: String { return self._s[2001]! } public func PUSH_CHANNEL_MESSAGE_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1991]!, self._r[1991]!, [_1]) + return formatWithArgumentRanges(self._s[2002]!, self._r[2002]!, [_1]) } public func PUSH_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[1993]!, self._r[1993]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2004]!, self._r[2004]!, [_1, _2]) } - public var Call_EncryptionKey_Title: String { return self._s[1994]! } - public var Watch_UserInfo_Service: String { return self._s[1995]! } - public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[1997]! } - public var Conversation_Unpin: String { return self._s[1999]! } - public var CancelResetAccount_Title: String { return self._s[2000]! } - public var Map_LiveLocationFor15Minutes: String { return self._s[2001]! } + public var Call_EncryptionKey_Title: String { return self._s[2005]! } + public var Watch_UserInfo_Service: String { return self._s[2006]! } + public var SettingsSearch_Synonyms_Data_SaveEditedPhotos: String { return self._s[2008]! } + public var Conversation_Unpin: String { return self._s[2010]! } + public var CancelResetAccount_Title: String { return self._s[2011]! } + public var Map_LiveLocationFor15Minutes: String { return self._s[2012]! } public func Time_PreciseDate_m8(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2003]!, self._r[2003]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2014]!, self._r[2014]!, [_1, _2, _3]) } - public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2004]! } - public var CallSettings_Title: String { return self._s[2005]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2006]! } - public var PasscodeSettings_EncryptDataHelp: String { return self._s[2008]! } - public var AutoDownloadSettings_Contacts: String { return self._s[2009]! } - public var Passport_Identity_DocumentDetails: String { return self._s[2010]! } - public var LoginPassword_PasswordHelp: String { return self._s[2011]! } - public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2012]! } - public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2013]! } - public var Checkout_TotalPaidAmount: String { return self._s[2014]! } + public var Group_Members_AddMemberBotErrorNotAllowed: String { return self._s[2015]! } + public var CallSettings_Title: String { return self._s[2016]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground: String { return self._s[2017]! } + public var PasscodeSettings_EncryptDataHelp: String { return self._s[2019]! } + public var AutoDownloadSettings_Contacts: String { return self._s[2020]! } + public var Passport_Identity_DocumentDetails: String { return self._s[2021]! } + public var LoginPassword_PasswordHelp: String { return self._s[2022]! } + public var SettingsSearch_Synonyms_Data_AutoDownloadUsingWifi: String { return self._s[2023]! } + public var PrivacyLastSeenSettings_CustomShareSettings_Delete: String { return self._s[2024]! } + public var Checkout_TotalPaidAmount: String { return self._s[2025]! } public func FileSize_KB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2015]!, self._r[2015]!, [_0]) - } - public var PasscodeSettings_ChangePasscode: String { return self._s[2016]! } - public var Conversation_SecretLinkPreviewAlert: String { return self._s[2018]! } - public var Privacy_SecretChatsLinkPreviews: String { return self._s[2019]! } - public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2020]!, self._r[2020]!, [_1]) - } - public var Contacts_InviteFriends: String { return self._s[2022]! } - public var Map_ChooseLocationTitle: String { return self._s[2023]! } - public var Conversation_StopPoll: String { return self._s[2025]! } - public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2026]!, self._r[2026]!, [_0]) } - public var Call_Camera: String { return self._s[2027]! } - public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2028]! } - public var Calls_RatingFeedback: String { return self._s[2029]! } - public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2030]! } - public var NotificationsSound_Pulse: String { return self._s[2031]! } - public var Watch_LastSeen_Lately: String { return self._s[2032]! } - public var ReportGroupLocation_Report: String { return self._s[2035]! } - public var Widget_NoUsers: String { return self._s[2036]! } - public var Conversation_UnvotePoll: String { return self._s[2037]! } - public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2039]! } - public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2040]! } - public var NotificationsSound_Circles: String { return self._s[2041]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2043]! } - public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2044]! } - public var Proxy_TooltipUnavailable: String { return self._s[2045]! } - public var Passport_Identity_CountryPlaceholder: String { return self._s[2047]! } - public var Conversation_FileDropbox: String { return self._s[2049]! } - public var Notifications_ExceptionsUnmuted: String { return self._s[2050]! } - public var Tour_Text3: String { return self._s[2052]! } - public var Login_ResetAccountProtected_Title: String { return self._s[2054]! } - public var GroupPermission_NoSendMessages: String { return self._s[2055]! } - public var WallpaperSearch_ColorTitle: String { return self._s[2056]! } - public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2057]! } - public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_0]) + public var PasscodeSettings_ChangePasscode: String { return self._s[2027]! } + public var Conversation_SecretLinkPreviewAlert: String { return self._s[2029]! } + public var Privacy_SecretChatsLinkPreviews: String { return self._s[2030]! } + public func PUSH_CHANNEL_MESSAGE_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2031]!, self._r[2031]!, [_1]) } - public var GroupInfo_AddParticipantTitle: String { return self._s[2060]! } - public var Checkout_ShippingOption_Title: String { return self._s[2061]! } - public var ChatSettings_AutoDownloadTitle: String { return self._s[2062]! } + public var Contacts_InviteFriends: String { return self._s[2033]! } + public var Map_ChooseLocationTitle: String { return self._s[2034]! } + public var Conversation_StopPoll: String { return self._s[2036]! } + public func WebSearch_SearchNoResultsDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2037]!, self._r[2037]!, [_0]) + } + public var Call_Camera: String { return self._s[2038]! } + public var LogoutOptions_ChangePhoneNumberTitle: String { return self._s[2039]! } + public var Calls_RatingFeedback: String { return self._s[2040]! } + public var GroupInfo_BroadcastListNamePlaceholder: String { return self._s[2041]! } + public var NotificationsSound_Pulse: String { return self._s[2042]! } + public var Watch_LastSeen_Lately: String { return self._s[2043]! } + public var ReportGroupLocation_Report: String { return self._s[2046]! } + public var Widget_NoUsers: String { return self._s[2047]! } + public var Conversation_UnvotePoll: String { return self._s[2048]! } + public var SettingsSearch_Synonyms_Privacy_ProfilePhoto: String { return self._s[2050]! } + public var Privacy_ProfilePhoto_WhoCanSeeMyPhoto: String { return self._s[2051]! } + public var NotificationsSound_Circles: String { return self._s[2052]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Title: String { return self._s[2054]! } + public var TwoStepAuth_RecoveryCodeExpired: String { return self._s[2055]! } + public var Proxy_TooltipUnavailable: String { return self._s[2056]! } + public var Passport_Identity_CountryPlaceholder: String { return self._s[2058]! } + public var Conversation_FileDropbox: String { return self._s[2060]! } + public var Notifications_ExceptionsUnmuted: String { return self._s[2061]! } + public var Tour_Text3: String { return self._s[2063]! } + public var Login_ResetAccountProtected_Title: String { return self._s[2065]! } + public var GroupPermission_NoSendMessages: String { return self._s[2066]! } + public var WallpaperSearch_ColorTitle: String { return self._s[2067]! } + public var ChatAdmins_AllMembersAreAdminsOnHelp: String { return self._s[2068]! } + public func Conversation_LiveLocationYouAnd(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2070]!, self._r[2070]!, [_0]) + } + public var GroupInfo_AddParticipantTitle: String { return self._s[2071]! } + public var Checkout_ShippingOption_Title: String { return self._s[2072]! } + public var ChatSettings_AutoDownloadTitle: String { return self._s[2073]! } public func DialogList_SingleTypingSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2063]!, self._r[2063]!, [_0]) + return formatWithArgumentRanges(self._s[2074]!, self._r[2074]!, [_0]) } public func ChatSettings_AutoDownloadSettings_TypeVideo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2064]!, self._r[2064]!, [_0]) + return formatWithArgumentRanges(self._s[2075]!, self._r[2075]!, [_0]) } - public var Channel_Management_LabelAdministrator: String { return self._s[2065]! } - public var OwnershipTransfer_ComeBackLater: String { return self._s[2066]! } - public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2067]! } - public var AutoDownloadSettings_Photos: String { return self._s[2069]! } - public var Appearance_PreviewIncomingText: String { return self._s[2070]! } - public var ChannelInfo_ConfirmLeave: String { return self._s[2071]! } - public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2072]! } - public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2073]! } - public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2074]! } - public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2075]! } - public var GroupInfo_SetGroupPhotoStop: String { return self._s[2076]! } - public var Notification_SecretChatScreenshot: String { return self._s[2077]! } - public var AccessDenied_Wallpapers: String { return self._s[2078]! } - public var Passport_Address_City: String { return self._s[2080]! } - public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2081]! } - public var Appearance_ThemeCarouselClassic: String { return self._s[2082]! } - public var SocksProxySetup_SecretPlaceholder: String { return self._s[2083]! } - public var AccessDenied_LocationDisabled: String { return self._s[2084]! } - public var Group_Location_Title: String { return self._s[2085]! } - public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2087]! } - public var GroupInfo_Sound: String { return self._s[2088]! } - public var ChannelInfo_ScamChannelWarning: String { return self._s[2089]! } - public var Stickers_RemoveFromFavorites: String { return self._s[2090]! } - public var Contacts_Title: String { return self._s[2091]! } - public var Passport_Language_fr: String { return self._s[2092]! } - public var Notifications_ResetAllNotifications: String { return self._s[2093]! } - public var PrivacySettings_SecurityTitle: String { return self._s[2096]! } - public var Checkout_NewCard_Title: String { return self._s[2097]! } - public var Login_HaveNotReceivedCodeInternal: String { return self._s[2098]! } - public var Conversation_ForwardChats: String { return self._s[2099]! } - public var PasscodeSettings_4DigitCode: String { return self._s[2101]! } - public var Settings_FAQ: String { return self._s[2103]! } - public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2104]! } - public var Conversation_ContextMenuForward: String { return self._s[2105]! } - public var PrivacyPolicy_Title: String { return self._s[2110]! } - public var Notifications_TextTone: String { return self._s[2111]! } - public var Profile_CreateNewContact: String { return self._s[2112]! } - public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2113]! } - public var Call_Speaker: String { return self._s[2115]! } - public var AutoNightTheme_AutomaticSection: String { return self._s[2116]! } - public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2118]! } - public var Channel_Username_InvalidCharacters: String { return self._s[2119]! } + public var Channel_Management_LabelAdministrator: String { return self._s[2076]! } + public var OwnershipTransfer_ComeBackLater: String { return self._s[2077]! } + public var PrivacyLastSeenSettings_NeverShareWith_Placeholder: String { return self._s[2078]! } + public var AutoDownloadSettings_Photos: String { return self._s[2080]! } + public var Appearance_PreviewIncomingText: String { return self._s[2081]! } + public var ChannelInfo_ConfirmLeave: String { return self._s[2082]! } + public var MediaPicker_MomentsDateRangeSameMonthYearFormat: String { return self._s[2083]! } + public var Passport_Identity_DocumentNumberPlaceholder: String { return self._s[2084]! } + public var Channel_AdminLogFilter_EventsNewMembers: String { return self._s[2085]! } + public var PasscodeSettings_AutoLock_IfAwayFor_5minutes: String { return self._s[2086]! } + public var GroupInfo_SetGroupPhotoStop: String { return self._s[2087]! } + public var Notification_SecretChatScreenshot: String { return self._s[2088]! } + public var AccessDenied_Wallpapers: String { return self._s[2089]! } + public var Passport_Address_City: String { return self._s[2091]! } + public var InfoPlist_NSPhotoLibraryAddUsageDescription: String { return self._s[2092]! } + public var Appearance_ThemeCarouselClassic: String { return self._s[2093]! } + public var SocksProxySetup_SecretPlaceholder: String { return self._s[2094]! } + public var AccessDenied_LocationDisabled: String { return self._s[2095]! } + public var Group_Location_Title: String { return self._s[2096]! } + public var SocksProxySetup_HostnamePlaceholder: String { return self._s[2098]! } + public var GroupInfo_Sound: String { return self._s[2099]! } + public var ChannelInfo_ScamChannelWarning: String { return self._s[2100]! } + public var Stickers_RemoveFromFavorites: String { return self._s[2101]! } + public var Contacts_Title: String { return self._s[2102]! } + public var Passport_Language_fr: String { return self._s[2103]! } + public var Notifications_ResetAllNotifications: String { return self._s[2104]! } + public var PrivacySettings_SecurityTitle: String { return self._s[2107]! } + public var Checkout_NewCard_Title: String { return self._s[2108]! } + public var Login_HaveNotReceivedCodeInternal: String { return self._s[2109]! } + public var Conversation_ForwardChats: String { return self._s[2110]! } + public var PasscodeSettings_4DigitCode: String { return self._s[2112]! } + public var Settings_FAQ: String { return self._s[2114]! } + public var AutoDownloadSettings_DocumentsTitle: String { return self._s[2115]! } + public var Conversation_ContextMenuForward: String { return self._s[2116]! } + public var PrivacyPolicy_Title: String { return self._s[2121]! } + public var Notifications_TextTone: String { return self._s[2122]! } + public var Profile_CreateNewContact: String { return self._s[2123]! } + public var PrivacyPhoneNumberSettings_WhoCanSeeMyPhoneNumber: String { return self._s[2124]! } + public var Call_Speaker: String { return self._s[2126]! } + public var AutoNightTheme_AutomaticSection: String { return self._s[2127]! } + public var Channel_OwnershipTransfer_EnterPassword: String { return self._s[2129]! } + public var Channel_Username_InvalidCharacters: String { return self._s[2130]! } public func Channel_AdminLog_MessageChangedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2120]!, self._r[2120]!, [_0]) + return formatWithArgumentRanges(self._s[2131]!, self._r[2131]!, [_0]) } - public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2121]! } - public var PrivacySettings_LastSeenTitle: String { return self._s[2122]! } - public var Channel_AdminLog_CanInviteUsers: String { return self._s[2123]! } - public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2124]! } - public var OwnershipTransfer_SecurityCheck: String { return self._s[2125]! } - public var Conversation_MessageDeliveryFailed: String { return self._s[2126]! } - public var Watch_ChatList_NoConversationsText: String { return self._s[2127]! } - public var Bot_Unblock: String { return self._s[2128]! } - public var TextFormat_Italic: String { return self._s[2129]! } - public var WallpaperSearch_ColorPink: String { return self._s[2130]! } - public var Settings_About_Help: String { return self._s[2131]! } - public var SearchImages_Title: String { return self._s[2132]! } - public var Weekday_Wednesday: String { return self._s[2133]! } - public var Conversation_ClousStorageInfo_Description1: String { return self._s[2134]! } - public var ExplicitContent_AlertTitle: String { return self._s[2135]! } + public var AutoDownloadSettings_AutodownloadFiles: String { return self._s[2132]! } + public var PrivacySettings_LastSeenTitle: String { return self._s[2133]! } + public var Channel_AdminLog_CanInviteUsers: String { return self._s[2134]! } + public var SettingsSearch_Synonyms_Privacy_Data_ClearPaymentsInfo: String { return self._s[2135]! } + public var OwnershipTransfer_SecurityCheck: String { return self._s[2136]! } + public var Conversation_MessageDeliveryFailed: String { return self._s[2137]! } + public var Watch_ChatList_NoConversationsText: String { return self._s[2138]! } + public var Bot_Unblock: String { return self._s[2139]! } + public var TextFormat_Italic: String { return self._s[2140]! } + public var WallpaperSearch_ColorPink: String { return self._s[2141]! } + public var Settings_About_Help: String { return self._s[2142]! } + public var SearchImages_Title: String { return self._s[2143]! } + public var Weekday_Wednesday: String { return self._s[2144]! } + public var Conversation_ClousStorageInfo_Description1: String { return self._s[2145]! } + public var ExplicitContent_AlertTitle: String { return self._s[2146]! } public func Time_PreciseDate_m5(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2136]!, self._r[2136]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2147]!, self._r[2147]!, [_1, _2, _3]) } - public var Channel_DiscussionGroup_Create: String { return self._s[2137]! } - public var Weekday_Thursday: String { return self._s[2138]! } - public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2139]! } - public var Channel_Members_AddMembersHelp: String { return self._s[2140]! } + public var Channel_DiscussionGroup_Create: String { return self._s[2148]! } + public var Weekday_Thursday: String { return self._s[2149]! } + public var Channel_BanUser_PermissionChangeGroupInfo: String { return self._s[2150]! } + public var Channel_Members_AddMembersHelp: String { return self._s[2151]! } public func Checkout_SavePasswordTimeout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2141]!, self._r[2141]!, [_0]) + return formatWithArgumentRanges(self._s[2152]!, self._r[2152]!, [_0]) } - public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2142]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2143]! } - public var Passport_RequestedInformation: String { return self._s[2144]! } - public var Login_PhoneAndCountryHelp: String { return self._s[2145]! } - public var Conversation_EncryptionProcessing: String { return self._s[2147]! } - public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2148]! } - public var PhotoEditor_EnhanceTool: String { return self._s[2150]! } - public var Channel_Setup_Title: String { return self._s[2151]! } - public var Conversation_SearchPlaceholder: String { return self._s[2152]! } - public var AccessDenied_LocationAlwaysDenied: String { return self._s[2153]! } - public var Checkout_ErrorGeneric: String { return self._s[2154]! } - public var Passport_Language_hu: String { return self._s[2155]! } + public var Channel_DiscussionGroup_LinkGroup: String { return self._s[2153]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsVibrate: String { return self._s[2154]! } + public var Passport_RequestedInformation: String { return self._s[2155]! } + public var Login_PhoneAndCountryHelp: String { return self._s[2156]! } + public var Conversation_EncryptionProcessing: String { return self._s[2158]! } + public var Notifications_PermissionsSuppressWarningTitle: String { return self._s[2159]! } + public var PhotoEditor_EnhanceTool: String { return self._s[2161]! } + public var Channel_Setup_Title: String { return self._s[2162]! } + public var Conversation_SearchPlaceholder: String { return self._s[2163]! } + public var AccessDenied_LocationAlwaysDenied: String { return self._s[2164]! } + public var Checkout_ErrorGeneric: String { return self._s[2165]! } + public var Passport_Language_hu: String { return self._s[2166]! } public func Passport_Identity_UploadOneOfScan(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2157]!, self._r[2157]!, [_0]) + return formatWithArgumentRanges(self._s[2168]!, self._r[2168]!, [_0]) } public func PUSH_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2160]!, self._r[2160]!, [_1]) + return formatWithArgumentRanges(self._s[2171]!, self._r[2171]!, [_1]) } public func UserInfo_BlockConfirmationTitle(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2161]!, self._r[2161]!, [_0]) + return formatWithArgumentRanges(self._s[2172]!, self._r[2172]!, [_0]) } - public var Group_Location_Info: String { return self._s[2162]! } - public var Conversation_CloudStorageInfo_Title: String { return self._s[2163]! } - public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2164]! } - public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2165]! } + public var Group_Location_Info: String { return self._s[2173]! } + public var Conversation_CloudStorageInfo_Title: String { return self._s[2174]! } + public var Permissions_PeopleNearbyAllow_v0: String { return self._s[2175]! } + public var PhotoEditor_CropAspectRatioSquare: String { return self._s[2176]! } public func Notification_Exceptions_MutedUntil(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2166]!, self._r[2166]!, [_0]) + return formatWithArgumentRanges(self._s[2177]!, self._r[2177]!, [_0]) } - public var Conversation_ClearPrivateHistory: String { return self._s[2167]! } - public var ContactInfo_PhoneLabelHome: String { return self._s[2168]! } - public var PrivacySettings_LastSeenContacts: String { return self._s[2169]! } + public var Conversation_ClearPrivateHistory: String { return self._s[2178]! } + public var ContactInfo_PhoneLabelHome: String { return self._s[2179]! } + public var PrivacySettings_LastSeenContacts: String { return self._s[2180]! } public func ChangePhone_ErrorOccupied(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, [_0]) - } - public var Passport_Language_cs: String { return self._s[2171]! } - public var Message_PinnedAnimationMessage: String { return self._s[2173]! } - public var Passport_Identity_ReverseSideHelp: String { return self._s[2175]! } - public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2176]! } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2178]! } - public var Embed_PlayingInPIP: String { return self._s[2179]! } - public var AutoNightTheme_ScheduleSection: String { return self._s[2180]! } - public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2181]!, self._r[2181]!, [_0]) } - public var MediaPicker_LivePhotoDescription: String { return self._s[2182]! } - public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2183]!, self._r[2183]!, [_1]) + public var Passport_Language_cs: String { return self._s[2182]! } + public var Message_PinnedAnimationMessage: String { return self._s[2184]! } + public var Passport_Identity_ReverseSideHelp: String { return self._s[2186]! } + public var SettingsSearch_Synonyms_Data_Storage_Title: String { return self._s[2187]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndTouchId: String { return self._s[2189]! } + public var Embed_PlayingInPIP: String { return self._s[2190]! } + public var AutoNightTheme_ScheduleSection: String { return self._s[2191]! } + public func Call_EmojiDescription(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_0]) } - public var Notification_PaymentSent: String { return self._s[2184]! } - public var PhotoEditor_CurvesGreen: String { return self._s[2185]! } - public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2186]! } - public var SaveIncomingPhotosSettings_Title: String { return self._s[2187]! } - public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2188]! } + public var MediaPicker_LivePhotoDescription: String { return self._s[2193]! } + public func Channel_AdminLog_MessageRestrictedName(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2194]!, self._r[2194]!, [_1]) + } + public var Notification_PaymentSent: String { return self._s[2195]! } + public var PhotoEditor_CurvesGreen: String { return self._s[2196]! } + public var Notification_Exceptions_PreviewAlwaysOff: String { return self._s[2197]! } + public var SaveIncomingPhotosSettings_Title: String { return self._s[2198]! } + public var NotificationSettings_ShowNotificationsAllAccounts: String { return self._s[2199]! } public func PUSH_MESSAGE_SCREENSHOT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2191]!, self._r[2191]!, [_1]) + return formatWithArgumentRanges(self._s[2202]!, self._r[2202]!, [_1]) } public func PUSH_MESSAGE_PHOTO_SECRET(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2192]!, self._r[2192]!, [_1]) + return formatWithArgumentRanges(self._s[2203]!, self._r[2203]!, [_1]) } public func ApplyLanguage_UnsufficientDataText(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_1]) + return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_1]) } - public var NetworkUsageSettings_CallDataSection: String { return self._s[2195]! } - public var PasscodeSettings_HelpTop: String { return self._s[2196]! } - public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2197]! } - public var Passport_Address_TypeRentalAgreement: String { return self._s[2198]! } - public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2199]! } - public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2200]! } - public var Call_Accept: String { return self._s[2202]! } - public var GroupRemoved_RemoveInfo: String { return self._s[2203]! } - public var Month_GenMarch: String { return self._s[2205]! } - public var PhotoEditor_ShadowsTool: String { return self._s[2206]! } - public var LoginPassword_Title: String { return self._s[2207]! } - public var Call_End: String { return self._s[2208]! } - public var Watch_Conversation_GroupInfo: String { return self._s[2209]! } - public var CallSettings_Always: String { return self._s[2210]! } - public var CallFeedback_Success: String { return self._s[2211]! } - public var TwoStepAuth_SetupHint: String { return self._s[2212]! } + public var NetworkUsageSettings_CallDataSection: String { return self._s[2206]! } + public var PasscodeSettings_HelpTop: String { return self._s[2207]! } + public var Group_OwnershipTransfer_ErrorAdminsTooMuch: String { return self._s[2208]! } + public var Passport_Address_TypeRentalAgreement: String { return self._s[2209]! } + public var ReportPeer_ReasonOther_Placeholder: String { return self._s[2210]! } + public var CheckoutInfo_ErrorPhoneInvalid: String { return self._s[2211]! } + public var Call_Accept: String { return self._s[2213]! } + public var GroupRemoved_RemoveInfo: String { return self._s[2214]! } + public var Month_GenMarch: String { return self._s[2216]! } + public var PhotoEditor_ShadowsTool: String { return self._s[2217]! } + public var LoginPassword_Title: String { return self._s[2218]! } + public var Call_End: String { return self._s[2219]! } + public var Watch_Conversation_GroupInfo: String { return self._s[2220]! } + public var CallSettings_Always: String { return self._s[2221]! } + public var CallFeedback_Success: String { return self._s[2222]! } + public var TwoStepAuth_SetupHint: String { return self._s[2223]! } public func AddContact_ContactWillBeSharedAfterMutual(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2213]!, self._r[2213]!, [_1]) + return formatWithArgumentRanges(self._s[2224]!, self._r[2224]!, [_1]) } - public var ConversationProfile_UsersTooMuchError: String { return self._s[2214]! } - public var Login_PhoneTitle: String { return self._s[2215]! } - public var Passport_FieldPhoneHelp: String { return self._s[2216]! } - public var Weekday_ShortSunday: String { return self._s[2217]! } - public var Passport_InfoFAQ_URL: String { return self._s[2218]! } - public var ContactInfo_Job: String { return self._s[2220]! } - public var UserInfo_InviteBotToGroup: String { return self._s[2221]! } - public var Appearance_ThemeCarouselNightBlue: String { return self._s[2222]! } - public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2223]! } - public var Invite_ChannelsTooMuch: String { return self._s[2224]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2225]! } - public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2226]! } - public var CallFeedback_ReasonNoise: String { return self._s[2227]! } - public var Appearance_AppIconDefault: String { return self._s[2229]! } - public var Passport_Identity_AddInternalPassport: String { return self._s[2230]! } - public var MediaPicker_AddCaption: String { return self._s[2231]! } - public var CallSettings_TabIconDescription: String { return self._s[2232]! } - public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2233]! } - public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2234]! } - public var Passport_Identity_TypePersonalDetails: String { return self._s[2235]! } - public var DialogList_SearchSectionRecent: String { return self._s[2236]! } - public var PrivacyPolicy_DeclineMessage: String { return self._s[2237]! } - public var LogoutOptions_ClearCacheText: String { return self._s[2240]! } - public var LastSeen_WithinAWeek: String { return self._s[2241]! } - public var ChannelMembers_GroupAdminsTitle: String { return self._s[2242]! } - public var Conversation_CloudStorage_ChatStatus: String { return self._s[2244]! } + public var ConversationProfile_UsersTooMuchError: String { return self._s[2225]! } + public var Login_PhoneTitle: String { return self._s[2226]! } + public var Passport_FieldPhoneHelp: String { return self._s[2227]! } + public var Weekday_ShortSunday: String { return self._s[2228]! } + public var Passport_InfoFAQ_URL: String { return self._s[2229]! } + public var ContactInfo_Job: String { return self._s[2231]! } + public var UserInfo_InviteBotToGroup: String { return self._s[2232]! } + public var Appearance_ThemeCarouselNightBlue: String { return self._s[2233]! } + public var TwoStepAuth_PasswordRemovePassportConfirmation: String { return self._s[2234]! } + public var Invite_ChannelsTooMuch: String { return self._s[2235]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsPreview: String { return self._s[2236]! } + public var Passport_DeletePersonalDetailsConfirmation: String { return self._s[2237]! } + public var CallFeedback_ReasonNoise: String { return self._s[2238]! } + public var Appearance_AppIconDefault: String { return self._s[2240]! } + public var Passport_Identity_AddInternalPassport: String { return self._s[2241]! } + public var MediaPicker_AddCaption: String { return self._s[2242]! } + public var CallSettings_TabIconDescription: String { return self._s[2243]! } + public var ChatList_UndoArchiveHiddenTitle: String { return self._s[2244]! } + public var Privacy_GroupsAndChannels_AlwaysAllow: String { return self._s[2245]! } + public var Passport_Identity_TypePersonalDetails: String { return self._s[2246]! } + public var DialogList_SearchSectionRecent: String { return self._s[2247]! } + public var PrivacyPolicy_DeclineMessage: String { return self._s[2248]! } + public var LogoutOptions_ClearCacheText: String { return self._s[2251]! } + public var LastSeen_WithinAWeek: String { return self._s[2252]! } + public var ChannelMembers_GroupAdminsTitle: String { return self._s[2253]! } + public var Conversation_CloudStorage_ChatStatus: String { return self._s[2255]! } public func AddContact_SharedContactExceptionInfo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2245]!, self._r[2245]!, [_0]) + return formatWithArgumentRanges(self._s[2256]!, self._r[2256]!, [_0]) } - public var Passport_Address_TypeResidentialAddress: String { return self._s[2246]! } - public var Conversation_StatusLeftGroup: String { return self._s[2247]! } - public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2248]! } - public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2250]! } - public var GroupPermission_AddSuccess: String { return self._s[2251]! } - public var PhotoEditor_BlurToolRadial: String { return self._s[2253]! } - public var Conversation_ContextMenuCopy: String { return self._s[2254]! } - public var AccessDenied_CallMicrophone: String { return self._s[2255]! } + public var Passport_Address_TypeResidentialAddress: String { return self._s[2257]! } + public var Conversation_StatusLeftGroup: String { return self._s[2258]! } + public var SocksProxySetup_ProxyDetailsTitle: String { return self._s[2259]! } + public var SettingsSearch_Synonyms_Calls_Title: String { return self._s[2261]! } + public var GroupPermission_AddSuccess: String { return self._s[2262]! } + public var PhotoEditor_BlurToolRadial: String { return self._s[2264]! } + public var Conversation_ContextMenuCopy: String { return self._s[2265]! } + public var AccessDenied_CallMicrophone: String { return self._s[2266]! } public func Time_PreciseDate_m2(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2256]!, self._r[2256]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2267]!, self._r[2267]!, [_1, _2, _3]) } - public var Login_InvalidFirstNameError: String { return self._s[2257]! } - public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2258]! } - public var Checkout_PaymentMethod_New: String { return self._s[2259]! } - public var ShareMenu_CopyShareLinkGame: String { return self._s[2260]! } - public var PhotoEditor_QualityTool: String { return self._s[2261]! } - public var Login_SendCodeViaSms: String { return self._s[2262]! } - public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2263]! } - public var Login_EmailNotConfiguredError: String { return self._s[2264]! } - public var SocksProxySetup_Status: String { return self._s[2265]! } - public var PrivacyPolicy_Accept: String { return self._s[2266]! } - public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2267]! } - public var Appearance_AppIconClassicX: String { return self._s[2268]! } + public var Login_InvalidFirstNameError: String { return self._s[2268]! } + public var Notifications_Badge_CountUnreadMessages_InfoOn: String { return self._s[2269]! } + public var Checkout_PaymentMethod_New: String { return self._s[2270]! } + public var ShareMenu_CopyShareLinkGame: String { return self._s[2271]! } + public var PhotoEditor_QualityTool: String { return self._s[2272]! } + public var Login_SendCodeViaSms: String { return self._s[2273]! } + public var SettingsSearch_Synonyms_Privacy_DeleteAccountIfAwayFor: String { return self._s[2274]! } + public var Login_EmailNotConfiguredError: String { return self._s[2275]! } + public var SocksProxySetup_Status: String { return self._s[2276]! } + public var PrivacyPolicy_Accept: String { return self._s[2277]! } + public var Notifications_ExceptionsMessagePlaceholder: String { return self._s[2278]! } + public var Appearance_AppIconClassicX: String { return self._s[2279]! } public func PUSH_CHAT_MESSAGE_TEXT(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2269]!, self._r[2269]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2280]!, self._r[2280]!, [_1, _2, _3]) } - public var OwnershipTransfer_SecurityRequirements: String { return self._s[2270]! } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2271]! } - public var AutoNightTheme_Automatic: String { return self._s[2272]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2273]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2274]! } - public var Cache_Help: String { return self._s[2275]! } - public var Group_ErrorAccessDenied: String { return self._s[2276]! } - public var Passport_Language_fa: String { return self._s[2277]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2278]! } - public var PrivacySettings_LastSeen: String { return self._s[2279]! } + public var OwnershipTransfer_SecurityRequirements: String { return self._s[2281]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2282]! } + public var AutoNightTheme_Automatic: String { return self._s[2283]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2284]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2285]! } + public var Cache_Help: String { return self._s[2286]! } + public var Group_ErrorAccessDenied: String { return self._s[2287]! } + public var Passport_Language_fa: String { return self._s[2288]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2289]! } + public var PrivacySettings_LastSeen: String { return self._s[2290]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2280]!, self._r[2280]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2291]!, self._r[2291]!, [_0, _1]) } - public var Preview_SaveGif: String { return self._s[2284]! } - public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2285]! } - public var Profile_About: String { return self._s[2286]! } - public var Channel_About_Placeholder: String { return self._s[2287]! } - public var Login_InfoTitle: String { return self._s[2288]! } + public var Preview_SaveGif: String { return self._s[2295]! } + public var SettingsSearch_Synonyms_Privacy_TwoStepAuth: String { return self._s[2296]! } + public var Profile_About: String { return self._s[2297]! } + public var Channel_About_Placeholder: String { return self._s[2298]! } + public var Login_InfoTitle: String { return self._s[2299]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2289]!, self._r[2289]!, [_0]) + return formatWithArgumentRanges(self._s[2300]!, self._r[2300]!, [_0]) } - public var Watch_Suggestion_CantTalk: String { return self._s[2291]! } - public var ContactInfo_Title: String { return self._s[2292]! } - public var Media_ShareThisVideo: String { return self._s[2293]! } - public var Weekday_ShortFriday: String { return self._s[2294]! } - public var AccessDenied_Contacts: String { return self._s[2295]! } - public var Notification_CallIncomingShort: String { return self._s[2296]! } - public var Group_Setup_TypePublic: String { return self._s[2297]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2298]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2299]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2302]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2303]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2304]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2305]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2306]! } - public var DialogList_Typing: String { return self._s[2307]! } - public var CallFeedback_IncludeLogs: String { return self._s[2309]! } - public var Checkout_Phone: String { return self._s[2311]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2314]! } - public var Privacy_Calls_Integration: String { return self._s[2315]! } - public var Notifications_PermissionsAllow: String { return self._s[2316]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2320]! } - public var Settings_ChatSettings: String { return self._s[2321]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2302]! } + public var ContactInfo_Title: String { return self._s[2303]! } + public var Media_ShareThisVideo: String { return self._s[2304]! } + public var Weekday_ShortFriday: String { return self._s[2305]! } + public var AccessDenied_Contacts: String { return self._s[2306]! } + public var Notification_CallIncomingShort: String { return self._s[2307]! } + public var Group_Setup_TypePublic: String { return self._s[2308]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2309]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2310]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2313]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2314]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2315]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2316]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2317]! } + public var DialogList_Typing: String { return self._s[2318]! } + public var CallFeedback_IncludeLogs: String { return self._s[2320]! } + public var Checkout_Phone: String { return self._s[2322]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2325]! } + public var Privacy_Calls_Integration: String { return self._s[2326]! } + public var Notifications_PermissionsAllow: String { return self._s[2327]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2331]! } + public var Settings_ChatSettings: String { return self._s[2332]! } public func PUSH_MESSAGE_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2322]!, self._r[2322]!, [_1]) + return formatWithArgumentRanges(self._s[2333]!, self._r[2333]!, [_1]) } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2323]!, self._r[2323]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2334]!, self._r[2334]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2325]! } + public var GroupRemoved_DeleteUser: String { return self._s[2336]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2326]!, self._r[2326]!, [_0]) + return formatWithArgumentRanges(self._s[2337]!, self._r[2337]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2327]!, self._r[2327]!, [_1]) + return formatWithArgumentRanges(self._s[2338]!, self._r[2338]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2328]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2329]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2331]! } - public var Conversation_Unblock: String { return self._s[2332]! } - public var PrivacySettings_DataSettings: String { return self._s[2333]! } - public var Group_PublicLink_Info: String { return self._s[2334]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2335]! } + public var Login_ContinueWithLocalization: String { return self._s[2339]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2340]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2342]! } + public var Conversation_Unblock: String { return self._s[2343]! } + public var PrivacySettings_DataSettings: String { return self._s[2344]! } + public var Group_PublicLink_Info: String { return self._s[2345]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2346]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2336]!, self._r[2336]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2347]!, self._r[2347]!, [_0, _1]) } - public var PrivacySettings_Passcode: String { return self._s[2339]! } - public var Call_Mute: String { return self._s[2340]! } - public var Passport_Language_dz: String { return self._s[2341]! } - public var Passport_Language_tk: String { return self._s[2342]! } + public var PrivacySettings_Passcode: String { return self._s[2350]! } + public var Call_Mute: String { return self._s[2351]! } + public var Passport_Language_dz: String { return self._s[2352]! } + public var Passport_Language_tk: String { return self._s[2353]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2343]!, self._r[2343]!, [_0]) + return formatWithArgumentRanges(self._s[2354]!, self._r[2354]!, [_0]) } - public var Settings_Search: String { return self._s[2344]! } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2345]! } - public var Conversation_ContextMenuReply: String { return self._s[2346]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2347]! } - public var Tour_Title1: String { return self._s[2348]! } - public var Conversation_ClearGroupHistory: String { return self._s[2350]! } - public var WallpaperPreview_Motion: String { return self._s[2351]! } + public var Settings_Search: String { return self._s[2355]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2356]! } + public var Conversation_ContextMenuReply: String { return self._s[2357]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2358]! } + public var Tour_Title1: String { return self._s[2359]! } + public var Conversation_ClearGroupHistory: String { return self._s[2361]! } + public var WallpaperPreview_Motion: String { return self._s[2362]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2352]!, self._r[2352]!, [_0]) + return formatWithArgumentRanges(self._s[2363]!, self._r[2363]!, [_0]) } - public var Call_RateCall: String { return self._s[2353]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2354]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2355]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2356]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2358]! } + public var Call_RateCall: String { return self._s[2364]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2365]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2366]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2367]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2369]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2360]!, self._r[2360]!, [_0]) + return formatWithArgumentRanges(self._s[2371]!, self._r[2371]!, [_0]) } - public var Compose_Create: String { return self._s[2361]! } - public var Contacts_InviteToTelegram: String { return self._s[2362]! } - public var GroupInfo_Notifications: String { return self._s[2363]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2365]! } - public var Month_GenApril: String { return self._s[2366]! } - public var Appearance_AutoNightTheme: String { return self._s[2367]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2369]! } - public var Login_CodeSentSms: String { return self._s[2371]! } + public var Compose_Create: String { return self._s[2372]! } + public var Contacts_InviteToTelegram: String { return self._s[2373]! } + public var GroupInfo_Notifications: String { return self._s[2374]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2376]! } + public var Month_GenApril: String { return self._s[2377]! } + public var Appearance_AutoNightTheme: String { return self._s[2378]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2380]! } + public var Login_CodeSentSms: String { return self._s[2382]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2372]!, self._r[2372]!, [_0]) + return formatWithArgumentRanges(self._s[2383]!, self._r[2383]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2373]! } - public var LogoutOptions_ContactSupportText: String { return self._s[2374]! } - public var Passport_Language_hr: String { return self._s[2375]! } - public var Common_ActionNotAllowedError: String { return self._s[2376]! } + public var EmptyGroupInfo_Line3: String { return self._s[2384]! } + public var LogoutOptions_ContactSupportText: String { return self._s[2385]! } + public var Passport_Language_hr: String { return self._s[2386]! } + public var Common_ActionNotAllowedError: String { return self._s[2387]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2377]!, self._r[2377]!, [_0]) + return formatWithArgumentRanges(self._s[2388]!, self._r[2388]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2378]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2379]! } - public var Privacy_SecretChatsTitle: String { return self._s[2380]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2382]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2383]! } - public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2384]! } - public var LogoutOptions_ContactSupportTitle: String { return self._s[2385]! } - public var Channel_AddBotErrorHaveRights: String { return self._s[2386]! } - public var Preview_DeleteGif: String { return self._s[2387]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2388]! } - public var Group_ErrorNotMutualContact: String { return self._s[2389]! } - public var Notification_MessageLifetime5s: String { return self._s[2390]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2389]! } + public var Appearance_ThemePreview_ChatList_8_Text: String { return self._s[2390]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2391]! } + public var Privacy_SecretChatsTitle: String { return self._s[2392]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2394]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2395]! } + public var AutoDownloadSettings_TypePrivateChats: String { return self._s[2396]! } + public var LogoutOptions_ContactSupportTitle: String { return self._s[2397]! } + public var Channel_AddBotErrorHaveRights: String { return self._s[2398]! } + public var Preview_DeleteGif: String { return self._s[2399]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2400]! } + public var Group_ErrorNotMutualContact: String { return self._s[2401]! } + public var Notification_MessageLifetime5s: String { return self._s[2402]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2391]!, self._r[2391]!, [_0]) + return formatWithArgumentRanges(self._s[2403]!, self._r[2403]!, [_0]) } - public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2393]! } - public var ReportSpam_DeleteThisChat: String { return self._s[2394]! } - public var Passport_Address_AddBankStatement: String { return self._s[2395]! } - public var Notification_CallIncoming: String { return self._s[2396]! } - public var Compose_NewGroupTitle: String { return self._s[2397]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2399]! } - public var Passport_Address_Postcode: String { return self._s[2401]! } + public var Channel_OwnershipTransfer_ErrorPublicChannelsTooMuch: String { return self._s[2405]! } + public var ReportSpam_DeleteThisChat: String { return self._s[2406]! } + public var Passport_Address_AddBankStatement: String { return self._s[2407]! } + public var Notification_CallIncoming: String { return self._s[2408]! } + public var Compose_NewGroupTitle: String { return self._s[2409]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2411]! } + public var Passport_Address_Postcode: String { return self._s[2413]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2402]!, self._r[2402]!, [_0]) + return formatWithArgumentRanges(self._s[2414]!, self._r[2414]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2403]! } - public var WallpaperColors_Title: String { return self._s[2404]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2405]! } - public var GroupPermission_Duration: String { return self._s[2406]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2415]! } + public var WallpaperColors_Title: String { return self._s[2416]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2417]! } + public var GroupPermission_Duration: String { return self._s[2418]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2407]!, self._r[2407]!, [_0]) + return formatWithArgumentRanges(self._s[2419]!, self._r[2419]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2408]! } - public var Username_Placeholder: String { return self._s[2409]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2410]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2411]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2412]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2420]! } + public var Username_Placeholder: String { return self._s[2421]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2422]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2423]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2424]! } public func Channel_AdminLog_MessageChangedUnlinkedChannel(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2414]!, self._r[2414]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2426]!, self._r[2426]!, [_1, _2]) } - public var Passport_PasswordDescription: String { return self._s[2415]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2416]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2417]! } - public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2418]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2419]! } - public var Conversation_ContextMenuMore: String { return self._s[2420]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2421]! } - public var CallSettings_TabIcon: String { return self._s[2422]! } - public var KeyCommand_Find: String { return self._s[2423]! } - public var Message_PinnedGame: String { return self._s[2424]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2426]! } - public var Login_CallRequestState2: String { return self._s[2428]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2430]! } + public var Passport_PasswordDescription: String { return self._s[2427]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2428]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2429]! } + public var SettingsSearch_Synonyms_Notifications_BadgeCountUnreadMessages: String { return self._s[2430]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2431]! } + public var Conversation_ContextMenuMore: String { return self._s[2432]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2433]! } + public var CallSettings_TabIcon: String { return self._s[2434]! } + public var KeyCommand_Find: String { return self._s[2435]! } + public var Appearance_ThemePreview_ChatList_7_Text: String { return self._s[2436]! } + public var Message_PinnedGame: String { return self._s[2437]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2439]! } + public var Login_CallRequestState2: String { return self._s[2441]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2443]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2432]!, self._r[2432]!, [_0]) + return formatWithArgumentRanges(self._s[2445]!, self._r[2445]!, [_0]) } - public var WallpaperPreview_Blurred: String { return self._s[2433]! } - public var Conversation_InstantPagePreview: String { return self._s[2434]! } + public var WallpaperPreview_Blurred: String { return self._s[2446]! } + public var Conversation_InstantPagePreview: String { return self._s[2447]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2435]!, self._r[2435]!, [_0]) + return formatWithArgumentRanges(self._s[2448]!, self._r[2448]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2438]! } - public var WallpaperSearch_ColorRed: String { return self._s[2439]! } - public var GroupPermission_NoPinMessages: String { return self._s[2440]! } - public var Passport_Language_es: String { return self._s[2441]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2443]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2444]! } + public var SecretTimer_VideoDescription: String { return self._s[2451]! } + public var WallpaperSearch_ColorRed: String { return self._s[2452]! } + public var GroupPermission_NoPinMessages: String { return self._s[2453]! } + public var Passport_Language_es: String { return self._s[2454]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2456]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2457]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2445]!, self._r[2445]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2458]!, self._r[2458]!, [_1, _2]) } - public var Privacy_Forwards_CustomHelp: String { return self._s[2446]! } - public var WebPreview_GettingLinkInfo: String { return self._s[2447]! } - public var Watch_UserInfo_Unmute: String { return self._s[2448]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2449]! } - public var AccessDenied_CameraRestricted: String { return self._s[2451]! } + public var Privacy_Forwards_CustomHelp: String { return self._s[2459]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2460]! } + public var Watch_UserInfo_Unmute: String { return self._s[2461]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2462]! } + public var AccessDenied_CameraRestricted: String { return self._s[2464]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2452]!, self._r[2452]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2465]!, self._r[2465]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2454]! } - public var Settings_CopyUsername: String { return self._s[2455]! } - public var Contacts_SearchLabel: String { return self._s[2456]! } - public var Map_OpenInYandexNavigator: String { return self._s[2458]! } - public var PasscodeSettings_EncryptData: String { return self._s[2459]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2460]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2461]! } - public var DialogList_AdNoticeAlert: String { return self._s[2462]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2464]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2465]! } - public var Localization_LanguageCustom: String { return self._s[2466]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2467]! } - public var CallFeedback_Title: String { return self._s[2468]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2471]! } - public var Conversation_InfoGroup: String { return self._s[2472]! } - public var Compose_NewMessage: String { return self._s[2473]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2474]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2475]! } - public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2476]! } + public var ChatList_ReadAll: String { return self._s[2467]! } + public var Settings_CopyUsername: String { return self._s[2468]! } + public var Contacts_SearchLabel: String { return self._s[2469]! } + public var Map_OpenInYandexNavigator: String { return self._s[2471]! } + public var PasscodeSettings_EncryptData: String { return self._s[2472]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2473]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2474]! } + public var DialogList_AdNoticeAlert: String { return self._s[2475]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2477]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2478]! } + public var Localization_LanguageCustom: String { return self._s[2479]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2480]! } + public var CallFeedback_Title: String { return self._s[2481]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2484]! } + public var Conversation_InfoGroup: String { return self._s[2485]! } + public var Compose_NewMessage: String { return self._s[2486]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2487]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2488]! } + public var Channel_DiscussionGroup_UnlinkChannel: String { return self._s[2489]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2477]!, self._r[2477]!, [_0]) + return formatWithArgumentRanges(self._s[2490]!, self._r[2490]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2478]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2479]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2480]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2481]! } - public var Channel_BlackList_Title: String { return self._s[2482]! } - public var UserInfo_PhoneCall: String { return self._s[2483]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2485]! } - public var State_connecting: String { return self._s[2486]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2491]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2492]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2493]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2494]! } + public var Channel_BlackList_Title: String { return self._s[2495]! } + public var UserInfo_PhoneCall: String { return self._s[2496]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2498]! } + public var State_connecting: String { return self._s[2499]! } + public var Appearance_ThemePreview_ChatList_6_Text: String { return self._s[2500]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2487]!, self._r[2487]!, [_0]) + return formatWithArgumentRanges(self._s[2501]!, self._r[2501]!, [_0]) } - public var Notifications_GroupNotifications: String { return self._s[2488]! } - public var Passport_Identity_EditPassport: String { return self._s[2489]! } - public var EnterPasscode_RepeatNewPasscode: String { return self._s[2491]! } - public var Localization_EnglishLanguageName: String { return self._s[2492]! } - public var Share_AuthDescription: String { return self._s[2493]! } - public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2494]! } - public var Passport_Identity_Surname: String { return self._s[2495]! } - public var Compose_TokenListPlaceholder: String { return self._s[2496]! } - public var Passport_Identity_OneOfTypePassport: String { return self._s[2497]! } - public var Settings_AboutEmpty: String { return self._s[2498]! } - public var Conversation_Unmute: String { return self._s[2499]! } - public var CreateGroup_ChannelsTooMuch: String { return self._s[2501]! } + public var Notifications_GroupNotifications: String { return self._s[2502]! } + public var Passport_Identity_EditPassport: String { return self._s[2503]! } + public var EnterPasscode_RepeatNewPasscode: String { return self._s[2505]! } + public var Localization_EnglishLanguageName: String { return self._s[2506]! } + public var Share_AuthDescription: String { return self._s[2507]! } + public var SettingsSearch_Synonyms_Notifications_ChannelNotificationsAlert: String { return self._s[2508]! } + public var Passport_Identity_Surname: String { return self._s[2509]! } + public var Compose_TokenListPlaceholder: String { return self._s[2510]! } + public var Passport_Identity_OneOfTypePassport: String { return self._s[2511]! } + public var Settings_AboutEmpty: String { return self._s[2512]! } + public var Conversation_Unmute: String { return self._s[2513]! } + public var CreateGroup_ChannelsTooMuch: String { return self._s[2515]! } public func PUSH_CONTACT_JOINED(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2502]!, self._r[2502]!, [_1]) + return formatWithArgumentRanges(self._s[2516]!, self._r[2516]!, [_1]) } - public var Login_CodeSentCall: String { return self._s[2503]! } - public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2505]! } - public var ChatSettings_Appearance: String { return self._s[2506]! } - public var Appearance_PickAccentColor: String { return self._s[2507]! } + public var Login_CodeSentCall: String { return self._s[2517]! } + public var ContactInfo_PhoneLabelHomeFax: String { return self._s[2519]! } + public var ChatSettings_Appearance: String { return self._s[2520]! } + public var Appearance_PickAccentColor: String { return self._s[2521]! } public func PUSH_CHAT_MESSAGE_NOTEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2508]!, self._r[2508]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2522]!, self._r[2522]!, [_1, _2]) } public func PUSH_MESSAGE_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2509]!, self._r[2509]!, [_1]) + return formatWithArgumentRanges(self._s[2523]!, self._r[2523]!, [_1]) } - public var Notification_CallMissed: String { return self._s[2510]! } - public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2511]! } - public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2512]! } - public var ChatAdmins_AdminLabel: String { return self._s[2514]! } - public var KeyCommand_JumpToNextChat: String { return self._s[2515]! } - public var Conversation_StopPollConfirmationTitle: String { return self._s[2517]! } - public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2518]! } - public var Month_GenJune: String { return self._s[2519]! } - public var Watch_Location_Current: String { return self._s[2520]! } - public var Conversation_TitleMute: String { return self._s[2521]! } + public var Notification_CallMissed: String { return self._s[2524]! } + public var SettingsSearch_Synonyms_Appearance_ChatBackground_Custom: String { return self._s[2525]! } + public var Channel_AdminLogFilter_EventsInfo: String { return self._s[2526]! } + public var ChatAdmins_AdminLabel: String { return self._s[2528]! } + public var KeyCommand_JumpToNextChat: String { return self._s[2529]! } + public var Conversation_StopPollConfirmationTitle: String { return self._s[2531]! } + public var ChangePhoneNumberCode_CodePlaceholder: String { return self._s[2532]! } + public var Month_GenJune: String { return self._s[2533]! } + public var Watch_Location_Current: String { return self._s[2534]! } + public var Conversation_TitleMute: String { return self._s[2535]! } public func PUSH_CHANNEL_MESSAGE_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2522]!, self._r[2522]!, [_1]) + return formatWithArgumentRanges(self._s[2536]!, self._r[2536]!, [_1]) } - public var GroupInfo_DeleteAndExit: String { return self._s[2523]! } + public var GroupInfo_DeleteAndExit: String { return self._s[2537]! } public func Conversation_Moderate_DeleteAllMessages(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2524]!, self._r[2524]!, [_0]) + return formatWithArgumentRanges(self._s[2538]!, self._r[2538]!, [_0]) } - public var Call_ReportPlaceholder: String { return self._s[2525]! } - public var MaskStickerSettings_Info: String { return self._s[2526]! } + public var Call_ReportPlaceholder: String { return self._s[2539]! } + public var MaskStickerSettings_Info: String { return self._s[2540]! } public func GroupInfo_AddParticipantConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2527]!, self._r[2527]!, [_0]) + return formatWithArgumentRanges(self._s[2541]!, self._r[2541]!, [_0]) } - public var Checkout_NewCard_PostcodeTitle: String { return self._s[2528]! } - public var Passport_Address_RegionPlaceholder: String { return self._s[2530]! } - public var Contacts_ShareTelegram: String { return self._s[2531]! } - public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2532]! } - public var Channel_ErrorAccessDenied: String { return self._s[2533]! } - public var UserInfo_ScamBotWarning: String { return self._s[2535]! } - public var Stickers_GroupChooseStickerPack: String { return self._s[2536]! } - public var Call_ConnectionErrorTitle: String { return self._s[2537]! } - public var UserInfo_NotificationsEnable: String { return self._s[2538]! } - public var ArchivedChats_IntroText1: String { return self._s[2539]! } - public var Tour_Text4: String { return self._s[2542]! } - public var WallpaperSearch_Recent: String { return self._s[2543]! } - public var GroupInfo_ScamGroupWarning: String { return self._s[2544]! } - public var Profile_MessageLifetime2s: String { return self._s[2546]! } - public var Notification_MessageLifetime2s: String { return self._s[2547]! } + public var Checkout_NewCard_PostcodeTitle: String { return self._s[2542]! } + public var Passport_Address_RegionPlaceholder: String { return self._s[2544]! } + public var Contacts_ShareTelegram: String { return self._s[2545]! } + public var EnterPasscode_EnterNewPasscodeNew: String { return self._s[2546]! } + public var Channel_ErrorAccessDenied: String { return self._s[2547]! } + public var UserInfo_ScamBotWarning: String { return self._s[2549]! } + public var Stickers_GroupChooseStickerPack: String { return self._s[2550]! } + public var Call_ConnectionErrorTitle: String { return self._s[2551]! } + public var UserInfo_NotificationsEnable: String { return self._s[2552]! } + public var ArchivedChats_IntroText1: String { return self._s[2553]! } + public var Tour_Text4: String { return self._s[2556]! } + public var WallpaperSearch_Recent: String { return self._s[2557]! } + public var GroupInfo_ScamGroupWarning: String { return self._s[2558]! } + public var Profile_MessageLifetime2s: String { return self._s[2560]! } + public var Appearance_ThemePreview_ChatList_5_Text: String { return self._s[2561]! } + public var Notification_MessageLifetime2s: String { return self._s[2562]! } public func Time_PreciseDate_m10(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2548]!, self._r[2548]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2563]!, self._r[2563]!, [_1, _2, _3]) } - public var Cache_ClearCache: String { return self._s[2549]! } - public var AutoNightTheme_UpdateLocation: String { return self._s[2550]! } - public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2551]! } + public var Cache_ClearCache: String { return self._s[2564]! } + public var AutoNightTheme_UpdateLocation: String { return self._s[2565]! } + public var Permissions_NotificationsUnreachableText_v0: String { return self._s[2566]! } public func Channel_AdminLog_MessageChangedGroupUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2555]!, self._r[2555]!, [_0]) + return formatWithArgumentRanges(self._s[2570]!, self._r[2570]!, [_0]) } public func Conversation_ShareMyPhoneNumber_StatusSuccess(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2557]!, self._r[2557]!, [_0]) + return formatWithArgumentRanges(self._s[2572]!, self._r[2572]!, [_0]) } - public var LocalGroup_Text: String { return self._s[2558]! } - public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2559]! } - public var SocksProxySetup_TypeSocks: String { return self._s[2560]! } - public var ChatList_UnarchiveAction: String { return self._s[2561]! } - public var AutoNightTheme_Title: String { return self._s[2562]! } - public var InstantPage_FeedbackButton: String { return self._s[2563]! } - public var Passport_FieldAddress: String { return self._s[2564]! } - public var Month_ShortMarch: String { return self._s[2565]! } + public var LocalGroup_Text: String { return self._s[2573]! } + public var Channel_AdminLog_EmptyFilterTitle: String { return self._s[2574]! } + public var SocksProxySetup_TypeSocks: String { return self._s[2575]! } + public var ChatList_UnarchiveAction: String { return self._s[2576]! } + public var AutoNightTheme_Title: String { return self._s[2577]! } + public var InstantPage_FeedbackButton: String { return self._s[2578]! } + public var Passport_FieldAddress: String { return self._s[2579]! } + public var Month_ShortMarch: String { return self._s[2580]! } public func PUSH_MESSAGE_INVOICE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2566]!, self._r[2566]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2581]!, self._r[2581]!, [_1, _2]) } - public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2567]! } - public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2568]! } - public var Passport_FloodError: String { return self._s[2569]! } - public var SecretGif_Title: String { return self._s[2570]! } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2571]! } - public var Passport_Language_th: String { return self._s[2573]! } - public var Passport_Address_Address: String { return self._s[2574]! } - public var Login_InvalidLastNameError: String { return self._s[2575]! } - public var Notifications_InAppNotificationsPreview: String { return self._s[2576]! } - public var Notifications_PermissionsUnreachableTitle: String { return self._s[2577]! } - public var SettingsSearch_FAQ: String { return self._s[2578]! } - public var ShareMenu_Send: String { return self._s[2579]! } - public var WallpaperSearch_ColorYellow: String { return self._s[2581]! } - public var Month_GenNovember: String { return self._s[2583]! } - public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2585]! } + public var SocksProxySetup_UsernamePlaceholder: String { return self._s[2582]! } + public var Conversation_ShareInlineBotLocationConfirmation: String { return self._s[2583]! } + public var Passport_FloodError: String { return self._s[2584]! } + public var SecretGif_Title: String { return self._s[2585]! } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOn: String { return self._s[2586]! } + public var Passport_Language_th: String { return self._s[2588]! } + public var Passport_Address_Address: String { return self._s[2589]! } + public var Login_InvalidLastNameError: String { return self._s[2590]! } + public var Notifications_InAppNotificationsPreview: String { return self._s[2591]! } + public var Notifications_PermissionsUnreachableTitle: String { return self._s[2592]! } + public var SettingsSearch_FAQ: String { return self._s[2593]! } + public var ShareMenu_Send: String { return self._s[2594]! } + public var WallpaperSearch_ColorYellow: String { return self._s[2596]! } + public var Month_GenNovember: String { return self._s[2598]! } + public var SettingsSearch_Synonyms_Appearance_LargeEmoji: String { return self._s[2600]! } public func Conversation_ShareMyPhoneNumberConfirmation(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2586]!, self._r[2586]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2601]!, self._r[2601]!, [_1, _2]) } - public var Checkout_Email: String { return self._s[2587]! } - public var NotificationsSound_Tritone: String { return self._s[2588]! } - public var StickerPacksSettings_ManagingHelp: String { return self._s[2590]! } + public var Checkout_Email: String { return self._s[2602]! } + public var NotificationsSound_Tritone: String { return self._s[2603]! } + public var StickerPacksSettings_ManagingHelp: String { return self._s[2605]! } public func PUSH_PINNED_ROUND(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2593]!, self._r[2593]!, [_1]) + return formatWithArgumentRanges(self._s[2608]!, self._r[2608]!, [_1]) } - public var ChangePhoneNumberNumber_Help: String { return self._s[2594]! } + public var ChangePhoneNumberNumber_Help: String { return self._s[2609]! } public func Checkout_LiabilityAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2595]!, self._r[2595]!, [_1, _1, _1, _2]) + return formatWithArgumentRanges(self._s[2610]!, self._r[2610]!, [_1, _1, _1, _2]) } - public var ChatList_UndoArchiveTitle: String { return self._s[2596]! } - public var Notification_Exceptions_Add: String { return self._s[2597]! } - public var DialogList_You: String { return self._s[2598]! } - public var MediaPicker_Send: String { return self._s[2601]! } - public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2602]! } - public var Call_AudioRouteSpeaker: String { return self._s[2603]! } - public var Watch_UserInfo_Title: String { return self._s[2604]! } - public var Appearance_AccentColor: String { return self._s[2605]! } + public var ChatList_UndoArchiveTitle: String { return self._s[2611]! } + public var Notification_Exceptions_Add: String { return self._s[2612]! } + public var DialogList_You: String { return self._s[2613]! } + public var MediaPicker_Send: String { return self._s[2616]! } + public var SettingsSearch_Synonyms_Stickers_Title: String { return self._s[2617]! } + public var Appearance_ThemePreview_ChatList_4_Text: String { return self._s[2618]! } + public var Call_AudioRouteSpeaker: String { return self._s[2619]! } + public var Watch_UserInfo_Title: String { return self._s[2620]! } + public var Appearance_AccentColor: String { return self._s[2621]! } public func Login_EmailPhoneSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2606]!, self._r[2606]!, [_0]) + return formatWithArgumentRanges(self._s[2622]!, self._r[2622]!, [_0]) } - public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2607]! } + public var Permissions_ContactsAllowInSettings_v0: String { return self._s[2623]! } public func PUSH_CHANNEL_MESSAGE_GAME(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2608]!, self._r[2608]!, [_1, _2]) - } - public var Conversation_ClousStorageInfo_Description2: String { return self._s[2609]! } - public var WebSearch_RecentClearConfirmation: String { return self._s[2610]! } - public var Notification_CallOutgoing: String { return self._s[2611]! } - public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2612]! } - public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2613]! } - public var Call_RecordingDisabledMessage: String { return self._s[2614]! } - public var Message_Game: String { return self._s[2615]! } - public var Conversation_PressVolumeButtonForSound: String { return self._s[2616]! } - public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2617]! } - public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2618]! } - public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2619]! } - public var Date_DialogDateFormat: String { return self._s[2620]! } - public var WallpaperColors_SetCustomColor: String { return self._s[2621]! } - public var Notifications_InAppNotifications: String { return self._s[2622]! } - public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2623]!, self._r[2623]!, [_0]) - } - public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2624]!, self._r[2624]!, [_1, _2]) } - public var NewContact_Title: String { return self._s[2625]! } + public var Conversation_ClousStorageInfo_Description2: String { return self._s[2625]! } + public var WebSearch_RecentClearConfirmation: String { return self._s[2626]! } + public var Notification_CallOutgoing: String { return self._s[2627]! } + public var PrivacySettings_PasscodeAndFaceId: String { return self._s[2628]! } + public var Channel_DiscussionGroup_MakeHistoryPublic: String { return self._s[2629]! } + public var Call_RecordingDisabledMessage: String { return self._s[2630]! } + public var Message_Game: String { return self._s[2631]! } + public var Conversation_PressVolumeButtonForSound: String { return self._s[2632]! } + public var PrivacyLastSeenSettings_CustomHelp: String { return self._s[2633]! } + public var Channel_DiscussionGroup_PrivateGroup: String { return self._s[2634]! } + public var Channel_EditAdmin_PermissionAddAdmins: String { return self._s[2635]! } + public var Date_DialogDateFormat: String { return self._s[2636]! } + public var WallpaperColors_SetCustomColor: String { return self._s[2637]! } + public var Notifications_InAppNotifications: String { return self._s[2638]! } + public func Channel_Management_RemovedBy(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2639]!, self._r[2639]!, [_0]) + } + public func Settings_ApplyProxyAlert(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2640]!, self._r[2640]!, [_1, _2]) + } + public var NewContact_Title: String { return self._s[2641]! } public func AutoDownloadSettings_UpToForAll(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2626]!, self._r[2626]!, [_0]) + return formatWithArgumentRanges(self._s[2642]!, self._r[2642]!, [_0]) } - public var Conversation_ViewContactDetails: String { return self._s[2627]! } + public var Conversation_ViewContactDetails: String { return self._s[2643]! } public func PUSH_CHANNEL_MESSAGE_CONTACT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2629]!, self._r[2629]!, [_1]) + return formatWithArgumentRanges(self._s[2645]!, self._r[2645]!, [_1]) } - public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2630]! } - public var Passport_Identity_ExpiryDateNone: String { return self._s[2631]! } - public var PrivacySettings_Title: String { return self._s[2632]! } - public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2635]! } - public var GroupRemoved_UsersSectionTitle: String { return self._s[2636]! } - public var Contacts_PhoneNumber: String { return self._s[2637]! } - public var Map_ShowPlaces: String { return self._s[2639]! } - public var ChatAdmins_Title: String { return self._s[2640]! } - public var InstantPage_Reference: String { return self._s[2642]! } - public var ReportGroupLocation_Text: String { return self._s[2643]! } + public var Checkout_NewCard_CardholderNameTitle: String { return self._s[2646]! } + public var Passport_Identity_ExpiryDateNone: String { return self._s[2647]! } + public var PrivacySettings_Title: String { return self._s[2648]! } + public var Conversation_SilentBroadcastTooltipOff: String { return self._s[2651]! } + public var GroupRemoved_UsersSectionTitle: String { return self._s[2652]! } + public var Contacts_PhoneNumber: String { return self._s[2653]! } + public var Map_ShowPlaces: String { return self._s[2655]! } + public var ChatAdmins_Title: String { return self._s[2656]! } + public var InstantPage_Reference: String { return self._s[2658]! } + public var ReportGroupLocation_Text: String { return self._s[2659]! } public func PUSH_CHAT_MESSAGE_FWD(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2644]!, self._r[2644]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2660]!, self._r[2660]!, [_1, _2]) } - public var Camera_FlashOff: String { return self._s[2645]! } - public var Watch_UserInfo_Block: String { return self._s[2646]! } - public var ChatSettings_Stickers: String { return self._s[2647]! } - public var ChatSettings_DownloadInBackground: String { return self._s[2648]! } + public var Camera_FlashOff: String { return self._s[2661]! } + public var Watch_UserInfo_Block: String { return self._s[2662]! } + public var ChatSettings_Stickers: String { return self._s[2663]! } + public var ChatSettings_DownloadInBackground: String { return self._s[2664]! } public func UserInfo_BlockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2649]!, self._r[2649]!, [_0]) - } - public var Settings_ViewPhoto: String { return self._s[2650]! } - public var Login_CheckOtherSessionMessages: String { return self._s[2651]! } - public var AutoDownloadSettings_Cellular: String { return self._s[2652]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2653]! } - public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2655]!, self._r[2655]!, [_0]) - } - public var Privacy_DeleteDrafts: String { return self._s[2656]! } - public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2657]! } - public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2658]!, self._r[2658]!, [_0]) - } - public var DialogList_SavedMessagesHelp: String { return self._s[2659]! } - public var DialogList_SavedMessages: String { return self._s[2660]! } - public var GroupInfo_UpgradeButton: String { return self._s[2661]! } - public var DialogList_Pin: String { return self._s[2663]! } - public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2664]!, self._r[2664]!, [_0, _1]) - } - public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2665]!, self._r[2665]!, [_0]) } - public var Notification_Exceptions_AlwaysOn: String { return self._s[2666]! } - public var UserInfo_NotificationsDisable: String { return self._s[2667]! } - public var Paint_Outlined: String { return self._s[2668]! } - public var Activity_PlayingGame: String { return self._s[2669]! } - public var SearchImages_NoImagesFound: String { return self._s[2670]! } - public var SocksProxySetup_ProxyType: String { return self._s[2671]! } - public var AppleWatch_ReplyPresetsHelp: String { return self._s[2673]! } - public var Conversation_ContextMenuCancelSending: String { return self._s[2674]! } - public var Settings_AppLanguage: String { return self._s[2675]! } - public var TwoStepAuth_ResetAccountHelp: String { return self._s[2676]! } - public var Common_ChoosePhoto: String { return self._s[2677]! } - public var CallFeedback_ReasonEcho: String { return self._s[2678]! } + public var Settings_ViewPhoto: String { return self._s[2666]! } + public var Login_CheckOtherSessionMessages: String { return self._s[2667]! } + public var AutoDownloadSettings_Cellular: String { return self._s[2668]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsExceptions: String { return self._s[2669]! } + public func Target_InviteToGroupConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2671]!, self._r[2671]!, [_0]) + } + public var Privacy_DeleteDrafts: String { return self._s[2672]! } + public var Wallpaper_SetCustomBackgroundInfo: String { return self._s[2673]! } + public func LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2674]!, self._r[2674]!, [_0]) + } + public var DialogList_SavedMessagesHelp: String { return self._s[2675]! } + public var DialogList_SavedMessages: String { return self._s[2676]! } + public var GroupInfo_UpgradeButton: String { return self._s[2677]! } + public var Appearance_ThemePreview_ChatList_3_Text: String { return self._s[2679]! } + public var DialogList_Pin: String { return self._s[2680]! } + public func ForwardedAuthors2(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2681]!, self._r[2681]!, [_0, _1]) + } + public func Login_PhoneGenericEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2682]!, self._r[2682]!, [_0]) + } + public var Notification_Exceptions_AlwaysOn: String { return self._s[2683]! } + public var UserInfo_NotificationsDisable: String { return self._s[2684]! } + public var Paint_Outlined: String { return self._s[2685]! } + public var Activity_PlayingGame: String { return self._s[2686]! } + public var SearchImages_NoImagesFound: String { return self._s[2687]! } + public var SocksProxySetup_ProxyType: String { return self._s[2688]! } + public var AppleWatch_ReplyPresetsHelp: String { return self._s[2690]! } + public var Conversation_ContextMenuCancelSending: String { return self._s[2691]! } + public var Settings_AppLanguage: String { return self._s[2692]! } + public var TwoStepAuth_ResetAccountHelp: String { return self._s[2693]! } + public var Common_ChoosePhoto: String { return self._s[2694]! } + public var CallFeedback_ReasonEcho: String { return self._s[2695]! } public func PUSH_PINNED_AUDIO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2679]!, self._r[2679]!, [_1]) + return formatWithArgumentRanges(self._s[2696]!, self._r[2696]!, [_1]) } - public var Privacy_Calls_AlwaysAllow: String { return self._s[2680]! } - public var Activity_UploadingVideo: String { return self._s[2681]! } - public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2682]! } - public var NetworkUsageSettings_Wifi: String { return self._s[2683]! } - public var Channel_BanUser_PermissionReadMessages: String { return self._s[2684]! } - public var Checkout_PayWithTouchId: String { return self._s[2685]! } - public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2686]! } + public var Privacy_Calls_AlwaysAllow: String { return self._s[2697]! } + public var Activity_UploadingVideo: String { return self._s[2698]! } + public var ChannelInfo_DeleteChannelConfirmation: String { return self._s[2699]! } + public var NetworkUsageSettings_Wifi: String { return self._s[2700]! } + public var Channel_BanUser_PermissionReadMessages: String { return self._s[2701]! } + public var Checkout_PayWithTouchId: String { return self._s[2702]! } + public var Wallpaper_ResetWallpapersConfirmation: String { return self._s[2703]! } public func PUSH_LOCKED_MESSAGE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2688]!, self._r[2688]!, [_1]) + return formatWithArgumentRanges(self._s[2705]!, self._r[2705]!, [_1]) } - public var Notifications_ExceptionsNone: String { return self._s[2689]! } + public var Notifications_ExceptionsNone: String { return self._s[2706]! } public func Message_ForwardedMessageShort(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2690]!, self._r[2690]!, [_0]) + return formatWithArgumentRanges(self._s[2707]!, self._r[2707]!, [_0]) } public func PUSH_PINNED_GEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2691]!, self._r[2691]!, [_1]) + return formatWithArgumentRanges(self._s[2708]!, self._r[2708]!, [_1]) } - public var AuthSessions_IncompleteAttempts: String { return self._s[2693]! } - public var Passport_Address_Region: String { return self._s[2696]! } - public var ChatList_DeleteChat: String { return self._s[2697]! } - public var LogoutOptions_ClearCacheTitle: String { return self._s[2698]! } - public var PhotoEditor_TiltShift: String { return self._s[2699]! } - public var Settings_FAQ_URL: String { return self._s[2700]! } - public var Passport_Language_sl: String { return self._s[2701]! } - public var Settings_PrivacySettings: String { return self._s[2703]! } - public var SharedMedia_TitleLink: String { return self._s[2704]! } - public var Passport_Identity_TypePassportUploadScan: String { return self._s[2705]! } - public var Settings_SetProfilePhoto: String { return self._s[2706]! } - public var Channel_About_Help: String { return self._s[2707]! } - public var Contacts_PermissionsEnable: String { return self._s[2708]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2709]! } - public var AttachmentMenu_SendAsFiles: String { return self._s[2710]! } - public var CallFeedback_ReasonInterruption: String { return self._s[2712]! } - public var Passport_Address_AddTemporaryRegistration: String { return self._s[2713]! } - public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[2714]! } - public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[2715]! } - public var PrivacySettings_DeleteAccountTitle: String { return self._s[2716]! } - public var AccessDenied_VideoMessageCamera: String { return self._s[2718]! } - public var Map_OpenInYandexMaps: String { return self._s[2720]! } - public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[2721]! } - public var PhotoEditor_SaturationTool: String { return self._s[2722]! } + public var AuthSessions_IncompleteAttempts: String { return self._s[2710]! } + public var Passport_Address_Region: String { return self._s[2713]! } + public var ChatList_DeleteChat: String { return self._s[2714]! } + public var LogoutOptions_ClearCacheTitle: String { return self._s[2715]! } + public var PhotoEditor_TiltShift: String { return self._s[2716]! } + public var Settings_FAQ_URL: String { return self._s[2717]! } + public var Passport_Language_sl: String { return self._s[2718]! } + public var Settings_PrivacySettings: String { return self._s[2720]! } + public var SharedMedia_TitleLink: String { return self._s[2721]! } + public var Passport_Identity_TypePassportUploadScan: String { return self._s[2722]! } + public var Settings_SetProfilePhoto: String { return self._s[2723]! } + public var Channel_About_Help: String { return self._s[2724]! } + public var Contacts_PermissionsEnable: String { return self._s[2725]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsAlert: String { return self._s[2726]! } + public var AttachmentMenu_SendAsFiles: String { return self._s[2727]! } + public var CallFeedback_ReasonInterruption: String { return self._s[2729]! } + public var Passport_Address_AddTemporaryRegistration: String { return self._s[2730]! } + public var AutoDownloadSettings_AutodownloadVideos: String { return self._s[2731]! } + public var ChatSettings_AutoDownloadSettings_Delimeter: String { return self._s[2732]! } + public var PrivacySettings_DeleteAccountTitle: String { return self._s[2733]! } + public var AccessDenied_VideoMessageCamera: String { return self._s[2735]! } + public var Map_OpenInYandexMaps: String { return self._s[2737]! } + public var CreateGroup_ErrorLocatedGroupsTooMuch: String { return self._s[2738]! } + public var PhotoEditor_SaturationTool: String { return self._s[2739]! } public func PUSH_MESSAGE_STICKER(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2723]!, self._r[2723]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2740]!, self._r[2740]!, [_1, _2]) } - public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[2724]! } - public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2725]! } - public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[2726]! } - public var Appearance_TextSize: String { return self._s[2727]! } + public var PrivacyPhoneNumberSettings_CustomHelp: String { return self._s[2741]! } + public var Notification_Exceptions_NewException_NotificationHeader: String { return self._s[2742]! } + public var Group_OwnershipTransfer_ErrorLocatedGroupsTooMuch: String { return self._s[2743]! } + public var Appearance_TextSize: String { return self._s[2744]! } public func LOCAL_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2728]!, self._r[2728]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[2745]!, self._r[2745]!, [_1, "\(_2)"]) } - public var Channel_Username_InvalidTooShort: String { return self._s[2730]! } + public var Appearance_ThemePreview_ChatList_2_Text: String { return self._s[2746]! } + public var Channel_Username_InvalidTooShort: String { return self._s[2748]! } public func Group_OwnershipTransfer_DescriptionInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2731]!, self._r[2731]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2749]!, self._r[2749]!, [_1, _2]) } public func PUSH_CHAT_MESSAGE_GAME(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2732]!, self._r[2732]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2750]!, self._r[2750]!, [_1, _2, _3]) } - public var GroupInfo_PublicLinkAdd: String { return self._s[2733]! } - public var Passport_PassportInformation: String { return self._s[2736]! } - public var WatchRemote_AlertTitle: String { return self._s[2737]! } - public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2738]! } - public var ConvertToSupergroup_HelpText: String { return self._s[2740]! } + public var GroupInfo_PublicLinkAdd: String { return self._s[2751]! } + public var Passport_PassportInformation: String { return self._s[2754]! } + public var WatchRemote_AlertTitle: String { return self._s[2755]! } + public var Privacy_GroupsAndChannels_NeverAllow: String { return self._s[2756]! } + public var ConvertToSupergroup_HelpText: String { return self._s[2758]! } public func Time_MonthOfYear_m7(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2741]!, self._r[2741]!, [_0]) + return formatWithArgumentRanges(self._s[2759]!, self._r[2759]!, [_0]) } public func PUSH_PHONE_CALL_REQUEST(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2742]!, self._r[2742]!, [_1]) + return formatWithArgumentRanges(self._s[2760]!, self._r[2760]!, [_1]) } - public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2743]! } - public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2745]! } - public var AccessDenied_CameraDisabled: String { return self._s[2746]! } + public var Privacy_GroupsAndChannels_CustomHelp: String { return self._s[2761]! } + public var TwoStepAuth_RecoveryCodeInvalid: String { return self._s[2763]! } + public var AccessDenied_CameraDisabled: String { return self._s[2764]! } public func Channel_Username_UsernameIsAvailable(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2747]!, self._r[2747]!, [_0]) - } - public var PhotoEditor_ContrastTool: String { return self._s[2750]! } - public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2751]!, self._r[2751]!, [_1]) - } - public var DialogList_Draft: String { return self._s[2752]! } - public var Privacy_TopPeersDelete: String { return self._s[2754]! } - public var LoginPassword_PasswordPlaceholder: String { return self._s[2755]! } - public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2756]! } - public var WebSearch_RecentSectionClear: String { return self._s[2757]! } - public var Watch_ChatList_NoConversationsTitle: String { return self._s[2759]! } - public var Common_Done: String { return self._s[2761]! } - public var AuthSessions_EmptyText: String { return self._s[2762]! } - public var Conversation_ShareBotContactConfirmation: String { return self._s[2763]! } - public var Tour_Title5: String { return self._s[2764]! } - public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2765]!, self._r[2765]!, [_0]) } - public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2766]! } - public var Conversation_LinkDialogSave: String { return self._s[2767]! } - public var GroupInfo_ActionRestrict: String { return self._s[2768]! } - public var Checkout_Title: String { return self._s[2769]! } - public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[2771]! } - public var Channel_AdminLog_CanChangeInfo: String { return self._s[2773]! } - public var Notification_RenamedGroup: String { return self._s[2774]! } - public var PeopleNearby_Groups: String { return self._s[2775]! } - public var Checkout_PayWithFaceId: String { return self._s[2776]! } - public var Channel_BanList_BlockedTitle: String { return self._s[2777]! } - public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2779]! } - public var Checkout_WebConfirmation_Title: String { return self._s[2780]! } - public var Notifications_MessageNotificationsAlert: String { return self._s[2781]! } + public var PhotoEditor_ContrastTool: String { return self._s[2768]! } + public func PUSH_PINNED_DOC(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2769]!, self._r[2769]!, [_1]) + } + public var DialogList_Draft: String { return self._s[2770]! } + public var Privacy_TopPeersDelete: String { return self._s[2772]! } + public var LoginPassword_PasswordPlaceholder: String { return self._s[2773]! } + public var Passport_Identity_TypeIdentityCardUploadScan: String { return self._s[2774]! } + public var WebSearch_RecentSectionClear: String { return self._s[2775]! } + public var Watch_ChatList_NoConversationsTitle: String { return self._s[2777]! } + public var Common_Done: String { return self._s[2779]! } + public var AuthSessions_EmptyText: String { return self._s[2780]! } + public var Conversation_ShareBotContactConfirmation: String { return self._s[2781]! } + public var Tour_Title5: String { return self._s[2782]! } + public func Map_DirectionsDriveEta(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2783]!, self._r[2783]!, [_0]) + } + public var ApplyLanguage_UnsufficientDataTitle: String { return self._s[2784]! } + public var Conversation_LinkDialogSave: String { return self._s[2785]! } + public var GroupInfo_ActionRestrict: String { return self._s[2786]! } + public var Checkout_Title: String { return self._s[2787]! } + public var Channel_DiscussionGroup_HeaderLabel: String { return self._s[2789]! } + public var Channel_AdminLog_CanChangeInfo: String { return self._s[2791]! } + public var Notification_RenamedGroup: String { return self._s[2792]! } + public var PeopleNearby_Groups: String { return self._s[2793]! } + public var Checkout_PayWithFaceId: String { return self._s[2794]! } + public var Channel_BanList_BlockedTitle: String { return self._s[2795]! } + public var SettingsSearch_Synonyms_Notifications_InAppNotificationsSound: String { return self._s[2797]! } + public var Checkout_WebConfirmation_Title: String { return self._s[2798]! } + public var Notifications_MessageNotificationsAlert: String { return self._s[2799]! } public func Activity_RemindAboutGroup(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2782]!, self._r[2782]!, [_0]) + return formatWithArgumentRanges(self._s[2800]!, self._r[2800]!, [_0]) } - public var Profile_AddToExisting: String { return self._s[2784]! } + public var Profile_AddToExisting: String { return self._s[2802]! } public func Profile_CreateEncryptedChatOutdatedError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2785]!, self._r[2785]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2803]!, self._r[2803]!, [_0, _1]) } - public var Cache_Files: String { return self._s[2787]! } - public var Permissions_PrivacyPolicy: String { return self._s[2788]! } - public var SocksProxySetup_ConnectAndSave: String { return self._s[2789]! } - public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2790]! } - public var AutoDownloadSettings_TypeContacts: String { return self._s[2792]! } - public var Calls_NoCallsPlaceholder: String { return self._s[2794]! } - public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2795]! } - public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2797]! } + public var Cache_Files: String { return self._s[2805]! } + public var Permissions_PrivacyPolicy: String { return self._s[2806]! } + public var SocksProxySetup_ConnectAndSave: String { return self._s[2807]! } + public var UserInfo_NotificationsDefaultDisabled: String { return self._s[2808]! } + public var AutoDownloadSettings_TypeContacts: String { return self._s[2810]! } + public var Appearance_ThemePreview_ChatList_1_Text: String { return self._s[2812]! } + public var Calls_NoCallsPlaceholder: String { return self._s[2813]! } + public var Channel_Username_RevokeExistingUsernamesInfo: String { return self._s[2814]! } + public var Notifications_ExceptionsGroupPlaceholder: String { return self._s[2816]! } public func PUSH_CHAT_MESSAGE_INVOICE(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2798]!, self._r[2798]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2817]!, self._r[2817]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2799]! } - public var Passport_FieldAddressHelp: String { return self._s[2800]! } - public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2801]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsSound: String { return self._s[2818]! } + public var Passport_FieldAddressHelp: String { return self._s[2819]! } + public var Privacy_GroupsAndChannels_InviteToChannelMultipleError: String { return self._s[2820]! } public func Login_TermsOfService_ProceedBot(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2802]!, self._r[2802]!, [_0]) + return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_0]) } - public var Channel_AdminLog_EmptyTitle: String { return self._s[2803]! } - public var Privacy_Calls_NeverAllow_Title: String { return self._s[2805]! } - public var Login_UnknownError: String { return self._s[2806]! } - public var Group_UpgradeNoticeText2: String { return self._s[2808]! } - public var Watch_Compose_AddContact: String { return self._s[2809]! } - public var Web_Error: String { return self._s[2810]! } - public var Gif_Search: String { return self._s[2811]! } - public var Profile_MessageLifetime1h: String { return self._s[2812]! } - public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2813]! } - public var Channel_Username_CheckingUsername: String { return self._s[2814]! } - public var CallFeedback_ReasonSilentRemote: String { return self._s[2815]! } - public var AutoDownloadSettings_TypeChannels: String { return self._s[2816]! } - public var Channel_AboutItem: String { return self._s[2817]! } - public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2819]! } - public var GroupInfo_SharedMedia: String { return self._s[2820]! } + public var Channel_AdminLog_EmptyTitle: String { return self._s[2822]! } + public var Privacy_Calls_NeverAllow_Title: String { return self._s[2824]! } + public var Login_UnknownError: String { return self._s[2825]! } + public var Group_UpgradeNoticeText2: String { return self._s[2827]! } + public var Watch_Compose_AddContact: String { return self._s[2828]! } + public var Web_Error: String { return self._s[2829]! } + public var Gif_Search: String { return self._s[2830]! } + public var Profile_MessageLifetime1h: String { return self._s[2831]! } + public var CheckoutInfo_ReceiverInfoEmailPlaceholder: String { return self._s[2832]! } + public var Channel_Username_CheckingUsername: String { return self._s[2833]! } + public var CallFeedback_ReasonSilentRemote: String { return self._s[2834]! } + public var AutoDownloadSettings_TypeChannels: String { return self._s[2835]! } + public var Channel_AboutItem: String { return self._s[2836]! } + public var Privacy_GroupsAndChannels_AlwaysAllow_Placeholder: String { return self._s[2838]! } + public var GroupInfo_SharedMedia: String { return self._s[2839]! } public func Channel_AdminLog_MessagePromotedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2821]!, self._r[2821]!, [_1]) + return formatWithArgumentRanges(self._s[2840]!, self._r[2840]!, [_1]) } - public var Call_PhoneCallInProgressMessage: String { return self._s[2822]! } + public var Call_PhoneCallInProgressMessage: String { return self._s[2841]! } public func PUSH_CHANNEL_ALBUM(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2823]!, self._r[2823]!, [_1]) + return formatWithArgumentRanges(self._s[2842]!, self._r[2842]!, [_1]) } - public var ChatList_UndoArchiveRevealedText: String { return self._s[2824]! } - public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2825]! } - public var Conversation_SearchByName_Placeholder: String { return self._s[2826]! } - public var CreatePoll_AddOption: String { return self._s[2827]! } - public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2828]! } - public var Group_UpgradeNoticeHeader: String { return self._s[2829]! } - public var Channel_Management_AddModerator: String { return self._s[2830]! } - public var AutoDownloadSettings_MaxFileSize: String { return self._s[2831]! } - public var StickerPacksSettings_ShowStickersButton: String { return self._s[2832]! } - public var NotificationsSound_Hello: String { return self._s[2833]! } - public var SocksProxySetup_SavedProxies: String { return self._s[2834]! } - public var Channel_Stickers_Placeholder: String { return self._s[2836]! } + public var ChatList_UndoArchiveRevealedText: String { return self._s[2843]! } + public var GroupInfo_InviteLink_RevokeAlert_Text: String { return self._s[2844]! } + public var Conversation_SearchByName_Placeholder: String { return self._s[2845]! } + public var CreatePoll_AddOption: String { return self._s[2846]! } + public var GroupInfo_Permissions_SearchPlaceholder: String { return self._s[2847]! } + public var Group_UpgradeNoticeHeader: String { return self._s[2848]! } + public var Channel_Management_AddModerator: String { return self._s[2849]! } + public var AutoDownloadSettings_MaxFileSize: String { return self._s[2850]! } + public var StickerPacksSettings_ShowStickersButton: String { return self._s[2851]! } + public var NotificationsSound_Hello: String { return self._s[2852]! } + public var SocksProxySetup_SavedProxies: String { return self._s[2853]! } + public var Channel_Stickers_Placeholder: String { return self._s[2855]! } public func Login_EmailCodeBody(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2837]!, self._r[2837]!, [_0]) + return formatWithArgumentRanges(self._s[2856]!, self._r[2856]!, [_0]) } - public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2838]! } - public var Channel_Management_AddModeratorHelp: String { return self._s[2839]! } - public var ContactInfo_BirthdayLabel: String { return self._s[2840]! } - public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2841]! } - public var AutoDownloadSettings_Channels: String { return self._s[2842]! } - public var Passport_Language_mn: String { return self._s[2843]! } - public var Notifications_ResetAllNotificationsHelp: String { return self._s[2846]! } - public var Passport_Language_ja: String { return self._s[2848]! } - public var Settings_About_Title: String { return self._s[2849]! } - public var Settings_NotificationsAndSounds: String { return self._s[2850]! } - public var ChannelInfo_DeleteGroup: String { return self._s[2851]! } - public var Settings_BlockedUsers: String { return self._s[2852]! } + public var PrivacyPolicy_DeclineDeclineAndDelete: String { return self._s[2857]! } + public var Channel_Management_AddModeratorHelp: String { return self._s[2858]! } + public var ContactInfo_BirthdayLabel: String { return self._s[2859]! } + public var ChangePhoneNumberCode_RequestingACall: String { return self._s[2860]! } + public var AutoDownloadSettings_Channels: String { return self._s[2861]! } + public var Passport_Language_mn: String { return self._s[2862]! } + public var Notifications_ResetAllNotificationsHelp: String { return self._s[2865]! } + public var Passport_Language_ja: String { return self._s[2867]! } + public var Settings_About_Title: String { return self._s[2868]! } + public var Settings_NotificationsAndSounds: String { return self._s[2869]! } + public var ChannelInfo_DeleteGroup: String { return self._s[2870]! } + public var Settings_BlockedUsers: String { return self._s[2871]! } public func Time_MonthOfYear_m4(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2853]!, self._r[2853]!, [_0]) + return formatWithArgumentRanges(self._s[2872]!, self._r[2872]!, [_0]) } - public var AutoDownloadSettings_PreloadVideo: String { return self._s[2854]! } - public var Passport_Address_AddResidentialAddress: String { return self._s[2855]! } - public var Channel_Username_Title: String { return self._s[2856]! } + public var AutoDownloadSettings_PreloadVideo: String { return self._s[2873]! } + public var Passport_Address_AddResidentialAddress: String { return self._s[2874]! } + public var Channel_Username_Title: String { return self._s[2875]! } public func Notification_RemovedGroupPhoto(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2857]!, self._r[2857]!, [_0]) + return formatWithArgumentRanges(self._s[2876]!, self._r[2876]!, [_0]) } - public var AttachmentMenu_File: String { return self._s[2859]! } - public var AppleWatch_Title: String { return self._s[2860]! } - public var Activity_RecordingVideoMessage: String { return self._s[2861]! } + public var AttachmentMenu_File: String { return self._s[2878]! } + public var AppleWatch_Title: String { return self._s[2879]! } + public var Activity_RecordingVideoMessage: String { return self._s[2880]! } public func Channel_DiscussionGroup_PublicChannelLink(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2862]!, self._r[2862]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2881]!, self._r[2881]!, [_1, _2]) } - public var Weekday_Saturday: String { return self._s[2863]! } - public var WallpaperPreview_SwipeColorsTopText: String { return self._s[2864]! } - public var Profile_CreateEncryptedChatError: String { return self._s[2865]! } - public var Common_Next: String { return self._s[2867]! } - public var Channel_Stickers_YourStickers: String { return self._s[2869]! } - public var Call_AudioRouteHeadphones: String { return self._s[2870]! } - public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2872]! } - public var Watch_Contacts_NoResults: String { return self._s[2874]! } - public var PhotoEditor_TintTool: String { return self._s[2877]! } - public var LoginPassword_ResetAccount: String { return self._s[2879]! } - public var Settings_SavedMessages: String { return self._s[2880]! } - public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[2881]! } - public var Bot_GenericSupportStatus: String { return self._s[2882]! } - public var StickerPack_Add: String { return self._s[2883]! } - public var Checkout_TotalAmount: String { return self._s[2884]! } - public var Your_cards_number_is_invalid: String { return self._s[2885]! } - public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[2886]! } + public var Weekday_Saturday: String { return self._s[2882]! } + public var WallpaperPreview_SwipeColorsTopText: String { return self._s[2883]! } + public var Profile_CreateEncryptedChatError: String { return self._s[2884]! } + public var Common_Next: String { return self._s[2886]! } + public var Channel_Stickers_YourStickers: String { return self._s[2888]! } + public var Call_AudioRouteHeadphones: String { return self._s[2889]! } + public var TwoStepAuth_EnterPasswordForgot: String { return self._s[2891]! } + public var Watch_Contacts_NoResults: String { return self._s[2893]! } + public var PhotoEditor_TintTool: String { return self._s[2896]! } + public var LoginPassword_ResetAccount: String { return self._s[2898]! } + public var Settings_SavedMessages: String { return self._s[2899]! } + public var SettingsSearch_Synonyms_Appearance_Animations: String { return self._s[2900]! } + public var Bot_GenericSupportStatus: String { return self._s[2901]! } + public var StickerPack_Add: String { return self._s[2902]! } + public var Checkout_TotalAmount: String { return self._s[2903]! } + public var Your_cards_number_is_invalid: String { return self._s[2904]! } + public var SettingsSearch_Synonyms_Appearance_AutoNightTheme: String { return self._s[2905]! } public func ChangePhoneNumberCode_CallTimer(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2887]!, self._r[2887]!, [_0]) - } - public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2888]!, self._r[2888]!, [_1, _2]) - } - public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2889]! } - public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2891]!, self._r[2891]!, [_1, _2]) - } - public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2892]!, self._r[2892]!, [_0]) - } - public var GroupInfo_InviteLink_ShareLink: String { return self._s[2893]! } - public var StickerPack_Share: String { return self._s[2894]! } - public var Passport_DeleteAddress: String { return self._s[2895]! } - public var Settings_Passport: String { return self._s[2896]! } - public var SharedMedia_EmptyFilesText: String { return self._s[2897]! } - public var Conversation_DeleteMessagesForMe: String { return self._s[2898]! } - public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2899]! } - public var Contacts_PermissionsText: String { return self._s[2900]! } - public var Group_Setup_HistoryVisible: String { return self._s[2901]! } - public var Passport_Address_AddRentalAgreement: String { return self._s[2903]! } - public var SocksProxySetup_Title: String { return self._s[2904]! } - public var Notification_Mute1h: String { return self._s[2905]! } - public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2906]!, self._r[2906]!, [_0]) } - public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[2907]! } - public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2908]!, self._r[2908]!, [_1]) + public func GroupPermission_AddedInfo(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2907]!, self._r[2907]!, [_1, _2]) } - public var FastTwoStepSetup_PasswordSection: String { return self._s[2909]! } - public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2912]! } - public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2914]! } - public var DialogList_NoMessagesText: String { return self._s[2915]! } - public var Privacy_ContactsResetConfirmation: String { return self._s[2916]! } - public var Privacy_Calls_P2PHelp: String { return self._s[2917]! } - public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[2919]! } - public var Your_cards_expiration_year_is_invalid: String { return self._s[2920]! } - public var Common_TakePhotoOrVideo: String { return self._s[2921]! } - public var Call_StatusBusy: String { return self._s[2922]! } - public var Conversation_PinnedMessage: String { return self._s[2923]! } - public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2924]! } - public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2925]! } - public var Undo_ChatCleared: String { return self._s[2926]! } - public var AppleWatch_ReplyPresets: String { return self._s[2927]! } - public var Passport_DiscardMessageDescription: String { return self._s[2929]! } - public var Login_NetworkError: String { return self._s[2930]! } + public var ChatSettings_ConnectionType_UseSocks5: String { return self._s[2908]! } + public func PUSH_CHAT_PHOTO_EDITED(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2910]!, self._r[2910]!, [_1, _2]) + } + public func Conversation_RestrictedTextTimed(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2911]!, self._r[2911]!, [_0]) + } + public var GroupInfo_InviteLink_ShareLink: String { return self._s[2912]! } + public var StickerPack_Share: String { return self._s[2913]! } + public var Passport_DeleteAddress: String { return self._s[2914]! } + public var Settings_Passport: String { return self._s[2915]! } + public var SharedMedia_EmptyFilesText: String { return self._s[2916]! } + public var Conversation_DeleteMessagesForMe: String { return self._s[2917]! } + public var PasscodeSettings_AutoLock_IfAwayFor_1hour: String { return self._s[2918]! } + public var Contacts_PermissionsText: String { return self._s[2919]! } + public var Group_Setup_HistoryVisible: String { return self._s[2920]! } + public var Passport_Address_AddRentalAgreement: String { return self._s[2922]! } + public var SocksProxySetup_Title: String { return self._s[2923]! } + public var Notification_Mute1h: String { return self._s[2924]! } + public func Passport_Email_CodeHelp(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2925]!, self._r[2925]!, [_0]) + } + public var NotificationSettings_ShowNotificationsAllAccountsInfoOff: String { return self._s[2926]! } + public func PUSH_PINNED_GEOLIVE(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2927]!, self._r[2927]!, [_1]) + } + public var FastTwoStepSetup_PasswordSection: String { return self._s[2928]! } + public var NetworkUsageSettings_ResetStatsConfirmation: String { return self._s[2931]! } + public var InfoPlist_NSFaceIDUsageDescription: String { return self._s[2933]! } + public var DialogList_NoMessagesText: String { return self._s[2934]! } + public var Privacy_ContactsResetConfirmation: String { return self._s[2935]! } + public var Privacy_Calls_P2PHelp: String { return self._s[2936]! } + public var Channel_DiscussionGroup_SearchPlaceholder: String { return self._s[2938]! } + public var Your_cards_expiration_year_is_invalid: String { return self._s[2939]! } + public var Common_TakePhotoOrVideo: String { return self._s[2940]! } + public var Call_StatusBusy: String { return self._s[2941]! } + public var Conversation_PinnedMessage: String { return self._s[2942]! } + public var AutoDownloadSettings_VoiceMessagesTitle: String { return self._s[2943]! } + public var TwoStepAuth_SetupPasswordConfirmFailed: String { return self._s[2944]! } + public var Undo_ChatCleared: String { return self._s[2945]! } + public var AppleWatch_ReplyPresets: String { return self._s[2946]! } + public var Passport_DiscardMessageDescription: String { return self._s[2948]! } + public var Login_NetworkError: String { return self._s[2949]! } public func Notification_PinnedRoundMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2931]!, self._r[2931]!, [_0]) + return formatWithArgumentRanges(self._s[2950]!, self._r[2950]!, [_0]) } public func Channel_AdminLog_MessageRemovedChannelUsername(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2932]!, self._r[2932]!, [_0]) - } - public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2933]! } - public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2935]! } - public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2937]!, self._r[2937]!, [_0]) - } - public var Call_ConnectionErrorMessage: String { return self._s[2938]! } - public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[2939]! } - public var Compose_GroupTokenListPlaceholder: String { return self._s[2941]! } - public var ConversationMedia_Title: String { return self._s[2942]! } - public var EncryptionKey_Title: String { return self._s[2944]! } - public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2945]! } - public var Notification_Exceptions_AddException: String { return self._s[2946]! } - public var PrivacySettings_BlockedPeersEmpty: String { return self._s[2947]! } - public var Profile_MessageLifetime1m: String { return self._s[2948]! } - public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2949]!, self._r[2949]!, [_1]) - } - public var Month_GenMay: String { return self._s[2950]! } - public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2951]!, self._r[2951]!, [_0]) } - public var PeopleNearby_Users: String { return self._s[2952]! } - public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2953]! } - public var AutoDownloadSettings_ResetSettings: String { return self._s[2954]! } - public var Conversation_EmptyPlaceholder: String { return self._s[2956]! } - public var Passport_Address_AddPassportRegistration: String { return self._s[2957]! } - public var Notifications_ChannelNotificationsAlert: String { return self._s[2958]! } - public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[2959]! } - public var Camera_TapAndHoldForVideo: String { return self._s[2960]! } - public var Channel_JoinChannel: String { return self._s[2962]! } - public var Appearance_Animations: String { return self._s[2965]! } + public var SocksProxySetup_PasswordPlaceholder: String { return self._s[2952]! } + public var Login_ResetAccountProtected_LimitExceeded: String { return self._s[2954]! } + public func Watch_LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2956]!, self._r[2956]!, [_0]) + } + public var Call_ConnectionErrorMessage: String { return self._s[2957]! } + public var SettingsSearch_Synonyms_Notifications_MessageNotificationsSound: String { return self._s[2958]! } + public var Compose_GroupTokenListPlaceholder: String { return self._s[2960]! } + public var ConversationMedia_Title: String { return self._s[2961]! } + public var EncryptionKey_Title: String { return self._s[2963]! } + public var TwoStepAuth_EnterPasswordTitle: String { return self._s[2964]! } + public var Notification_Exceptions_AddException: String { return self._s[2965]! } + public var PrivacySettings_BlockedPeersEmpty: String { return self._s[2966]! } + public var Profile_MessageLifetime1m: String { return self._s[2967]! } + public func Channel_AdminLog_MessageUnkickedName(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2968]!, self._r[2968]!, [_1]) + } + public var Month_GenMay: String { return self._s[2969]! } + public func LiveLocationUpdated_TodayAt(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[2970]!, self._r[2970]!, [_0]) + } + public var PeopleNearby_Users: String { return self._s[2971]! } + public var ChannelMembers_WhoCanAddMembersAllHelp: String { return self._s[2972]! } + public var AutoDownloadSettings_ResetSettings: String { return self._s[2973]! } + public var Conversation_EmptyPlaceholder: String { return self._s[2975]! } + public var Passport_Address_AddPassportRegistration: String { return self._s[2976]! } + public var Notifications_ChannelNotificationsAlert: String { return self._s[2977]! } + public var ChatSettings_AutoDownloadUsingCellular: String { return self._s[2978]! } + public var Camera_TapAndHoldForVideo: String { return self._s[2979]! } + public var Channel_JoinChannel: String { return self._s[2981]! } + public var Appearance_Animations: String { return self._s[2984]! } public func Notification_MessageLifetimeChanged(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2966]!, self._r[2966]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2985]!, self._r[2985]!, [_1, _2]) } - public var Stickers_GroupStickers: String { return self._s[2968]! } - public var ConvertToSupergroup_HelpTitle: String { return self._s[2970]! } - public var Passport_Address_Street: String { return self._s[2971]! } - public var Conversation_AddContact: String { return self._s[2972]! } - public var Login_PhonePlaceholder: String { return self._s[2973]! } - public var Channel_Members_InviteLink: String { return self._s[2975]! } - public var Bot_Stop: String { return self._s[2976]! } - public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[2978]! } - public var Notification_PassportValueAddress: String { return self._s[2979]! } - public var Month_ShortJuly: String { return self._s[2980]! } - public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[2981]! } - public var Channel_AdminLog_BanSendMedia: String { return self._s[2982]! } - public var Passport_Identity_ReverseSide: String { return self._s[2983]! } - public var Watch_Stickers_Recents: String { return self._s[2986]! } - public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[2988]! } - public var Map_SendThisLocation: String { return self._s[2989]! } + public var Stickers_GroupStickers: String { return self._s[2987]! } + public var ConvertToSupergroup_HelpTitle: String { return self._s[2989]! } + public var Passport_Address_Street: String { return self._s[2990]! } + public var Conversation_AddContact: String { return self._s[2991]! } + public var Login_PhonePlaceholder: String { return self._s[2992]! } + public var Channel_Members_InviteLink: String { return self._s[2994]! } + public var Bot_Stop: String { return self._s[2995]! } + public var SettingsSearch_Synonyms_Proxy_UseForCalls: String { return self._s[2997]! } + public var Notification_PassportValueAddress: String { return self._s[2998]! } + public var Month_ShortJuly: String { return self._s[2999]! } + public var Passport_Address_TypeTemporaryRegistrationUploadScan: String { return self._s[3000]! } + public var Channel_AdminLog_BanSendMedia: String { return self._s[3001]! } + public var Passport_Identity_ReverseSide: String { return self._s[3002]! } + public var Watch_Stickers_Recents: String { return self._s[3005]! } + public var PrivacyLastSeenSettings_EmpryUsersPlaceholder: String { return self._s[3007]! } + public var Map_SendThisLocation: String { return self._s[3008]! } public func Time_MonthOfYear_m1(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2990]!, self._r[2990]!, [_0]) - } - public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2991]!, self._r[2991]!, [_0]) - } - public var ConvertToSupergroup_Note: String { return self._s[2992]! } - public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2993]!, self._r[2993]!, [_0]) - } - public var NetworkUsageSettings_GeneralDataSection: String { return self._s[2994]! } - public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2995]!, self._r[2995]!, [_0, _1]) - } - public var Login_CallRequestState3: String { return self._s[2997]! } - public var Wallpaper_SearchShort: String { return self._s[2998]! } - public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3000]! } - public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3001]! } - public var Channel_BotDoesntSupportGroups: String { return self._s[3002]! } - public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3003]!, self._r[3003]!, [_1, _2]) - } - public var Channel_AdminLogFilter_Title: String { return self._s[3004]! } - public var Notifications_GroupNotificationsExceptions: String { return self._s[3008]! } - public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3009]!, self._r[3009]!, [_0]) } - public var Passport_CorrectErrors: String { return self._s[3010]! } + public func InviteText_SingleContact(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3010]!, self._r[3010]!, [_0]) + } + public var ConvertToSupergroup_Note: String { return self._s[3011]! } + public func FileSize_MB(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3012]!, self._r[3012]!, [_0]) + } + public var NetworkUsageSettings_GeneralDataSection: String { return self._s[3013]! } + public func Compatibility_SecretMediaVersionTooLow(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3014]!, self._r[3014]!, [_0, _1]) + } + public var Login_CallRequestState3: String { return self._s[3016]! } + public var Wallpaper_SearchShort: String { return self._s[3017]! } + public var SettingsSearch_Synonyms_Appearance_ColorTheme: String { return self._s[3019]! } + public var PasscodeSettings_UnlockWithFaceId: String { return self._s[3020]! } + public var Channel_BotDoesntSupportGroups: String { return self._s[3021]! } + public func PUSH_CHAT_MESSAGE_GEOLIVE(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3022]!, self._r[3022]!, [_1, _2]) + } + public var Channel_AdminLogFilter_Title: String { return self._s[3023]! } + public var Notifications_GroupNotificationsExceptions: String { return self._s[3027]! } + public func FileSize_B(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3028]!, self._r[3028]!, [_0]) + } + public var Passport_CorrectErrors: String { return self._s[3029]! } public func Channel_MessageTitleUpdated(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3011]!, self._r[3011]!, [_0]) + return formatWithArgumentRanges(self._s[3030]!, self._r[3030]!, [_0]) } - public var Map_SendMyCurrentLocation: String { return self._s[3012]! } - public var Channel_DiscussionGroup: String { return self._s[3013]! } + public var Map_SendMyCurrentLocation: String { return self._s[3031]! } + public var Channel_DiscussionGroup: String { return self._s[3032]! } public func PUSH_PINNED_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3014]!, self._r[3014]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3033]!, self._r[3033]!, [_1, _2]) } - public var SharedMedia_SearchNoResults: String { return self._s[3015]! } - public var Permissions_NotificationsText_v0: String { return self._s[3016]! } - public var Appearance_AppIcon: String { return self._s[3017]! } - public var LoginPassword_FloodError: String { return self._s[3018]! } - public var Group_Setup_HistoryHiddenHelp: String { return self._s[3020]! } + public var SharedMedia_SearchNoResults: String { return self._s[3034]! } + public var Permissions_NotificationsText_v0: String { return self._s[3035]! } + public var Appearance_AppIcon: String { return self._s[3036]! } + public var LoginPassword_FloodError: String { return self._s[3037]! } + public var Group_Setup_HistoryHiddenHelp: String { return self._s[3039]! } public func TwoStepAuth_PendingEmailHelp(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3021]!, self._r[3021]!, [_0]) + return formatWithArgumentRanges(self._s[3040]!, self._r[3040]!, [_0]) } - public var Passport_Language_bn: String { return self._s[3022]! } + public var Passport_Language_bn: String { return self._s[3041]! } public func DialogList_SingleUploadingPhotoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3023]!, self._r[3023]!, [_0]) + return formatWithArgumentRanges(self._s[3042]!, self._r[3042]!, [_0]) } public func Notification_PinnedAudioMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3024]!, self._r[3024]!, [_0]) + return formatWithArgumentRanges(self._s[3043]!, self._r[3043]!, [_0]) } public func Channel_AdminLog_MessageChangedGroupStickerPack(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3025]!, self._r[3025]!, [_0]) + return formatWithArgumentRanges(self._s[3044]!, self._r[3044]!, [_0]) } - public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3028]! } - public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3030]! } - public var Contacts_PermissionsAllow: String { return self._s[3031]! } - public var ReportPeer_ReasonCopyright: String { return self._s[3032]! } - public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3033]! } - public var WallpaperPreview_Pattern: String { return self._s[3034]! } - public var Paint_Duplicate: String { return self._s[3035]! } - public var Passport_Address_Country: String { return self._s[3036]! } - public var Notification_RenamedChannel: String { return self._s[3038]! } - public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3039]! } - public var Group_MessagePhotoUpdated: String { return self._s[3040]! } - public var Channel_BanUser_PermissionSendMedia: String { return self._s[3041]! } - public var Conversation_ContextMenuBan: String { return self._s[3042]! } - public var TwoStepAuth_EmailSent: String { return self._s[3043]! } - public var MessagePoll_NoVotes: String { return self._s[3044]! } - public var Passport_Language_is: String { return self._s[3045]! } - public var PeopleNearby_UsersEmpty: String { return self._s[3047]! } - public var Tour_Text5: String { return self._s[3048]! } + public var GroupInfo_InvitationLinkGroupFull: String { return self._s[3047]! } + public var Group_EditAdmin_PermissionChangeInfo: String { return self._s[3049]! } + public var Contacts_PermissionsAllow: String { return self._s[3050]! } + public var ReportPeer_ReasonCopyright: String { return self._s[3051]! } + public var Channel_EditAdmin_PermissinAddAdminOn: String { return self._s[3052]! } + public var WallpaperPreview_Pattern: String { return self._s[3053]! } + public var Paint_Duplicate: String { return self._s[3054]! } + public var Passport_Address_Country: String { return self._s[3055]! } + public var Notification_RenamedChannel: String { return self._s[3057]! } + public var CheckoutInfo_ErrorPostcodeInvalid: String { return self._s[3058]! } + public var Group_MessagePhotoUpdated: String { return self._s[3059]! } + public var Channel_BanUser_PermissionSendMedia: String { return self._s[3060]! } + public var Conversation_ContextMenuBan: String { return self._s[3061]! } + public var TwoStepAuth_EmailSent: String { return self._s[3062]! } + public var MessagePoll_NoVotes: String { return self._s[3063]! } + public var Passport_Language_is: String { return self._s[3064]! } + public var PeopleNearby_UsersEmpty: String { return self._s[3066]! } + public var Tour_Text5: String { return self._s[3067]! } public func Call_GroupFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3050]!, self._r[3050]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3069]!, self._r[3069]!, [_1, _2]) } - public var Undo_SecretChatDeleted: String { return self._s[3051]! } - public var SocksProxySetup_ShareQRCode: String { return self._s[3052]! } - public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3053]! } - public var Paint_Edit: String { return self._s[3055]! } - public var Undo_DeletedGroup: String { return self._s[3058]! } - public var LoginPassword_ForgotPassword: String { return self._s[3059]! } - public var GroupInfo_GroupNamePlaceholder: String { return self._s[3060]! } + public var Undo_SecretChatDeleted: String { return self._s[3070]! } + public var SocksProxySetup_ShareQRCode: String { return self._s[3071]! } + public var LogoutOptions_ChangePhoneNumberText: String { return self._s[3072]! } + public var Paint_Edit: String { return self._s[3074]! } + public var Undo_DeletedGroup: String { return self._s[3077]! } + public var LoginPassword_ForgotPassword: String { return self._s[3078]! } + public var GroupInfo_GroupNamePlaceholder: String { return self._s[3079]! } public func Notification_Kicked(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3061]!, self._r[3061]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3080]!, self._r[3080]!, [_0, _1]) } - public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3062]! } - public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3063]! } - public var Passport_Language_uz: String { return self._s[3064]! } - public var Conversation_PinMessageAlertGroup: String { return self._s[3065]! } - public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3066]! } - public var Map_StopLiveLocation: String { return self._s[3068]! } - public var PasscodeSettings_Help: String { return self._s[3070]! } - public var NotificationsSound_Input: String { return self._s[3071]! } - public var Share_Title: String { return self._s[3074]! } - public var LogoutOptions_Title: String { return self._s[3075]! } - public var Login_TermsOfServiceAgree: String { return self._s[3076]! } - public var Compose_NewEncryptedChatTitle: String { return self._s[3077]! } - public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3078]! } - public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3079]! } - public var EnterPasscode_EnterTitle: String { return self._s[3080]! } + public var Conversation_InputTextCaptionPlaceholder: String { return self._s[3081]! } + public var AutoDownloadSettings_VideoMessagesTitle: String { return self._s[3082]! } + public var Passport_Language_uz: String { return self._s[3083]! } + public var Conversation_PinMessageAlertGroup: String { return self._s[3084]! } + public var SettingsSearch_Synonyms_Privacy_GroupsAndChannels: String { return self._s[3085]! } + public var Map_StopLiveLocation: String { return self._s[3087]! } + public var PasscodeSettings_Help: String { return self._s[3089]! } + public var NotificationsSound_Input: String { return self._s[3090]! } + public var Share_Title: String { return self._s[3093]! } + public var LogoutOptions_Title: String { return self._s[3094]! } + public var Login_TermsOfServiceAgree: String { return self._s[3095]! } + public var Compose_NewEncryptedChatTitle: String { return self._s[3096]! } + public var Channel_AdminLog_TitleSelectedEvents: String { return self._s[3097]! } + public var Channel_EditAdmin_PermissionEditMessages: String { return self._s[3098]! } + public var EnterPasscode_EnterTitle: String { return self._s[3099]! } public func Call_PrivacyErrorMessage(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3081]!, self._r[3081]!, [_0]) + return formatWithArgumentRanges(self._s[3100]!, self._r[3100]!, [_0]) } - public var Settings_CopyPhoneNumber: String { return self._s[3082]! } - public var Conversation_AddToContacts: String { return self._s[3083]! } - public var NotificationsSound_Keys: String { return self._s[3084]! } + public var Settings_CopyPhoneNumber: String { return self._s[3101]! } + public var Conversation_AddToContacts: String { return self._s[3102]! } + public var NotificationsSound_Keys: String { return self._s[3103]! } public func Call_ParticipantVersionOutdatedError(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3085]!, self._r[3085]!, [_0]) + return formatWithArgumentRanges(self._s[3104]!, self._r[3104]!, [_0]) } - public var Notification_MessageLifetime1w: String { return self._s[3086]! } - public var Message_Video: String { return self._s[3087]! } - public var AutoDownloadSettings_CellularTitle: String { return self._s[3088]! } + public var Notification_MessageLifetime1w: String { return self._s[3105]! } + public var Message_Video: String { return self._s[3106]! } + public var AutoDownloadSettings_CellularTitle: String { return self._s[3107]! } public func PUSH_CHANNEL_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3089]!, self._r[3089]!, [_1]) + return formatWithArgumentRanges(self._s[3108]!, self._r[3108]!, [_1]) } public func Notification_JoinedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3092]!, self._r[3092]!, [_0]) + return formatWithArgumentRanges(self._s[3111]!, self._r[3111]!, [_0]) } public func PrivacySettings_LastSeenContactsPlus(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3093]!, self._r[3093]!, [_0]) + return formatWithArgumentRanges(self._s[3112]!, self._r[3112]!, [_0]) } - public var Passport_Language_mk: String { return self._s[3094]! } - public var CreatePoll_CancelConfirmation: String { return self._s[3095]! } - public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3097]! } - public var PrivacyPolicy_Decline: String { return self._s[3098]! } - public var Passport_Identity_DoesNotExpire: String { return self._s[3099]! } - public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3100]! } - public var Permissions_SiriAllow_v0: String { return self._s[3102]! } - public var Appearance_ThemeCarouselNight: String { return self._s[3103]! } + public var Passport_Language_mk: String { return self._s[3113]! } + public var CreatePoll_CancelConfirmation: String { return self._s[3114]! } + public var Conversation_SilentBroadcastTooltipOn: String { return self._s[3116]! } + public var PrivacyPolicy_Decline: String { return self._s[3117]! } + public var Passport_Identity_DoesNotExpire: String { return self._s[3118]! } + public var Channel_AdminLogFilter_EventsRestrictions: String { return self._s[3119]! } + public var Permissions_SiriAllow_v0: String { return self._s[3121]! } + public var Appearance_ThemeCarouselNight: String { return self._s[3122]! } public func LOCAL_CHAT_MESSAGE_FWDS(_ _1: String, _ _2: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3104]!, self._r[3104]!, [_1, "\(_2)"]) + return formatWithArgumentRanges(self._s[3123]!, self._r[3123]!, [_1, "\(_2)"]) } public func Notification_RenamedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3105]!, self._r[3105]!, [_0]) + return formatWithArgumentRanges(self._s[3124]!, self._r[3124]!, [_0]) } - public var Paint_Regular: String { return self._s[3106]! } - public var ChatSettings_AutoDownloadReset: String { return self._s[3107]! } - public var SocksProxySetup_ShareLink: String { return self._s[3108]! } - public var BlockedUsers_SelectUserTitle: String { return self._s[3109]! } - public var GroupInfo_InviteByLink: String { return self._s[3111]! } - public var MessageTimer_Custom: String { return self._s[3112]! } - public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3113]! } - public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3115]! } - public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3116]! } - public var Channel_Username_InvalidTaken: String { return self._s[3117]! } - public var Conversation_ClousStorageInfo_Description3: String { return self._s[3118]! } - public var Settings_ChatBackground: String { return self._s[3119]! } - public var Channel_Subscribers_Title: String { return self._s[3120]! } - public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3121]! } - public var Watch_ConnectionDescription: String { return self._s[3122]! } - public var ChatList_ArchivedChatsTitle: String { return self._s[3126]! } - public var Wallpaper_ResetWallpapers: String { return self._s[3127]! } - public var EditProfile_Title: String { return self._s[3128]! } - public var NotificationsSound_Bamboo: String { return self._s[3130]! } - public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3132]! } - public var Login_SmsRequestState2: String { return self._s[3133]! } - public var Passport_Language_ar: String { return self._s[3134]! } + public var Paint_Regular: String { return self._s[3125]! } + public var ChatSettings_AutoDownloadReset: String { return self._s[3126]! } + public var SocksProxySetup_ShareLink: String { return self._s[3127]! } + public var BlockedUsers_SelectUserTitle: String { return self._s[3128]! } + public var GroupInfo_InviteByLink: String { return self._s[3130]! } + public var MessageTimer_Custom: String { return self._s[3131]! } + public var UserInfo_NotificationsDefaultEnabled: String { return self._s[3132]! } + public var Passport_Address_TypeTemporaryRegistration: String { return self._s[3134]! } + public var ChatSettings_AutoDownloadUsingWiFi: String { return self._s[3135]! } + public var Channel_Username_InvalidTaken: String { return self._s[3136]! } + public var Conversation_ClousStorageInfo_Description3: String { return self._s[3137]! } + public var Settings_ChatBackground: String { return self._s[3138]! } + public var Channel_Subscribers_Title: String { return self._s[3139]! } + public var ApplyLanguage_ChangeLanguageTitle: String { return self._s[3140]! } + public var Watch_ConnectionDescription: String { return self._s[3141]! } + public var ChatList_ArchivedChatsTitle: String { return self._s[3145]! } + public var Wallpaper_ResetWallpapers: String { return self._s[3146]! } + public var EditProfile_Title: String { return self._s[3147]! } + public var NotificationsSound_Bamboo: String { return self._s[3149]! } + public var Channel_AdminLog_MessagePreviousMessage: String { return self._s[3151]! } + public var Login_SmsRequestState2: String { return self._s[3152]! } + public var Passport_Language_ar: String { return self._s[3153]! } public func Message_AuthorPinnedGame(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3135]!, self._r[3135]!, [_0]) + return formatWithArgumentRanges(self._s[3154]!, self._r[3154]!, [_0]) } - public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3136]! } - public var Conversation_MessageDialogEdit: String { return self._s[3137]! } + public var SettingsSearch_Synonyms_EditProfile_Title: String { return self._s[3155]! } + public var Conversation_MessageDialogEdit: String { return self._s[3156]! } public func PUSH_AUTH_UNKNOWN(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3138]!, self._r[3138]!, [_1]) + return formatWithArgumentRanges(self._s[3157]!, self._r[3157]!, [_1]) } - public var Common_Close: String { return self._s[3139]! } - public var GroupInfo_PublicLink: String { return self._s[3140]! } - public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3141]! } - public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3142]! } + public var Common_Close: String { return self._s[3158]! } + public var GroupInfo_PublicLink: String { return self._s[3159]! } + public var Channel_OwnershipTransfer_ErrorPrivacyRestricted: String { return self._s[3160]! } + public var SettingsSearch_Synonyms_Notifications_GroupNotificationsPreview: String { return self._s[3161]! } public func Channel_AdminLog_MessageToggleInvitesOff(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3146]!, self._r[3146]!, [_0]) + return formatWithArgumentRanges(self._s[3165]!, self._r[3165]!, [_0]) } - public var UserInfo_About_Placeholder: String { return self._s[3147]! } + public var UserInfo_About_Placeholder: String { return self._s[3166]! } public func Conversation_FileHowToText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3148]!, self._r[3148]!, [_0]) + return formatWithArgumentRanges(self._s[3167]!, self._r[3167]!, [_0]) } - public var GroupInfo_Permissions_SectionTitle: String { return self._s[3149]! } - public var Channel_Info_Banned: String { return self._s[3151]! } + public var GroupInfo_Permissions_SectionTitle: String { return self._s[3168]! } + public var Channel_Info_Banned: String { return self._s[3170]! } public func Time_MonthOfYear_m11(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3152]!, self._r[3152]!, [_0]) + return formatWithArgumentRanges(self._s[3171]!, self._r[3171]!, [_0]) } - public var Appearance_Other: String { return self._s[3153]! } - public var Passport_Language_my: String { return self._s[3154]! } - public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3155]! } + public var Appearance_Other: String { return self._s[3172]! } + public var Passport_Language_my: String { return self._s[3173]! } + public var Group_Setup_BasicHistoryHiddenHelp: String { return self._s[3174]! } public func Time_PreciseDate_m9(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3156]!, self._r[3156]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3175]!, self._r[3175]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3157]! } - public var Preview_CopyAddress: String { return self._s[3158]! } + public var SettingsSearch_Synonyms_Privacy_PasscodeAndFaceId: String { return self._s[3176]! } + public var Preview_CopyAddress: String { return self._s[3177]! } public func DialogList_SinglePlayingGameSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3159]!, self._r[3159]!, [_0]) + return formatWithArgumentRanges(self._s[3178]!, self._r[3178]!, [_0]) } - public var KeyCommand_JumpToPreviousChat: String { return self._s[3160]! } - public var UserInfo_BotSettings: String { return self._s[3161]! } - public var LiveLocation_MenuStopAll: String { return self._s[3163]! } - public var Passport_PasswordCreate: String { return self._s[3164]! } - public var StickerSettings_MaskContextInfo: String { return self._s[3165]! } - public var Message_PinnedLocationMessage: String { return self._s[3166]! } - public var Map_Satellite: String { return self._s[3167]! } - public var Watch_Message_Unsupported: String { return self._s[3168]! } - public var Username_TooManyPublicUsernamesError: String { return self._s[3169]! } - public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3170]! } + public var KeyCommand_JumpToPreviousChat: String { return self._s[3179]! } + public var UserInfo_BotSettings: String { return self._s[3180]! } + public var LiveLocation_MenuStopAll: String { return self._s[3182]! } + public var Passport_PasswordCreate: String { return self._s[3183]! } + public var StickerSettings_MaskContextInfo: String { return self._s[3184]! } + public var Message_PinnedLocationMessage: String { return self._s[3185]! } + public var Map_Satellite: String { return self._s[3186]! } + public var Watch_Message_Unsupported: String { return self._s[3187]! } + public var Username_TooManyPublicUsernamesError: String { return self._s[3188]! } + public var TwoStepAuth_EnterPasswordInvalid: String { return self._s[3189]! } public func Notification_PinnedTextMessage(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3171]!, self._r[3171]!, [_0, _1]) + return formatWithArgumentRanges(self._s[3190]!, self._r[3190]!, [_0, _1]) } public func Conversation_OpenBotLinkText(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3172]!, self._r[3172]!, [_0]) - } - public var Notifications_ChannelNotificationsHelp: String { return self._s[3173]! } - public var Privacy_Calls_P2PContacts: String { return self._s[3174]! } - public var NotificationsSound_None: String { return self._s[3175]! } - public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3177]! } - public var AccessDenied_VoiceMicrophone: String { return self._s[3178]! } - public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3179]!, self._r[3179]!, [_1]) - } - public var Cache_Indexing: String { return self._s[3180]! } - public var DialogList_RecentTitlePeople: String { return self._s[3182]! } - public var DialogList_EncryptionRejected: String { return self._s[3183]! } - public var GroupInfo_Administrators: String { return self._s[3184]! } - public var Passport_ScanPassportHelp: String { return self._s[3185]! } - public var Application_Name: String { return self._s[3186]! } - public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3187]! } - public var Appearance_ThemeCarouselDay: String { return self._s[3189]! } - public var Passport_Identity_TranslationHelp: String { return self._s[3190]! } - public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3191]!, self._r[3191]!, [_0]) } + public var Notifications_ChannelNotificationsHelp: String { return self._s[3192]! } + public var Privacy_Calls_P2PContacts: String { return self._s[3193]! } + public var NotificationsSound_None: String { return self._s[3194]! } + public var Channel_DiscussionGroup_UnlinkGroup: String { return self._s[3196]! } + public var AccessDenied_VoiceMicrophone: String { return self._s[3197]! } + public func ApplyLanguage_ChangeLanguageAlreadyActive(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3198]!, self._r[3198]!, [_1]) + } + public var Cache_Indexing: String { return self._s[3199]! } + public var DialogList_RecentTitlePeople: String { return self._s[3201]! } + public var DialogList_EncryptionRejected: String { return self._s[3202]! } + public var GroupInfo_Administrators: String { return self._s[3203]! } + public var Passport_ScanPassportHelp: String { return self._s[3204]! } + public var Application_Name: String { return self._s[3205]! } + public var Channel_AdminLogFilter_ChannelEventsInfo: String { return self._s[3206]! } + public var Appearance_ThemeCarouselDay: String { return self._s[3208]! } + public var Passport_Identity_TranslationHelp: String { return self._s[3209]! } + public func Notification_JoinedGroupByLink(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3210]!, self._r[3210]!, [_0]) + } public func DialogList_EncryptedChatStartedOutgoing(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3192]!, self._r[3192]!, [_0]) + return formatWithArgumentRanges(self._s[3211]!, self._r[3211]!, [_0]) } - public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3193]! } - public var Privacy_ChatsTitle: String { return self._s[3194]! } - public var DialogList_ClearHistoryConfirmation: String { return self._s[3195]! } - public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3196]! } - public var Watch_Suggestion_HoldOn: String { return self._s[3197]! } - public var Group_EditAdmin_TransferOwnership: String { return self._s[3198]! } - public var Group_LinkedChannel: String { return self._s[3199]! } - public var SocksProxySetup_RequiredCredentials: String { return self._s[3200]! } - public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3201]! } - public var TwoStepAuth_EmailSkipAlert: String { return self._s[3202]! } - public var Channel_Setup_TypePublic: String { return self._s[3205]! } + public var Channel_EditAdmin_PermissionDeleteMessages: String { return self._s[3212]! } + public var Privacy_ChatsTitle: String { return self._s[3213]! } + public var DialogList_ClearHistoryConfirmation: String { return self._s[3214]! } + public var SettingsSearch_Synonyms_Data_Storage_ClearCache: String { return self._s[3215]! } + public var Watch_Suggestion_HoldOn: String { return self._s[3216]! } + public var Group_EditAdmin_TransferOwnership: String { return self._s[3217]! } + public var Group_LinkedChannel: String { return self._s[3218]! } + public var SocksProxySetup_RequiredCredentials: String { return self._s[3219]! } + public var Passport_Address_TypeRentalAgreementUploadScan: String { return self._s[3220]! } + public var TwoStepAuth_EmailSkipAlert: String { return self._s[3221]! } + public var Channel_Setup_TypePublic: String { return self._s[3224]! } public func Channel_AdminLog_MessageToggleInvitesOn(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3206]!, self._r[3206]!, [_0]) + return formatWithArgumentRanges(self._s[3225]!, self._r[3225]!, [_0]) } - public var Channel_TypeSetup_Title: String { return self._s[3208]! } - public var Map_OpenInMaps: String { return self._s[3210]! } + public var Channel_TypeSetup_Title: String { return self._s[3227]! } + public var Map_OpenInMaps: String { return self._s[3229]! } public func PUSH_PINNED_NOTEXT(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3211]!, self._r[3211]!, [_1]) + return formatWithArgumentRanges(self._s[3230]!, self._r[3230]!, [_1]) } - public var NotificationsSound_Tremolo: String { return self._s[3213]! } + public var NotificationsSound_Tremolo: String { return self._s[3232]! } public func Date_ChatDateHeaderYear(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3214]!, self._r[3214]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3233]!, self._r[3233]!, [_1, _2, _3]) } - public var ConversationProfile_UnknownAddMemberError: String { return self._s[3215]! } - public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3216]! } - public var Passport_PasswordHelp: String { return self._s[3217]! } - public var Login_CodeExpiredError: String { return self._s[3218]! } - public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3219]! } - public var Conversation_TitleUnmute: String { return self._s[3220]! } - public var Passport_Identity_ScansHelp: String { return self._s[3221]! } - public var Passport_Language_lo: String { return self._s[3222]! } - public var Camera_FlashAuto: String { return self._s[3223]! } - public var Conversation_OpenBotLinkOpen: String { return self._s[3224]! } - public var Common_Cancel: String { return self._s[3225]! } - public var DialogList_SavedMessagesTooltip: String { return self._s[3226]! } - public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3227]! } - public var Appearance_TintAllColors: String { return self._s[3228]! } + public var ConversationProfile_UnknownAddMemberError: String { return self._s[3234]! } + public var Channel_OwnershipTransfer_PasswordPlaceholder: String { return self._s[3235]! } + public var Passport_PasswordHelp: String { return self._s[3236]! } + public var Login_CodeExpiredError: String { return self._s[3237]! } + public var Channel_EditAdmin_PermissionChangeInfo: String { return self._s[3238]! } + public var Conversation_TitleUnmute: String { return self._s[3239]! } + public var Passport_Identity_ScansHelp: String { return self._s[3240]! } + public var Passport_Language_lo: String { return self._s[3241]! } + public var Camera_FlashAuto: String { return self._s[3242]! } + public var Conversation_OpenBotLinkOpen: String { return self._s[3243]! } + public var Common_Cancel: String { return self._s[3244]! } + public var DialogList_SavedMessagesTooltip: String { return self._s[3245]! } + public var TwoStepAuth_SetupPasswordTitle: String { return self._s[3246]! } + public var Appearance_TintAllColors: String { return self._s[3247]! } public func PUSH_MESSAGE_FWD(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3229]!, self._r[3229]!, [_1]) + return formatWithArgumentRanges(self._s[3248]!, self._r[3248]!, [_1]) } - public var Conversation_ReportSpamConfirmation: String { return self._s[3230]! } - public var ChatSettings_Title: String { return self._s[3232]! } - public var Passport_PasswordReset: String { return self._s[3233]! } - public var SocksProxySetup_TypeNone: String { return self._s[3234]! } - public var PhoneNumberHelp_Help: String { return self._s[3236]! } - public var Checkout_EnterPassword: String { return self._s[3237]! } - public var Share_AuthTitle: String { return self._s[3239]! } - public var Activity_UploadingDocument: String { return self._s[3240]! } - public var State_Connecting: String { return self._s[3241]! } - public var Profile_MessageLifetime1w: String { return self._s[3242]! } - public var Conversation_ContextMenuReport: String { return self._s[3243]! } - public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3244]! } - public var AutoNightTheme_ScheduledTo: String { return self._s[3245]! } - public var AuthSessions_Terminate: String { return self._s[3246]! } - public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3247]! } - public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3248]! } - public var PhotoEditor_Set: String { return self._s[3249]! } - public var EmptyGroupInfo_Title: String { return self._s[3250]! } - public var Login_PadPhoneHelp: String { return self._s[3251]! } - public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3253]! } - public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3255]! } - public var NotificationsSound_Complete: String { return self._s[3256]! } - public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3257]! } - public var Group_Info_AdminLog: String { return self._s[3258]! } - public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3259]! } - public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3260]! } - public var Conversation_Admin: String { return self._s[3262]! } - public var Conversation_GifTooltip: String { return self._s[3263]! } - public var Passport_NotLoggedInMessage: String { return self._s[3264]! } + public var Conversation_ReportSpamConfirmation: String { return self._s[3249]! } + public var ChatSettings_Title: String { return self._s[3251]! } + public var Passport_PasswordReset: String { return self._s[3252]! } + public var SocksProxySetup_TypeNone: String { return self._s[3253]! } + public var PhoneNumberHelp_Help: String { return self._s[3255]! } + public var Checkout_EnterPassword: String { return self._s[3256]! } + public var Share_AuthTitle: String { return self._s[3258]! } + public var Activity_UploadingDocument: String { return self._s[3259]! } + public var State_Connecting: String { return self._s[3260]! } + public var Profile_MessageLifetime1w: String { return self._s[3261]! } + public var Conversation_ContextMenuReport: String { return self._s[3262]! } + public var CheckoutInfo_ReceiverInfoPhone: String { return self._s[3263]! } + public var AutoNightTheme_ScheduledTo: String { return self._s[3264]! } + public var AuthSessions_Terminate: String { return self._s[3265]! } + public var Checkout_NewCard_CardholderNamePlaceholder: String { return self._s[3266]! } + public var KeyCommand_JumpToPreviousUnreadChat: String { return self._s[3267]! } + public var PhotoEditor_Set: String { return self._s[3268]! } + public var EmptyGroupInfo_Title: String { return self._s[3269]! } + public var Login_PadPhoneHelp: String { return self._s[3270]! } + public var AutoDownloadSettings_TypeGroupChats: String { return self._s[3272]! } + public var PrivacyPolicy_DeclineLastWarning: String { return self._s[3274]! } + public var NotificationsSound_Complete: String { return self._s[3275]! } + public var SettingsSearch_Synonyms_Privacy_Data_Title: String { return self._s[3276]! } + public var Group_Info_AdminLog: String { return self._s[3277]! } + public var GroupPermission_NotAvailableInPublicGroups: String { return self._s[3278]! } + public var Channel_AdminLog_InfoPanelAlertText: String { return self._s[3279]! } + public var Conversation_Admin: String { return self._s[3281]! } + public var Conversation_GifTooltip: String { return self._s[3282]! } + public var Passport_NotLoggedInMessage: String { return self._s[3283]! } public func AutoDownloadSettings_OnFor(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3265]!, self._r[3265]!, [_0]) - } - public var Profile_MessageLifetimeForever: String { return self._s[3266]! } - public var SharedMedia_EmptyTitle: String { return self._s[3268]! } - public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3270]! } - public var Username_Help: String { return self._s[3271]! } - public var DialogList_LanguageTooltip: String { return self._s[3273]! } - public var Map_LoadError: String { return self._s[3274]! } - public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3275]! } - public var Channel_AdminLog_AddMembers: String { return self._s[3276]! } - public var ArchivedChats_IntroTitle2: String { return self._s[3277]! } - public var Notification_Exceptions_NewException: String { return self._s[3278]! } - public var TwoStepAuth_EmailTitle: String { return self._s[3279]! } - public var WatchRemote_AlertText: String { return self._s[3280]! } - public var ChatSettings_ConnectionType_Title: String { return self._s[3283]! } - public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3284]!, self._r[3284]!, [_0]) } - public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3285]! } - public var Passport_Address_CountryPlaceholder: String { return self._s[3286]! } + public var Profile_MessageLifetimeForever: String { return self._s[3285]! } + public var SharedMedia_EmptyTitle: String { return self._s[3287]! } + public var Channel_Edit_PrivatePublicLinkAlert: String { return self._s[3289]! } + public var Username_Help: String { return self._s[3290]! } + public var DialogList_LanguageTooltip: String { return self._s[3292]! } + public var Map_LoadError: String { return self._s[3293]! } + public var Login_PhoneNumberAlreadyAuthorized: String { return self._s[3294]! } + public var Channel_AdminLog_AddMembers: String { return self._s[3295]! } + public var ArchivedChats_IntroTitle2: String { return self._s[3296]! } + public var Notification_Exceptions_NewException: String { return self._s[3297]! } + public var TwoStepAuth_EmailTitle: String { return self._s[3298]! } + public var WatchRemote_AlertText: String { return self._s[3299]! } + public var ChatSettings_ConnectionType_Title: String { return self._s[3302]! } + public func Settings_CheckPhoneNumberTitle(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3303]!, self._r[3303]!, [_0]) + } + public var SettingsSearch_Synonyms_Calls_CallTab: String { return self._s[3304]! } + public var Passport_Address_CountryPlaceholder: String { return self._s[3305]! } public func DialogList_AwaitingEncryption(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3287]!, self._r[3287]!, [_0]) + return formatWithArgumentRanges(self._s[3306]!, self._r[3306]!, [_0]) } public func Time_PreciseDate_m6(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3288]!, self._r[3288]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3307]!, self._r[3307]!, [_1, _2, _3]) } - public var Group_AdminLog_EmptyText: String { return self._s[3289]! } - public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3290]! } - public var Conversation_PrivateChannelTooltip: String { return self._s[3292]! } - public var ChatList_UndoArchiveText1: String { return self._s[3293]! } - public var AccessDenied_VideoMicrophone: String { return self._s[3294]! } - public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3295]! } - public var Cache_ClearNone: String { return self._s[3296]! } - public var SocksProxySetup_FailedToConnect: String { return self._s[3297]! } - public var Permissions_NotificationsTitle_v0: String { return self._s[3298]! } + public var Group_AdminLog_EmptyText: String { return self._s[3308]! } + public var SettingsSearch_Synonyms_Appearance_Title: String { return self._s[3309]! } + public var Conversation_PrivateChannelTooltip: String { return self._s[3311]! } + public var ChatList_UndoArchiveText1: String { return self._s[3312]! } + public var AccessDenied_VideoMicrophone: String { return self._s[3313]! } + public var Conversation_ContextMenuStickerPackAdd: String { return self._s[3314]! } + public var Cache_ClearNone: String { return self._s[3315]! } + public var SocksProxySetup_FailedToConnect: String { return self._s[3316]! } + public var Permissions_NotificationsTitle_v0: String { return self._s[3317]! } public func Channel_AdminLog_MessageEdited(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3299]!, self._r[3299]!, [_0]) + return formatWithArgumentRanges(self._s[3318]!, self._r[3318]!, [_0]) } - public var Passport_Identity_Country: String { return self._s[3300]! } + public var Passport_Identity_Country: String { return self._s[3319]! } public func ChatSettings_AutoDownloadSettings_TypeFile(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3301]!, self._r[3301]!, [_0]) + return formatWithArgumentRanges(self._s[3320]!, self._r[3320]!, [_0]) } public func Notification_CreatedChat(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3302]!, self._r[3302]!, [_0]) + return formatWithArgumentRanges(self._s[3321]!, self._r[3321]!, [_0]) } - public var Exceptions_AddToExceptions: String { return self._s[3303]! } - public var AccessDenied_Settings: String { return self._s[3304]! } - public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3305]! } - public var Month_ShortMay: String { return self._s[3306]! } - public var Compose_NewGroup: String { return self._s[3307]! } - public var Group_Setup_TypePrivate: String { return self._s[3309]! } - public var Login_PadPhoneHelpTitle: String { return self._s[3311]! } - public var Appearance_ThemeDayClassic: String { return self._s[3312]! } - public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3313]! } - public var AutoDownloadSettings_OffForAll: String { return self._s[3314]! } - public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3315]! } - public var Conversation_typing: String { return self._s[3317]! } - public var Paint_Masks: String { return self._s[3318]! } - public var Contacts_DeselectAll: String { return self._s[3319]! } - public var Username_InvalidTaken: String { return self._s[3320]! } - public var Call_StatusNoAnswer: String { return self._s[3321]! } - public var TwoStepAuth_EmailAddSuccess: String { return self._s[3322]! } - public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3323]! } - public var Passport_Identity_Selfie: String { return self._s[3324]! } - public var Login_InfoLastNamePlaceholder: String { return self._s[3325]! } - public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3326]! } - public var Conversation_ClearSecretHistory: String { return self._s[3327]! } - public var PeopleNearby_Description: String { return self._s[3329]! } - public var NetworkUsageSettings_Title: String { return self._s[3330]! } - public var Your_cards_security_code_is_invalid: String { return self._s[3332]! } + public var Exceptions_AddToExceptions: String { return self._s[3322]! } + public var AccessDenied_Settings: String { return self._s[3323]! } + public var Passport_Address_TypeUtilityBillUploadScan: String { return self._s[3324]! } + public var Month_ShortMay: String { return self._s[3325]! } + public var Compose_NewGroup: String { return self._s[3326]! } + public var Group_Setup_TypePrivate: String { return self._s[3328]! } + public var Login_PadPhoneHelpTitle: String { return self._s[3330]! } + public var Appearance_ThemeDayClassic: String { return self._s[3331]! } + public var Channel_AdminLog_MessagePreviousCaption: String { return self._s[3332]! } + public var AutoDownloadSettings_OffForAll: String { return self._s[3333]! } + public var Privacy_GroupsAndChannels_WhoCanAddMe: String { return self._s[3334]! } + public var Conversation_typing: String { return self._s[3336]! } + public var Paint_Masks: String { return self._s[3337]! } + public var Contacts_DeselectAll: String { return self._s[3338]! } + public var Username_InvalidTaken: String { return self._s[3339]! } + public var Call_StatusNoAnswer: String { return self._s[3340]! } + public var TwoStepAuth_EmailAddSuccess: String { return self._s[3341]! } + public var SettingsSearch_Synonyms_Privacy_BlockedUsers: String { return self._s[3342]! } + public var Passport_Identity_Selfie: String { return self._s[3343]! } + public var Login_InfoLastNamePlaceholder: String { return self._s[3344]! } + public var Privacy_SecretChatsLinkPreviewsHelp: String { return self._s[3345]! } + public var Conversation_ClearSecretHistory: String { return self._s[3346]! } + public var PeopleNearby_Description: String { return self._s[3348]! } + public var NetworkUsageSettings_Title: String { return self._s[3349]! } + public var Your_cards_security_code_is_invalid: String { return self._s[3351]! } public func Notification_LeftChannel(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3334]!, self._r[3334]!, [_0]) + return formatWithArgumentRanges(self._s[3353]!, self._r[3353]!, [_0]) } public func Call_CallInProgressMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3335]!, self._r[3335]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3354]!, self._r[3354]!, [_1, _2]) } - public var SaveIncomingPhotosSettings_From: String { return self._s[3337]! } - public var Map_LiveLocationTitle: String { return self._s[3338]! } - public var Login_InfoAvatarAdd: String { return self._s[3339]! } - public var Passport_Identity_FilesView: String { return self._s[3340]! } - public var UserInfo_GenericPhoneLabel: String { return self._s[3341]! } - public var Privacy_Calls_NeverAllow: String { return self._s[3342]! } + public var SaveIncomingPhotosSettings_From: String { return self._s[3356]! } + public var Map_LiveLocationTitle: String { return self._s[3357]! } + public var Login_InfoAvatarAdd: String { return self._s[3358]! } + public var Passport_Identity_FilesView: String { return self._s[3359]! } + public var UserInfo_GenericPhoneLabel: String { return self._s[3360]! } + public var Privacy_Calls_NeverAllow: String { return self._s[3361]! } public func Contacts_AddPhoneNumber(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3343]!, self._r[3343]!, [_0]) + return formatWithArgumentRanges(self._s[3362]!, self._r[3362]!, [_0]) } - public var ContactInfo_PhoneNumberHidden: String { return self._s[3344]! } - public var TwoStepAuth_ConfirmationText: String { return self._s[3345]! } - public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3346]! } + public var ContactInfo_PhoneNumberHidden: String { return self._s[3363]! } + public var TwoStepAuth_ConfirmationText: String { return self._s[3364]! } + public var ChatSettings_AutomaticVideoMessageDownload: String { return self._s[3365]! } public func PUSH_CHAT_MESSAGE_VIDEOS(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3347]!, self._r[3347]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3366]!, self._r[3366]!, [_1, _2, _3]) } - public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3348]! } - public var Tour_Title2: String { return self._s[3349]! } - public var Conversation_FileOpenIn: String { return self._s[3350]! } - public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3351]! } - public var Wallpaper_Set: String { return self._s[3352]! } - public var Passport_Identity_Translations: String { return self._s[3354]! } + public var Channel_AdminLogFilter_AdminsAll: String { return self._s[3367]! } + public var Tour_Title2: String { return self._s[3368]! } + public var Conversation_FileOpenIn: String { return self._s[3369]! } + public var Checkout_ErrorPrecheckoutFailed: String { return self._s[3370]! } + public var Wallpaper_Set: String { return self._s[3371]! } + public var Passport_Identity_Translations: String { return self._s[3373]! } public func Channel_AdminLog_MessageChangedChannelAbout(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3355]!, self._r[3355]!, [_0]) + return formatWithArgumentRanges(self._s[3374]!, self._r[3374]!, [_0]) } - public var Channel_LeaveChannel: String { return self._s[3356]! } + public var Channel_LeaveChannel: String { return self._s[3375]! } public func PINNED_INVOICE(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3357]!, self._r[3357]!, [_1]) + return formatWithArgumentRanges(self._s[3376]!, self._r[3376]!, [_1]) } - public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3358]! } - public var PhotoEditor_HighlightsTint: String { return self._s[3359]! } - public var Passport_Email_Delete: String { return self._s[3360]! } - public var Conversation_Mute: String { return self._s[3362]! } - public var Channel_AddBotAsAdmin: String { return self._s[3363]! } - public var Channel_AdminLog_CanSendMessages: String { return self._s[3365]! } - public var Channel_Management_LabelOwner: String { return self._s[3367]! } + public var SettingsSearch_Synonyms_Proxy_AddProxy: String { return self._s[3377]! } + public var PhotoEditor_HighlightsTint: String { return self._s[3378]! } + public var Passport_Email_Delete: String { return self._s[3379]! } + public var Conversation_Mute: String { return self._s[3381]! } + public var Channel_AddBotAsAdmin: String { return self._s[3382]! } + public var Channel_AdminLog_CanSendMessages: String { return self._s[3384]! } + public var Channel_Management_LabelOwner: String { return self._s[3386]! } public func Notification_PassportValuesSentMessage(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3368]!, self._r[3368]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3387]!, self._r[3387]!, [_1, _2]) } - public var Calls_CallTabDescription: String { return self._s[3369]! } - public var Passport_Identity_NativeNameHelp: String { return self._s[3370]! } - public var Common_No: String { return self._s[3371]! } - public var Weekday_Sunday: String { return self._s[3372]! } - public var Notification_Reply: String { return self._s[3373]! } - public var Conversation_ViewMessage: String { return self._s[3374]! } + public var Calls_CallTabDescription: String { return self._s[3388]! } + public var Passport_Identity_NativeNameHelp: String { return self._s[3389]! } + public var Common_No: String { return self._s[3390]! } + public var Weekday_Sunday: String { return self._s[3391]! } + public var Notification_Reply: String { return self._s[3392]! } + public var Conversation_ViewMessage: String { return self._s[3393]! } public func Checkout_SavePasswordTimeoutAndFaceId(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3375]!, self._r[3375]!, [_0]) + return formatWithArgumentRanges(self._s[3394]!, self._r[3394]!, [_0]) } public func Map_LiveLocationPrivateDescription(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3376]!, self._r[3376]!, [_0]) - } - public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3377]! } - public var Message_PinnedDocumentMessage: String { return self._s[3378]! } - public var DialogList_TabTitle: String { return self._s[3380]! } - public var ChatSettings_AutoPlayTitle: String { return self._s[3381]! } - public var Passport_FieldEmail: String { return self._s[3382]! } - public var Conversation_UnpinMessageAlert: String { return self._s[3383]! } - public var Passport_Address_TypeBankStatement: String { return self._s[3384]! } - public var Passport_Identity_ExpiryDate: String { return self._s[3385]! } - public var Privacy_Calls_P2P: String { return self._s[3386]! } - public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3388]!, self._r[3388]!, [_0]) - } - public var SocksProxySetup_UseForCallsHelp: String { return self._s[3389]! } - public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3390]!, self._r[3390]!, [_1, _2]) - } - public var Stickers_ClearRecent: String { return self._s[3391]! } - public var EnterPasscode_ChangeTitle: String { return self._s[3392]! } - public var Passport_InfoText: String { return self._s[3393]! } - public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3394]! } - public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3395]!, self._r[3395]!, [_0]) } + public var SettingsSearch_Synonyms_EditProfile_AddAccount: String { return self._s[3396]! } + public var Message_PinnedDocumentMessage: String { return self._s[3397]! } + public var DialogList_TabTitle: String { return self._s[3399]! } + public var ChatSettings_AutoPlayTitle: String { return self._s[3400]! } + public var Passport_FieldEmail: String { return self._s[3401]! } + public var Conversation_UnpinMessageAlert: String { return self._s[3402]! } + public var Passport_Address_TypeBankStatement: String { return self._s[3403]! } + public var Passport_Identity_ExpiryDate: String { return self._s[3404]! } + public var Privacy_Calls_P2P: String { return self._s[3405]! } + public func CancelResetAccount_Success(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3407]!, self._r[3407]!, [_0]) + } + public var SocksProxySetup_UseForCallsHelp: String { return self._s[3408]! } + public func PUSH_CHAT_ALBUM(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3409]!, self._r[3409]!, [_1, _2]) + } + public var Stickers_ClearRecent: String { return self._s[3410]! } + public var EnterPasscode_ChangeTitle: String { return self._s[3411]! } + public var Passport_InfoText: String { return self._s[3412]! } + public var Checkout_NewCard_SaveInfoEnableHelp: String { return self._s[3413]! } + public func Login_InvalidPhoneEmailSubject(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3414]!, self._r[3414]!, [_0]) + } public func Time_PreciseDate_m3(_ _1: String, _ _2: String, _ _3: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3396]!, self._r[3396]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[3415]!, self._r[3415]!, [_1, _2, _3]) } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3397]! } - public var Passport_Identity_EditDriversLicense: String { return self._s[3398]! } - public var Conversation_TapAndHoldToRecord: String { return self._s[3400]! } - public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3401]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChannels: String { return self._s[3416]! } + public var Passport_Identity_EditDriversLicense: String { return self._s[3417]! } + public var Conversation_TapAndHoldToRecord: String { return self._s[3419]! } + public var SettingsSearch_Synonyms_Notifications_BadgeIncludeMutedChats: String { return self._s[3420]! } public func Notification_CallTimeFormat(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3402]!, self._r[3402]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3421]!, self._r[3421]!, [_1, _2]) } - public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3404]! } + public var Channel_EditAdmin_PermissionInviteViaLink: String { return self._s[3423]! } public func Generic_OpenHiddenLinkAlert(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3406]!, self._r[3406]!, [_0]) + return formatWithArgumentRanges(self._s[3425]!, self._r[3425]!, [_0]) } - public var DialogList_Unread: String { return self._s[3407]! } + public var DialogList_Unread: String { return self._s[3426]! } public func PUSH_CHAT_MESSAGE_GIF(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3408]!, self._r[3408]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3427]!, self._r[3427]!, [_1, _2]) } - public var User_DeletedAccount: String { return self._s[3409]! } - public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3410]! } + public var User_DeletedAccount: String { return self._s[3428]! } + public var OwnershipTransfer_SetupTwoStepAuth: String { return self._s[3429]! } public func Watch_Time_ShortYesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3411]!, self._r[3411]!, [_0]) + return formatWithArgumentRanges(self._s[3430]!, self._r[3430]!, [_0]) } - public var UserInfo_NotificationsDefault: String { return self._s[3412]! } - public var SharedMedia_CategoryMedia: String { return self._s[3413]! } - public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3414]! } - public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3415]! } - public var Watch_ChatList_Compose: String { return self._s[3416]! } - public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3417]! } - public var AutoDownloadSettings_Delimeter: String { return self._s[3418]! } - public var Watch_Microphone_Access: String { return self._s[3419]! } - public var Group_Setup_HistoryHeader: String { return self._s[3420]! } - public var Map_SetThisLocation: String { return self._s[3421]! } - public var Activity_UploadingPhoto: String { return self._s[3422]! } - public var Conversation_Edit: String { return self._s[3424]! } - public var Group_ErrorSendRestrictedMedia: String { return self._s[3425]! } - public var Login_TermsOfServiceDecline: String { return self._s[3426]! } - public var Message_PinnedContactMessage: String { return self._s[3427]! } + public var UserInfo_NotificationsDefault: String { return self._s[3431]! } + public var SharedMedia_CategoryMedia: String { return self._s[3432]! } + public var SocksProxySetup_ProxyStatusUnavailable: String { return self._s[3433]! } + public var Channel_AdminLog_MessageRestrictedForever: String { return self._s[3434]! } + public var Watch_ChatList_Compose: String { return self._s[3435]! } + public var Notifications_MessageNotificationsExceptionsHelp: String { return self._s[3436]! } + public var AutoDownloadSettings_Delimeter: String { return self._s[3437]! } + public var Watch_Microphone_Access: String { return self._s[3438]! } + public var Group_Setup_HistoryHeader: String { return self._s[3439]! } + public var Map_SetThisLocation: String { return self._s[3440]! } + public var Activity_UploadingPhoto: String { return self._s[3441]! } + public var Conversation_Edit: String { return self._s[3443]! } + public var Group_ErrorSendRestrictedMedia: String { return self._s[3444]! } + public var Login_TermsOfServiceDecline: String { return self._s[3445]! } + public var Message_PinnedContactMessage: String { return self._s[3446]! } public func Channel_AdminLog_MessageRestrictedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3428]!, self._r[3428]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3447]!, self._r[3447]!, [_1, _2]) } public func Login_PhoneBannedEmailBody(_ _1: String, _ _2: String, _ _3: String, _ _4: String, _ _5: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3429]!, self._r[3429]!, [_1, _2, _3, _4, _5]) + return formatWithArgumentRanges(self._s[3448]!, self._r[3448]!, [_1, _2, _3, _4, _5]) } - public var Appearance_LargeEmoji: String { return self._s[3430]! } - public var TwoStepAuth_AdditionalPassword: String { return self._s[3432]! } + public var Appearance_LargeEmoji: String { return self._s[3449]! } + public var TwoStepAuth_AdditionalPassword: String { return self._s[3451]! } public func PUSH_CHAT_DELETE_YOU(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3433]!, self._r[3433]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3452]!, self._r[3452]!, [_1, _2]) } - public var Passport_Phone_EnterOtherNumber: String { return self._s[3434]! } - public var Message_PinnedPhotoMessage: String { return self._s[3435]! } - public var Passport_FieldPhone: String { return self._s[3436]! } - public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3437]! } - public var ChatSettings_AutoPlayGifs: String { return self._s[3438]! } - public var InfoPlist_NSCameraUsageDescription: String { return self._s[3440]! } - public var Conversation_Call: String { return self._s[3441]! } - public var Common_TakePhoto: String { return self._s[3443]! } - public var Channel_NotificationLoading: String { return self._s[3444]! } + public var Passport_Phone_EnterOtherNumber: String { return self._s[3453]! } + public var Message_PinnedPhotoMessage: String { return self._s[3454]! } + public var Passport_FieldPhone: String { return self._s[3455]! } + public var TwoStepAuth_RecoveryEmailAddDescription: String { return self._s[3456]! } + public var ChatSettings_AutoPlayGifs: String { return self._s[3457]! } + public var InfoPlist_NSCameraUsageDescription: String { return self._s[3459]! } + public var Conversation_Call: String { return self._s[3460]! } + public var Common_TakePhoto: String { return self._s[3462]! } + public var Group_EditAdmin_RankTitle: String { return self._s[3463]! } + public var Channel_NotificationLoading: String { return self._s[3464]! } public func Notification_Exceptions_Sound(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3445]!, self._r[3445]!, [_0]) - } - public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3446]!, self._r[3446]!, [_1]) - } - public var Permissions_SiriTitle_v0: String { return self._s[3447]! } - public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3448]!, self._r[3448]!, [_0]) - } - public var Channel_MessagePhotoRemoved: String { return self._s[3449]! } - public var Common_edit: String { return self._s[3450]! } - public var PrivacySettings_AuthSessions: String { return self._s[3451]! } - public var Month_ShortJune: String { return self._s[3452]! } - public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3453]! } - public var Call_ReportSend: String { return self._s[3454]! } - public var Watch_LastSeen_JustNow: String { return self._s[3455]! } - public var Notifications_MessageNotifications: String { return self._s[3456]! } - public var WallpaperSearch_ColorGreen: String { return self._s[3457]! } - public var BroadcastListInfo_AddRecipient: String { return self._s[3459]! } - public var Group_Status: String { return self._s[3460]! } - public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3461]!, self._r[3461]!, [_0, _1]) - } - public var TextFormat_AddLinkTitle: String { return self._s[3462]! } - public var ShareMenu_ShareTo: String { return self._s[3463]! } - public var Conversation_Moderate_Ban: String { return self._s[3464]! } - public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[3465]!, self._r[3465]!, [_0]) } - public var SharedMedia_ViewInChat: String { return self._s[3466]! } - public var Map_LiveLocationFor8Hours: String { return self._s[3467]! } + public func PUSH_CHANNEL_MESSAGE_VIDEO(_ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3466]!, self._r[3466]!, [_1]) + } + public var Permissions_SiriTitle_v0: String { return self._s[3467]! } + public func Login_ResetAccountProtected_Text(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3468]!, self._r[3468]!, [_0]) + } + public var Channel_MessagePhotoRemoved: String { return self._s[3469]! } + public var Common_edit: String { return self._s[3470]! } + public var PrivacySettings_AuthSessions: String { return self._s[3471]! } + public var Month_ShortJune: String { return self._s[3472]! } + public var PrivacyLastSeenSettings_AlwaysShareWith_Placeholder: String { return self._s[3473]! } + public var Call_ReportSend: String { return self._s[3474]! } + public var Watch_LastSeen_JustNow: String { return self._s[3475]! } + public var Notifications_MessageNotifications: String { return self._s[3476]! } + public var WallpaperSearch_ColorGreen: String { return self._s[3477]! } + public var BroadcastListInfo_AddRecipient: String { return self._s[3479]! } + public var Group_Status: String { return self._s[3480]! } + public func AutoNightTheme_LocationHelp(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3481]!, self._r[3481]!, [_0, _1]) + } + public var TextFormat_AddLinkTitle: String { return self._s[3482]! } + public var ShareMenu_ShareTo: String { return self._s[3483]! } + public var Conversation_Moderate_Ban: String { return self._s[3484]! } + public func Conversation_DeleteMessagesFor(_ _0: String) -> (String, [(Int, NSRange)]) { + return formatWithArgumentRanges(self._s[3485]!, self._r[3485]!, [_0]) + } + public var SharedMedia_ViewInChat: String { return self._s[3486]! } + public var Map_LiveLocationFor8Hours: String { return self._s[3487]! } public func PUSH_PINNED_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3468]!, self._r[3468]!, [_1]) + return formatWithArgumentRanges(self._s[3488]!, self._r[3488]!, [_1]) } public func PUSH_PINNED_POLL(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3469]!, self._r[3469]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3489]!, self._r[3489]!, [_1, _2]) } public func Map_AccurateTo(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3471]!, self._r[3471]!, [_0]) + return formatWithArgumentRanges(self._s[3491]!, self._r[3491]!, [_0]) } - public var Map_OpenInHereMaps: String { return self._s[3472]! } - public var Appearance_ReduceMotion: String { return self._s[3473]! } + public var Map_OpenInHereMaps: String { return self._s[3492]! } + public var Appearance_ReduceMotion: String { return self._s[3493]! } public func PUSH_MESSAGE_TEXT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[3474]!, self._r[3474]!, [_1, _2]) + return formatWithArgumentRanges(self._s[3494]!, self._r[3494]!, [_1, _2]) } - public var Channel_Setup_TypePublicHelp: String { return self._s[3475]! } - public var Passport_Identity_EditInternalPassport: String { return self._s[3476]! } - public var PhotoEditor_Skip: String { return self._s[3477]! } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public var Channel_Setup_TypePublicHelp: String { return self._s[3495]! } + public var Passport_Identity_EditInternalPassport: String { return self._s[3496]! } + public var PhotoEditor_Skip: String { return self._s[3497]! } + public func MessageTimer_ShortDays(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) } - public func UserCount(_ value: Int32) -> String { + public func ForwardedPhotos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedFiles(_ value: Int32) -> String { + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) } - public func Passport_Scans(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func Call_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, _1, _2) } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func ForwardedContacts(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) } - public func SharedMedia_Video(_ value: Int32) -> String { + public func SharedMedia_Generic(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue) } - public func Map_ETAMinutes(_ value: Int32) -> String { + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue) } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + public func Call_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue) } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue) } - public func ForwardedMessages(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue) } - public func Call_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue) } - public func ChatList_SelectedChats(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue) } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue) } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue) } - public func Conversation_StatusOnline(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue) + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, _1, _2) } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { + public func StickerPack_AddMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Days(_ value: Int32) -> String { + public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) - } public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Map_ETAHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAudios(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPolls(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortSeconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedGifs(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedStickers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func MessageTimer_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, _2, _1, _3) - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) - } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) - } - public func QuickSend_Photos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedLocations(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue) - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue) } public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Weeks(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, _0, _1) + } + public func MessagePoll_VotedCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue) } public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Video(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Invitation_Members(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue) } public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func StickerPack_StickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue) + } + public func AttachmentMenu_SendItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedStickers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(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 = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_File(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func QuickSend_Photos(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue) } - public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _1, _2) + public func SharedMedia_Link(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue) } public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func SharedMedia_Photo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _1, _2) } public func Conversation_StatusMembers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_File(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedVideoMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue) } public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue) } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Media_SharePhoto(_ value: Int32) -> String { + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Generic(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Call_Seconds(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedContacts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_Months(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MuteFor_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Invitation_Members(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) - } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue) - } - public func ForwardedPhotos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) - } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) - } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) - return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(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[67 * 6 + Int(form.rawValue)]!, stringValue) } public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideoMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Contacts_ImportersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue) + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareItem(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue) + } + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func ForwardedAudios(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MuteFor_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue) + } + public func UserCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue) + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Map_ETAHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) + } + public func SharedMedia_Photo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusSubscribers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(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_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue) + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue) + } + public func ChatList_SelectedChats(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Notification_GameScoreExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) + return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue) + } + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue) } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, _1, _2) } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) diff --git a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift index 773d349b40..323be5f7c1 100644 --- a/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift +++ b/submodules/TelegramUI/TelegramUI/AuthorizationSequenceController.swift @@ -750,7 +750,7 @@ public final class AuthorizationSequenceController: NavigationController, MFMail } controllers.append(self.awaitingAccountResetController(protectedUntil: protectedUntil, number: number)) self.setViewControllers(controllers, animated: !self.viewControllers.isEmpty) - case let .signUp(_, _, _, firstName, lastName, termsOfService, _): + case let .signUp(_, _, firstName, lastName, termsOfService, _): var controllers: [ViewController] = [] var displayCancel = false if !self.otherAccountPhoneNumbers.1.isEmpty { diff --git a/submodules/TelegramUI/TelegramUI/CachedChannelAdmins.swift b/submodules/TelegramUI/TelegramUI/CachedChannelAdmins.swift index 3afbd153e5..961b3c67d5 100644 --- a/submodules/TelegramUI/TelegramUI/CachedChannelAdmins.swift +++ b/submodules/TelegramUI/TelegramUI/CachedChannelAdmins.swift @@ -3,19 +3,57 @@ import Postbox import TelegramCore import SwiftSignalKit -final class CachedChannelAdminIds: PostboxCoding { - let ids: Set - - init(ids: Set) { - self.ids = ids - } +enum CachedChannelAdminRank: PostboxCoding, Equatable { + case owner + case admin + case custom(String) init(decoder: PostboxDecoder) { - self.ids = Set(decoder.decodeInt64ArrayForKey("ids").map(PeerId.init)) + let value: Int32 = decoder.decodeInt32ForKey("v", orElse: 0) + switch value { + case 0: + self = .owner + case 1: + self = .admin + case 2: + self = .custom(decoder.decodeStringForKey("s", orElse: "")) + default: + self = .admin + } } func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt64Array(Array(self.ids.map({ $0.toInt64() })), forKey: "ids") + switch self { + case .owner: + encoder.encodeInt32(0, forKey: "v") + case .admin: + encoder.encodeInt32(1, forKey: "v") + case let .custom(rank): + encoder.encodeInt32(2, forKey: "v") + encoder.encodeString(rank, forKey: "s") + } + } +} + +final class CachedChannelAdminRanks: PostboxCoding { + let ranks: Dictionary + + init(ranks: Dictionary) { + self.ranks = ranks + } + + init(decoder: PostboxDecoder) { + self.ranks = decoder.decodeObjectDictionaryForKey("ranks", keyDecoder: { decoder in + return PeerId(decoder.decodeInt64ForKey("k", orElse: 0)) + }, valueDecoder: { decoder in + return CachedChannelAdminRank(decoder: decoder) + }) + } + + func encode(_ encoder: PostboxEncoder) { + encoder.encodeObjectDictionary(self.ranks, forKey: "ranks", keyEncoder: { key, encoder in + encoder.encodeInt64(key.toInt64(), forKey: "k") + }) } static func cacheKey(peerId: PeerId) -> ValueBoxKey { @@ -27,12 +65,12 @@ final class CachedChannelAdminIds: PostboxCoding { private let collectionSpec = ItemCacheCollectionSpec(lowWaterItemCount: 100, highWaterItemCount: 200) -func cachedChannelAdminIdsEntryId(peerId: PeerId) -> ItemCacheEntryId { - return ItemCacheEntryId(collectionId: 100, key: CachedChannelAdminIds.cacheKey(peerId: peerId)) +func cachedChannelAdminRanksEntryId(peerId: PeerId) -> ItemCacheEntryId { + return ItemCacheEntryId(collectionId: 100, key: CachedChannelAdminRanks.cacheKey(peerId: peerId)) } -func updateCachedChannelAdminIds(postbox: Postbox, peerId: PeerId, ids: Set) -> Signal { +func updateCachedChannelAdminRanks(postbox: Postbox, peerId: PeerId, ranks: Dictionary) -> Signal { return postbox.transaction { transaction -> Void in - transaction.putItemCacheEntry(id: ItemCacheEntryId(collectionId: 100, key: CachedChannelAdminIds.cacheKey(peerId: peerId)), entry: CachedChannelAdminIds(ids: ids), collectionSpec: collectionSpec) + transaction.putItemCacheEntry(id: ItemCacheEntryId(collectionId: 100, key: CachedChannelAdminRanks.cacheKey(peerId: peerId)), entry: CachedChannelAdminRanks(ranks: ranks), collectionSpec: collectionSpec) } } diff --git a/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift b/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift index f11f281cae..6c0632f472 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelAdminController.swift @@ -6,22 +6,27 @@ import Postbox import TelegramCore import TelegramPresentationData +private let rankMaxLength: Int32 = 16 + private final class ChannelAdminControllerArguments { let account: Account let toggleRight: (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void let transferOwnership: () -> Void + let updateRank: (String, String) -> Void let dismissAdmin: () -> Void - init(account: Account, toggleRight: @escaping (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void, transferOwnership: @escaping () -> Void, dismissAdmin: @escaping () -> Void) { + init(account: Account, toggleRight: @escaping (TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags) -> Void, transferOwnership: @escaping () -> Void, updateRank: @escaping (String, String) -> Void, dismissAdmin: @escaping () -> Void) { self.account = account self.toggleRight = toggleRight self.transferOwnership = transferOwnership + self.updateRank = updateRank self.dismissAdmin = dismissAdmin } } private enum ChannelAdminSection: Int32 { case info + case rank case rights case transfer case dismiss @@ -29,6 +34,8 @@ private enum ChannelAdminSection: Int32 { private enum ChannelAdminEntryStableId: Hashable { case info + case rankTitle + case rank case rightsTitle case right(TelegramChatAdminRightsFlags) case addAdminsInfo @@ -39,14 +46,18 @@ private enum ChannelAdminEntryStableId: Hashable { switch self { case .info: return 0 - case .rightsTitle: + case .rankTitle: return 1 - case .addAdminsInfo: + case .rank: return 2 - case .dismiss: + case .rightsTitle: return 3 - case .transfer: + case .addAdminsInfo: return 4 + case .dismiss: + return 5 + case .transfer: + return 6 case let .right(flags): return flags.rawValue.hashValue } @@ -60,6 +71,18 @@ private enum ChannelAdminEntryStableId: Hashable { } else { return false } + case .rankTitle: + if case .rankTitle = rhs { + return true + } else { + return false + } + case .rank: + if case .rank = rhs { + return true + } else { + return false + } case .rightsTitle: if case .rightsTitle = rhs { return true @@ -96,6 +119,8 @@ private enum ChannelAdminEntryStableId: Hashable { private enum ChannelAdminEntry: ItemListNodeEntry { case info(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, Peer, TelegramUserPresence?) + case rankTitle(PresentationTheme, String, Int32, Int32) + case rank(PresentationTheme, String, String) case rightsTitle(PresentationTheme, String) case rightItem(PresentationTheme, Int, String, TelegramChatAdminRightsFlags, TelegramChatAdminRightsFlags, Bool, Bool) case addAdminsInfo(PresentationTheme, String) @@ -106,6 +131,8 @@ private enum ChannelAdminEntry: ItemListNodeEntry { switch self { case .info: return ChannelAdminSection.info.rawValue + case .rankTitle, .rank: + return ChannelAdminSection.rank.rawValue case .rightsTitle, .rightItem, .addAdminsInfo: return ChannelAdminSection.rights.rawValue case .transfer: @@ -119,6 +146,10 @@ private enum ChannelAdminEntry: ItemListNodeEntry { switch self { case .info: return .info + case .rankTitle: + return .rankTitle + case .rank: + return .rank case .rightsTitle: return .rightsTitle case let .rightItem(_, _, _, right, _, _, _): @@ -152,6 +183,18 @@ private enum ChannelAdminEntry: ItemListNodeEntry { return false } + return true + } else { + return false + } + case let .rankTitle(lhsTheme, lhsText, lhsCount, lhsLimit): + if case let .rankTitle(rhsTheme, rhsText, rhsCount, rhsLimit) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsCount == rhsCount, lhsLimit == rhsLimit { + return true + } else { + return false + } + case let .rank(lhsTheme, lhsPlaceholder, lhsValue): + if case let .rank(rhsTheme, rhsPlaceholder, rhsValue) = rhs, lhsTheme === rhsTheme, lhsPlaceholder == rhsPlaceholder, lhsValue == rhsValue { return true } else { return false @@ -219,9 +262,23 @@ private enum ChannelAdminEntry: ItemListNodeEntry { default: return true } + case .rankTitle: + switch rhs { + case .info, .rankTitle: + return false + default: + return true + } + case .rank: + switch rhs { + case .info, .rankTitle, .rank: + return false + default: + return true + } case .rightsTitle: switch rhs { - case .info, .rightsTitle: + case .info, .rankTitle, .rank, .rightsTitle: return false default: return true @@ -260,6 +317,14 @@ private enum ChannelAdminEntry: ItemListNodeEntry { return ItemListAvatarAndNameInfoItem(account: arguments.account, theme: theme, strings: strings, dateTimeFormat: dateTimeFormat, mode: .generic, peer: peer, presence: presence, cachedData: nil, state: ItemListAvatarAndNameInfoItemState(), sectionId: self.section, style: .blocks(withTopInset: true, withExtendedBottomInset: false), editingNameUpdated: { _ in }, avatarTapped: { }) + case let .rankTitle(theme, text, count, limit): + let accessoryText = ItemListSectionHeaderAccessoryText(value: "\(limit - count)", color: count > limit ? .destructive : .generic) + return ItemListSectionHeaderItem(theme: theme, text: text, accessoryText: accessoryText, sectionId: self.section) + case let .rank(theme, placeholder, text): + return ItemListSingleLineInputItem(theme: theme, title: NSAttributedString(string: "", textColor: .black), text: text, placeholder: placeholder, type: .regular(capitalization: false, autocorrection: true), spacing: 0.0, clearButton: true, tag: nil, sectionId: self.section, textUpdated: { updatedText in + arguments.updateRank(text, updatedText) + }, action: { + }) case let .rightsTitle(theme, text): return ItemListSectionHeaderItem(theme: theme, text: text, sectionId: self.section) case let .rightItem(theme, _, text, right, flags, value, enabled): @@ -282,10 +347,12 @@ private enum ChannelAdminEntry: ItemListNodeEntry { private struct ChannelAdminControllerState: Equatable { let updatedFlags: TelegramChatAdminRightsFlags? + let updatedRank: String? let updating: Bool - init(updatedFlags: TelegramChatAdminRightsFlags? = nil, updating: Bool = false) { + init(updatedFlags: TelegramChatAdminRightsFlags? = nil, updatedRank: String? = nil, updating: Bool = false) { self.updatedFlags = updatedFlags + self.updatedRank = updatedRank self.updating = updating } @@ -293,6 +360,9 @@ private struct ChannelAdminControllerState: Equatable { if lhs.updatedFlags != rhs.updatedFlags { return false } + if lhs.updatedRank != rhs.updatedRank { + return false + } if lhs.updating != rhs.updating { return false } @@ -300,11 +370,15 @@ private struct ChannelAdminControllerState: Equatable { } func withUpdatedUpdatedFlags(_ updatedFlags: TelegramChatAdminRightsFlags?) -> ChannelAdminControllerState { - return ChannelAdminControllerState(updatedFlags: updatedFlags, updating: self.updating) + return ChannelAdminControllerState(updatedFlags: updatedFlags, updatedRank: self.updatedRank, updating: self.updating) + } + + func withUpdatedUpdatedRank(_ updatedRank: String?) -> ChannelAdminControllerState { + return ChannelAdminControllerState(updatedFlags: self.updatedFlags, updatedRank: updatedRank, updating: self.updating) } func withUpdatedUpdating(_ updating: Bool) -> ChannelAdminControllerState { - return ChannelAdminControllerState(updatedFlags: self.updatedFlags, updating: updating) + return ChannelAdminControllerState(updatedFlags: self.updatedFlags, updatedRank: self.updatedRank, updating: updating) } } @@ -403,28 +477,144 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s if let channel = channelView.peers[channelView.peerId] as? TelegramChannel, let admin = adminView.peers[adminView.peerId] { entries.append(.info(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, admin, adminView.peerPresences[admin.id] as? TelegramUserPresence)) - entries.append(.rightsTitle(presentationData.theme, presentationData.strings.Channel_EditAdmin_PermissionsHeader)) + var isCreator = false + if let initialParticipant = initialParticipant, case .creator = initialParticipant { + isCreator = true + } - let isGroup: Bool - let maskRightsFlags: TelegramChatAdminRightsFlags - let rightsOrder: [TelegramChatAdminRightsFlags] + let currentRank: String? + if let updatedRank = state.updatedRank { + currentRank = updatedRank + } else if let initialParticipant = initialParticipant { + currentRank = initialParticipant.rank + } else { + currentRank = nil + } - switch channel.info { - case .broadcast: - isGroup = false - maskRightsFlags = .broadcastSpecific - rightsOrder = [ - .canChangeInfo, - .canPostMessages, - .canEditMessages, - .canDeleteMessages, - .canInviteUsers, - .canAddAdmins - ] - case .group: - isGroup = true - maskRightsFlags = .groupSpecific - rightsOrder = [ + entries.append(.rankTitle(presentationData.theme, presentationData.strings.Group_EditAdmin_RankTitle.uppercased(), Int32(currentRank?.count ?? 0), rankMaxLength)) + entries.append(.rank(presentationData.theme, isCreator ? presentationData.strings.Group_EditAdmin_RankOwnerPlaceholder : presentationData.strings.Group_EditAdmin_RankAdminPlaceholder, currentRank ?? "")) + + if isCreator { + } else { + entries.append(.rightsTitle(presentationData.theme, presentationData.strings.Channel_EditAdmin_PermissionsHeader)) + + let isGroup: Bool + let maskRightsFlags: TelegramChatAdminRightsFlags + let rightsOrder: [TelegramChatAdminRightsFlags] + + switch channel.info { + case .broadcast: + isGroup = false + maskRightsFlags = .broadcastSpecific + rightsOrder = [ + .canChangeInfo, + .canPostMessages, + .canEditMessages, + .canDeleteMessages, + .canInviteUsers, + .canAddAdmins + ] + case .group: + isGroup = true + maskRightsFlags = .groupSpecific + rightsOrder = [ + .canChangeInfo, + .canDeleteMessages, + .canBanUsers, + .canInviteUsers, + .canPinMessages, + .canAddAdmins + ] + } + + if canEditAdminRights(accountPeerId: accountPeerId, channelView: channelView, initialParticipant: initialParticipant) { + let accountUserRightsFlags: TelegramChatAdminRightsFlags + if channel.flags.contains(.isCreator) { + accountUserRightsFlags = maskRightsFlags + } else if let adminRights = channel.adminRights { + accountUserRightsFlags = maskRightsFlags.intersection(adminRights.flags) + } else { + accountUserRightsFlags = [] + } + + let currentRightsFlags: TelegramChatAdminRightsFlags + if let updatedFlags = state.updatedFlags { + currentRightsFlags = updatedFlags + } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _, _) = initialParticipant, let adminRights = maybeAdminRights { + currentRightsFlags = adminRights.rights.flags + } else { + currentRightsFlags = accountUserRightsFlags.subtracting(.canAddAdmins) + } + + var index = 0 + for right in rightsOrder { + if accountUserRightsFlags.contains(right) { + entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating && admin.id != accountPeerId)) + index += 1 + } + } + + if accountUserRightsFlags.contains(.canAddAdmins) { + entries.append(.addAdminsInfo(presentationData.theme, currentRightsFlags.contains(.canAddAdmins) ? presentationData.strings.Channel_EditAdmin_PermissinAddAdminOn : presentationData.strings.Channel_EditAdmin_PermissinAddAdminOff)) + } + + if let admin = admin as? TelegramUser, admin.botInfo == nil && !admin.isDeleted && channel.flags.contains(.isCreator) && areAllAdminRightsEnabled(currentRightsFlags, group: isGroup) { + entries.append(.transfer(presentationData.theme, isGroup ? presentationData.strings.Group_EditAdmin_TransferOwnership : presentationData.strings.Channel_EditAdmin_TransferOwnership)) + } + + if let initialParticipant = initialParticipant, case let .member(participant) = initialParticipant, let adminInfo = participant.adminInfo, !adminInfo.rights.flags.isEmpty && admin.id != accountPeerId { + var canDismiss = false + if channel.flags.contains(.isCreator) { + canDismiss = true + } else { + switch initialParticipant { + case .creator: + break + case let .member(_, _, adminInfo, _, _): + if let adminInfo = adminInfo { + if adminInfo.promotedBy == accountPeerId || adminInfo.canBeEditedByAccountPeer { + canDismiss = true + } + } + } + } + if canDismiss { + entries.append(.dismiss(presentationData.theme, presentationData.strings.Channel_Moderator_AccessLevelRevoke)) + } + } + } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminInfo, _, _) = initialParticipant, let adminInfo = maybeAdminInfo { + var index = 0 + for right in rightsOrder { + entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, adminInfo.rights.flags, adminInfo.rights.flags.contains(right), false)) + index += 1 + } + } + } + } else if let group = channelView.peers[channelView.peerId] as? TelegramGroup, let admin = adminView.peers[adminView.peerId] { + entries.append(.info(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, admin, adminView.peerPresences[admin.id] as? TelegramUserPresence)) + + var isCreator = false + if let initialParticipant = initialParticipant, case .creator = initialParticipant { + isCreator = true + } + + let currentRank: String? + if let updatedRank = state.updatedRank { + currentRank = updatedRank + } else { + currentRank = nil + } + + entries.append(.rankTitle(presentationData.theme, presentationData.strings.Group_EditAdmin_RankTitle.uppercased(), Int32(currentRank?.count ?? 0), rankMaxLength)) + entries.append(.rank(presentationData.theme, isCreator ? presentationData.strings.Group_EditAdmin_RankOwnerPlaceholder : presentationData.strings.Group_EditAdmin_RankAdminPlaceholder, currentRank ?? "")) + + if isCreator { + } else { + entries.append(.rightsTitle(presentationData.theme, presentationData.strings.Channel_EditAdmin_PermissionsHeader)) + + let isGroup = true + let maskRightsFlags: TelegramChatAdminRightsFlags = .groupSpecific + let rightsOrder: [TelegramChatAdminRightsFlags] = [ .canChangeInfo, .canDeleteMessages, .canBanUsers, @@ -432,115 +622,37 @@ private func channelAdminControllerEntries(presentationData: PresentationData, s .canPinMessages, .canAddAdmins ] - } - if canEditAdminRights(accountPeerId: accountPeerId, channelView: channelView, initialParticipant: initialParticipant) { - let accountUserRightsFlags: TelegramChatAdminRightsFlags - if channel.flags.contains(.isCreator) { - accountUserRightsFlags = maskRightsFlags - } else if let adminRights = channel.adminRights { - accountUserRightsFlags = maskRightsFlags.intersection(adminRights.flags) - } else { - accountUserRightsFlags = [] - } - + let accountUserRightsFlags: TelegramChatAdminRightsFlags = maskRightsFlags + let currentRightsFlags: TelegramChatAdminRightsFlags if let updatedFlags = state.updatedFlags { currentRightsFlags = updatedFlags } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _, _) = initialParticipant, let adminRights = maybeAdminRights { - currentRightsFlags = adminRights.rights.flags + currentRightsFlags = adminRights.rights.flags.subtracting(.canAddAdmins) } else { currentRightsFlags = accountUserRightsFlags.subtracting(.canAddAdmins) } - + var index = 0 for right in rightsOrder { if accountUserRightsFlags.contains(right) { - entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating && admin.id != accountPeerId)) + entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: group.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating)) index += 1 } } - + if accountUserRightsFlags.contains(.canAddAdmins) { entries.append(.addAdminsInfo(presentationData.theme, currentRightsFlags.contains(.canAddAdmins) ? presentationData.strings.Channel_EditAdmin_PermissinAddAdminOn : presentationData.strings.Channel_EditAdmin_PermissinAddAdminOff)) } + + if let admin = admin as? TelegramUser, case .creator = group.role, admin.botInfo == nil && !admin.isDeleted && areAllAdminRightsEnabled(currentRightsFlags, group: true) { + entries.append(.transfer(presentationData.theme, presentationData.strings.Group_EditAdmin_TransferOwnership)) + } - if let admin = admin as? TelegramUser, admin.botInfo == nil && !admin.isDeleted && channel.flags.contains(.isCreator) && areAllAdminRightsEnabled(currentRightsFlags, group: isGroup) { - entries.append(.transfer(presentationData.theme, isGroup ? presentationData.strings.Group_EditAdmin_TransferOwnership : presentationData.strings.Channel_EditAdmin_TransferOwnership)) - } - if let initialParticipant = initialParticipant, case let .member(participant) = initialParticipant, let adminInfo = participant.adminInfo, !adminInfo.rights.flags.isEmpty && admin.id != accountPeerId { - var canDismiss = false - if channel.flags.contains(.isCreator) { - canDismiss = true - } else { - switch initialParticipant { - case .creator: - break - case let .member(_, _, adminInfo, _, _): - if let adminInfo = adminInfo { - if adminInfo.promotedBy == accountPeerId || adminInfo.canBeEditedByAccountPeer { - canDismiss = true - } - } - } - } - if canDismiss { - entries.append(.dismiss(presentationData.theme, presentationData.strings.Channel_Moderator_AccessLevelRevoke)) - } + entries.append(.dismiss(presentationData.theme, presentationData.strings.Channel_Moderator_AccessLevelRevoke)) } - } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminInfo, _, _) = initialParticipant, let adminInfo = maybeAdminInfo { - var index = 0 - for right in rightsOrder { - entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: channel.defaultBannedRights), right, adminInfo.rights.flags, adminInfo.rights.flags.contains(right), false)) - index += 1 - } - } - } else if let group = channelView.peers[channelView.peerId] as? TelegramGroup, let admin = adminView.peers[adminView.peerId] { - entries.append(.info(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, admin, adminView.peerPresences[admin.id] as? TelegramUserPresence)) - - entries.append(.rightsTitle(presentationData.theme, presentationData.strings.Channel_EditAdmin_PermissionsHeader)) - - let isGroup = true - let maskRightsFlags: TelegramChatAdminRightsFlags = .groupSpecific - let rightsOrder: [TelegramChatAdminRightsFlags] = [ - .canChangeInfo, - .canDeleteMessages, - .canBanUsers, - .canInviteUsers, - .canPinMessages, - .canAddAdmins - ] - - let accountUserRightsFlags: TelegramChatAdminRightsFlags = maskRightsFlags - - let currentRightsFlags: TelegramChatAdminRightsFlags - if let updatedFlags = state.updatedFlags { - currentRightsFlags = updatedFlags - } else if let initialParticipant = initialParticipant, case let .member(_, _, maybeAdminRights, _, _) = initialParticipant, let adminRights = maybeAdminRights { - currentRightsFlags = adminRights.rights.flags.subtracting(.canAddAdmins) - } else { - currentRightsFlags = accountUserRightsFlags.subtracting(.canAddAdmins) - } - - var index = 0 - for right in rightsOrder { - if accountUserRightsFlags.contains(right) { - entries.append(.rightItem(presentationData.theme, index, stringForRight(strings: presentationData.strings, right: right, isGroup: isGroup, defaultBannedRights: group.defaultBannedRights), right, currentRightsFlags, currentRightsFlags.contains(right), !state.updating)) - index += 1 - } - } - - if accountUserRightsFlags.contains(.canAddAdmins) { - entries.append(.addAdminsInfo(presentationData.theme, currentRightsFlags.contains(.canAddAdmins) ? presentationData.strings.Channel_EditAdmin_PermissinAddAdminOn : presentationData.strings.Channel_EditAdmin_PermissinAddAdminOff)) - } - - if let admin = admin as? TelegramUser, case .creator = group.role, admin.botInfo == nil && !admin.isDeleted && areAllAdminRightsEnabled(currentRightsFlags, group: true) { - entries.append(.transfer(presentationData.theme, presentationData.strings.Group_EditAdmin_TransferOwnership)) - } - - if let initialParticipant = initialParticipant, case let .member(participant) = initialParticipant, let adminInfo = participant.adminInfo, !adminInfo.rights.flags.isEmpty && admin.id != accountPeerId { - entries.append(.dismiss(presentationData.theme, presentationData.strings.Channel_Moderator_AccessLevelRevoke)) } } @@ -564,6 +676,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi var dismissImpl: (() -> Void)? var presentControllerImpl: ((ViewController, Any?) -> Void)? + var errorImpl: (() -> Void)? let actualPeerId = Atomic(value: peerId) let upgradedToSupergroupImpl: (PeerId, @escaping () -> Void) -> Void = { peerId, completion in @@ -606,6 +719,10 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi presentControllerImpl?(controller, nil) })) }) + }, updateRank: { previousRank, updatedRank in + if updatedRank != previousRank { + updateState { $0.withUpdatedUpdatedRank(updatedRank) } + } }, dismissAdmin: { let presentationData = context.sharedContext.currentPresentationData.with { $0 } let actionSheet = ActionSheetController(presentationTheme: presentationData.theme) @@ -668,29 +785,35 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi if let channel = channelView.peers[channelView.peerId] as? TelegramChannel { if let initialParticipant = initialParticipant { var updateFlags: TelegramChatAdminRightsFlags? + var updateRank: String? updateState { current in updateFlags = current.updatedFlags - if let _ = updateFlags { - return current.withUpdatedUpdating(true) - } else { - return current - } + updateRank = current.updatedRank + return current } - if updateFlags == nil { - switch initialParticipant { - case .creator: - break - case let .member(member): + if let updateRank = updateRank, updateRank.count > rankMaxLength { + errorImpl?() + return + } + + let maskRightsFlags: TelegramChatAdminRightsFlags + switch channel.info { + case .broadcast: + maskRightsFlags = .broadcastSpecific + case .group: + maskRightsFlags = .groupSpecific + } + + var currentRank: String? + var currentFlags: TelegramChatAdminRightsFlags? + switch initialParticipant { + case let .creator(creator): + currentRank = creator.rank + currentFlags = maskRightsFlags + case let .member(member): + if updateFlags == nil { if member.adminInfo?.rights == nil { - let maskRightsFlags: TelegramChatAdminRightsFlags - switch channel.info { - case .broadcast: - maskRightsFlags = .broadcastSpecific - case .group: - maskRightsFlags = .groupSpecific - } - if channel.flags.contains(.isCreator) { updateFlags = maskRightsFlags.subtracting(.canAddAdmins) } else if let adminRights = channel.adminRights { @@ -699,27 +822,48 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi updateFlags = [] } } - } + } + currentRank = member.rank + currentFlags = member.adminInfo?.rights.flags } + let effectiveRank = updateRank ?? currentRank + if let updateFlags = updateFlags { updateState { current in return current.withUpdatedUpdating(true) } - updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: "") |> 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: { _ in }, completed: { updated(TelegramChatAdminRights(flags: updateFlags)) dismissImpl?() })) + } else if let updateRank = updateRank, let currentFlags = currentFlags { + updateState { current in + return current.withUpdatedUpdating(true) + } + updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: currentFlags), rank: updateRank) |> deliverOnMainQueue).start(error: { _ in + + }, completed: { + updated(TelegramChatAdminRights(flags: currentFlags)) + dismissImpl?() + })) } else { dismissImpl?() } } else if canEdit { var updateFlags: TelegramChatAdminRightsFlags? + var updateRank: String? updateState { current in updateFlags = current.updatedFlags - return current.withUpdatedUpdating(true) + updateRank = current.updatedRank + return current + } + + if let updateRank = updateRank, updateRank.count > rankMaxLength { + errorImpl?() + return } if updateFlags == nil { @@ -761,11 +905,20 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi } } else if let _ = channelView.peers[channelView.peerId] as? TelegramGroup { var updateFlags: TelegramChatAdminRightsFlags? + var updateRank: String? updateState { current in updateFlags = current.updatedFlags + if let updatedRank = current.updatedRank, !updatedRank.isEmpty { + updateRank = updatedRank + } return current } + if let updateRank = updateRank, updateRank.count > rankMaxLength { + errorImpl?() + return + } + let maskRightsFlags: TelegramChatAdminRightsFlags = .groupSpecific let defaultFlags = maskRightsFlags.subtracting(.canAddAdmins) @@ -774,7 +927,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi } if let updateFlags = updateFlags { - if initialParticipant?.adminInfo == nil && updateFlags == defaultFlags { + if initialParticipant?.adminInfo == nil && updateFlags == defaultFlags && updateRank == nil { updateState { current in return current.withUpdatedUpdating(true) } @@ -788,7 +941,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi }, completed: { dismissImpl?() })) - } else if updateFlags != defaultFlags { + } else if updateFlags != defaultFlags || updateRank != nil { let signal = convertGroupToSupergroup(account: context.account, peerId: peerId) |> map(Optional.init) |> `catch` { _ -> Signal in @@ -798,7 +951,7 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi guard let upgradedPeerId = upgradedPeerId else { return .fail(.generic) } - return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: "") + return context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: upgradedPeerId, memberId: adminId, adminRights: TelegramChatAdminRights(flags: updateFlags), rank: updateRank) |> mapToSignal { _ -> Signal in return .complete() } @@ -849,5 +1002,16 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi presentControllerImpl = { [weak controller] value, presentationArguments in controller?.present(value, in: .window(.root), with: presentationArguments) } + + let hapticFeedback = HapticFeedback() + errorImpl = { [weak controller] in + hapticFeedback.error() + controller?.forEachItemNode { itemNode in + if let itemNode = itemNode as? ItemListSingleLineInputItemNode { + itemNode.animateError() + } + } + } + return controller } diff --git a/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift b/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift index b833cec4e7..e48d51d41a 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelAdminsController.swift @@ -66,7 +66,7 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { case recentActions(PresentationTheme, String) case adminsHeader(PresentationTheme, String) - case adminPeerItem(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, PresentationPersonNameOrder, Bool, Int32, RenderedChannelParticipant, ItemListPeerItemEditing, Bool) + case adminPeerItem(PresentationTheme, PresentationStrings, PresentationDateTimeFormat, PresentationPersonNameOrder, Bool, Int32, RenderedChannelParticipant, ItemListPeerItemEditing, Bool, Bool) case addAdmin(PresentationTheme, String, Bool) case adminsInfo(PresentationTheme, String) @@ -89,7 +89,7 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { return .index(4) case .adminsInfo: return .index(5) - case let .adminPeerItem(_, _, _, _, _, _, participant, _, _): + case let .adminPeerItem(_, _, _, _, _, _, participant, _, _, _): return .peer(participant.peer.id) } } @@ -108,8 +108,8 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { } else { return false } - case let .adminPeerItem(lhsTheme, lhsStrings, lhsDateTimeFormat, lhsNameOrder, lhsIsGroup, lhsIndex, lhsParticipant, lhsEditing, lhsEnabled): - if case let .adminPeerItem(rhsTheme, rhsStrings, rhsDateTimeFormat, rhsNameOrder, rhsIsGroup, rhsIndex, rhsParticipant, rhsEditing, rhsEnabled) = rhs { + case let .adminPeerItem(lhsTheme, lhsStrings, lhsDateTimeFormat, lhsNameOrder, lhsIsGroup, lhsIndex, lhsParticipant, lhsEditing, lhsEnabled, lhsHasAction): + if case let .adminPeerItem(rhsTheme, rhsStrings, rhsDateTimeFormat, rhsNameOrder, rhsIsGroup, rhsIndex, rhsParticipant, rhsEditing, rhsEnabled, rhsHasAction) = rhs { if lhsTheme !== rhsTheme { return false } @@ -137,6 +137,9 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { if lhsEnabled != rhsEnabled { return false } + if lhsHasAction != rhsHasAction { + return false + } return true } else { return false @@ -167,11 +170,11 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { default: return true } - case let .adminPeerItem(_, _, _, _, _, index, _, _, _): + case let .adminPeerItem(_, _, _, _, _, index, _, _, _, _): switch rhs { case .recentActions, .adminsHeader, .addAdmin: return false - case let .adminPeerItem(_, _, _, _, _, rhsIndex, _, _, _): + case let .adminPeerItem(_, _, _, _, _, rhsIndex, _, _, _, _): return index < rhsIndex default: return true @@ -196,13 +199,12 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { }) case let .adminsHeader(theme, title): return ItemListSectionHeaderItem(theme: theme, text: title, sectionId: self.section) - case let .adminPeerItem(theme, strings, dateTimeFormat, nameDisplayOrder, _, _, participant, editing, enabled): + case let .adminPeerItem(theme, strings, dateTimeFormat, nameDisplayOrder, _, _, participant, editing, enabled, hasAction): let peerText: String - let action: (() -> Void)? + var action: (() -> Void)? switch participant.participant { case .creator: peerText = strings.Channel_Management_LabelOwner - action = nil case let .member(_, _, adminInfo, _, _): if let adminInfo = adminInfo { if let peer = participant.peers[adminInfo.promotedBy] { @@ -217,9 +219,11 @@ private enum ChannelAdminsEntry: ItemListNodeEntry { } else { peerText = "" } - action = { - arguments.openAdmin(participant.participant) - } + } + if hasAction { + action = { + arguments.openAdmin(participant.participant) + } } return ItemListPeerItem(theme: theme, strings: strings, dateTimeFormat: dateTimeFormat, nameDisplayOrder: nameDisplayOrder, account: arguments.account, peer: participant.peer, presence: nil, text: .text(peerText), label: .none, editing: editing, switchValue: nil, enabled: enabled, selectable: true, sectionId: self.section, action: action, setPeerIdWithRevealedOptions: { previousId, id in arguments.setPeerIdWithRevealedOptions(previousId, id) @@ -321,7 +325,6 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, var isGroup = false if case .group = peer.info { isGroup = true - entries.append(.recentActions(presentationData.theme, presentationData.strings.Group_Info_AdminLog)) } else { entries.append(.recentActions(presentationData.theme, presentationData.strings.Group_Info_AdminLog)) @@ -365,24 +368,26 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, return lhsInvitedAt < rhsInvitedAt }) { if !state.removedPeerIds.contains(participant.peer.id) { - var editable = true + var canEdit = true + var canOpen = true switch participant.participant { case .creator: - editable = false + canEdit = false + canOpen = peer.flags.contains(.isCreator) case let .member(id, _, adminInfo, _, _): if id == accountPeerId { - editable = false + canEdit = false } else if let adminInfo = adminInfo { if peer.flags.contains(.isCreator) || adminInfo.promotedBy == accountPeerId { - editable = true + canEdit = true } else { - editable = false + canEdit = false } } else { - editable = false + canEdit = false } } - entries.append(.adminPeerItem(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, isGroup, index, participant, ItemListPeerItemEditing(editable: editable, editing: state.editing, revealed: participant.peer.id == state.peerIdWithRevealedOptions), state.removingPeerId != participant.peer.id && existingParticipantIds.contains(participant.peer.id))) + entries.append(.adminPeerItem(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, isGroup, index, participant, ItemListPeerItemEditing(editable: canEdit, editing: state.editing, revealed: participant.peer.id == state.peerIdWithRevealedOptions), state.removingPeerId != participant.peer.id && existingParticipantIds.contains(participant.peer.id), canOpen)) index += 1 } } @@ -435,25 +440,30 @@ private func channelAdminsControllerEntries(presentationData: PresentationData, }) { if !state.removedPeerIds.contains(participant.peer.id) { var editable = true + var canEdit = true switch participant.participant { - case .creator: - editable = false - case let .member(id, _, adminInfo, _, _): - if id == accountPeerId { + case .creator: editable = false - } else if let adminInfo = adminInfo { if case .creator = peer.role { - editable = true - } else if adminInfo.promotedBy == accountPeerId { - editable = true + } else { + canEdit = false + } + case let .member(id, _, adminInfo, _, _): + if id == accountPeerId { + editable = false + } else if let adminInfo = adminInfo { + if case .creator = peer.role { + editable = true + } else if adminInfo.promotedBy == accountPeerId { + editable = true + } else { + editable = false + } } else { editable = false } - } else { - editable = false - } } - entries.append(.adminPeerItem(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, isGroup, index, participant, ItemListPeerItemEditing(editable: editable, editing: state.editing, revealed: participant.peer.id == state.peerIdWithRevealedOptions), state.removingPeerId != participant.peer.id && existingParticipantIds.contains(participant.peer.id))) + entries.append(.adminPeerItem(presentationData.theme, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, isGroup, index, participant, ItemListPeerItemEditing(editable: editable, editing: state.editing, revealed: participant.peer.id == state.peerIdWithRevealedOptions), state.removingPeerId != participant.peer.id && existingParticipantIds.contains(participant.peer.id), canEdit)) index += 1 } } diff --git a/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift b/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift index c0f5393793..a49449139b 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelMemberCategoryListContext.swift @@ -89,6 +89,25 @@ private func isParticipantMember(_ participant: ChannelParticipant, infoIsMember } } +private extension CachedChannelAdminRank { + init(participant: ChannelParticipant) { + switch participant { + case let .creator(_, rank): + if let rank = rank { + self = .custom(rank) + } else { + self = .owner + } + case let .member(_, _, _, _, rank): + if let rank = rank { + self = .custom(rank) + } else { + self = .admin + } + } + } +} + private final class ChannelMemberSingleCategoryListContext: ChannelMemberCategoryListContext { private let postbox: Postbox private let network: Network @@ -100,10 +119,18 @@ private final class ChannelMemberSingleCategoryListContext: ChannelMemberCategor didSet { self.listStatePromise.set(.single(self.listStateValue)) if case .admins(nil) = self.category, case .ready = self.listStateValue.loadingState { - let ids: Set = Set(self.listStateValue.list.map { $0.peer.id }) - let previousIds: Set = Set(oldValue.list.map { $0.peer.id }) - if ids != previousIds { - let _ = updateCachedChannelAdminIds(postbox: self.postbox, peerId: self.peerId, ids: ids).start() + let ranks: [PeerId: CachedChannelAdminRank] = self.listStateValue.list.reduce([:]) { (ranks, participant) in + var ranks = ranks + ranks[participant.participant.peerId] = CachedChannelAdminRank(participant: participant.participant) + return ranks + } + let previousRanks: [PeerId: CachedChannelAdminRank] = oldValue.list.reduce([:]) { (ranks, participant) in + var ranks = ranks + ranks[participant.participant.peerId] = CachedChannelAdminRank(participant: participant.participant) + return ranks + } + if ranks != previousRanks { + let _ = updateCachedChannelAdminRanks(postbox: self.postbox, peerId: self.peerId, ranks: ranks).start() } } } diff --git a/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift b/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift index d1f765bfd7..8a6185d5ec 100644 --- a/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatHistoryEntriesForView.swift @@ -7,12 +7,12 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, return [] } var entries: [ChatHistoryEntry] = [] - var adminIds = Set() + var adminRanks: [PeerId: CachedChannelAdminRank] = [:] if case let .peer(peerId) = location, peerId.namespace == Namespaces.Peer.CloudChannel { for additionalEntry in view.additionalData { if case let .cacheEntry(id, data) = additionalEntry { - if id == cachedChannelAdminIdsEntryId(peerId: peerId), let data = data as? CachedChannelAdminIds { - adminIds = data.ids + if id == cachedChannelAdminRanksEntryId(peerId: peerId), let data = data as? CachedChannelAdminRanks { + adminRanks = data.ranks } break } @@ -32,9 +32,9 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, } } - var isAdmin = false + var adminRank: CachedChannelAdminRank? if let author = entry.message.author { - isAdmin = adminIds.contains(author.id) + adminRank = adminRanks[author.id] } if groupMessages { @@ -49,7 +49,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, } else { selection = .none } - groupBucket.append((entry.message, entry.isRead, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact))) + groupBucket.append((entry.message, entry.isRead, selection, ChatMessageEntryAttributes(rank: adminRank, isContact: entry.attributes.authorIsContact))) } else { let selection: ChatHistoryMessageSelection if let selectedMessages = selectedMessages { @@ -57,7 +57,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, } else { selection = .none } - entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact))) + entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(rank: adminRank, isContact: entry.attributes.authorIsContact))) } } else { let selection: ChatHistoryMessageSelection @@ -66,7 +66,7 @@ func chatHistoryEntriesForView(location: ChatLocation, view: MessageHistoryView, } else { selection = .none } - entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(isAdmin: isAdmin, isContact: entry.attributes.authorIsContact))) + entries.append(.MessageEntry(entry.message, presentationData, entry.isRead, entry.monthLocation, selection, ChatMessageEntryAttributes(rank: adminRank, isContact: entry.attributes.authorIsContact))) } } diff --git a/submodules/TelegramUI/TelegramUI/ChatHistoryEntry.swift b/submodules/TelegramUI/TelegramUI/ChatHistoryEntry.swift index 5056b39203..f52567fa65 100644 --- a/submodules/TelegramUI/TelegramUI/ChatHistoryEntry.swift +++ b/submodules/TelegramUI/TelegramUI/ChatHistoryEntry.swift @@ -25,7 +25,7 @@ public enum ChatHistoryMessageSelection: Equatable { } public struct ChatMessageEntryAttributes: Equatable { - let isAdmin: Bool + let rank: CachedChannelAdminRank? let isContact: Bool } diff --git a/submodules/TelegramUI/TelegramUI/ChatHistoryListNode.swift b/submodules/TelegramUI/TelegramUI/ChatHistoryListNode.swift index 5a6bc52794..7216d61def 100644 --- a/submodules/TelegramUI/TelegramUI/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatHistoryListNode.swift @@ -470,7 +470,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode { additionalData.append(.cachedPeerDataMessages(peerId)) additionalData.append(.peerNotificationSettings(peerId)) if peerId.namespace == Namespaces.Peer.CloudChannel { - additionalData.append(.cacheEntry(cachedChannelAdminIdsEntryId(peerId: peerId))) + additionalData.append(.cacheEntry(cachedChannelAdminRanksEntryId(peerId: peerId))) additionalData.append(.peer(peerId)) } if peerId.namespace == Namespaces.Peer.CloudUser || peerId.namespace == Namespaces.Peer.SecretChat { diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift index 8bcbf723a0..b7a4844e10 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageBubbleItemNode.swift @@ -561,27 +561,26 @@ class ChatMessageBubbleItemNode: ChatMessageItemView { } var authorNameString: String? - let authorIsAdmin: Bool + var authorRank: CachedChannelAdminRank? var authorIsChannel: Bool = false switch content { case let .message(message, _, _, attributes): if let peer = message.peers[message.id.peerId] as? TelegramChannel { if case .broadcast = peer.info { - authorIsAdmin = false } else { if isCrosspostFromChannel, let sourceReference = sourceReference, let _ = firstMessage.peers[sourceReference.messageId.peerId] as? TelegramChannel { authorIsChannel = true } - authorIsAdmin = attributes.isAdmin + authorRank = attributes.rank } } else { if isCrosspostFromChannel, let _ = firstMessage.forwardInfo?.source as? TelegramChannel { authorIsChannel = true } - authorIsAdmin = attributes.isAdmin + authorRank = attributes.rank } case .group: - authorIsAdmin = false + break } var inlineBotNameString: String? var replyMessage: Message? @@ -862,8 +861,17 @@ class ChatMessageBubbleItemNode: ChatMessageItemView { let attributedString: NSAttributedString var adminBadgeString: NSAttributedString? - if authorIsAdmin { - adminBadgeString = NSAttributedString(string: " \(item.presentationData.strings.Conversation_Admin)", font: inlineBotPrefixFont, textColor: messageTheme.secondaryTextColor) + if let authorRank = authorRank { + let string: String + switch authorRank { + case .owner: + string = item.presentationData.strings.Conversation_Owner + case .admin: + string = item.presentationData.strings.Conversation_Admin + case let .custom(rank): + string = rank + } + adminBadgeString = NSAttributedString(string: " \(string)", font: inlineBotPrefixFont, textColor: messageTheme.secondaryTextColor) } else if authorIsChannel { adminBadgeString = NSAttributedString(string: " \(item.presentationData.strings.Channel_Status)", font: inlineBotPrefixFont, textColor: messageTheme.secondaryTextColor) } diff --git a/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift b/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift index 4e3f0d28fa..346bf60caa 100644 --- a/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift +++ b/submodules/TelegramUI/TelegramUI/ChatRecentActionsHistoryTransition.swift @@ -115,7 +115,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.titleUpdated(title: new) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .changeAbout(prev, new): var peers = SimpleDictionary() var author: Peer? @@ -146,14 +146,14 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: let peers = SimpleDictionary() let attributes: [MessageAttribute] = [] let prevMessage = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: prev, attributes: [], media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: new, attributes: attributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), additionalContent: !prev.isEmpty ? .eventLogPreviousDescription(prevMessage) : nil) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), additionalContent: !prev.isEmpty ? .eventLogPreviousDescription(prevMessage) : nil) } case let .changeUsername(prev, new): var peers = SimpleDictionary() @@ -184,7 +184,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } let action: TelegramMediaActionType = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: var previousAttributes: [MessageAttribute] = [] var attributes: [MessageAttribute] = [] @@ -203,7 +203,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let prevMessage = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: prevText, attributes: previousAttributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: text, attributes: attributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), additionalContent: !prev.isEmpty ? .eventLogPreviousLink(prevMessage) : nil) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), additionalContent: !prev.isEmpty ? .eventLogPreviousLink(prevMessage) : nil) } case let .changePhoto(_, new): var peers = SimpleDictionary() @@ -221,7 +221,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.photoUpdated(image: photo) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .toggleInvites(value): var peers = SimpleDictionary() var author: Peer? @@ -248,7 +248,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .toggleSignatures(value): var peers = SimpleDictionary() var author: Peer? @@ -275,7 +275,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .updatePinned(message): switch self.id.contentIndex { case .header: @@ -299,7 +299,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: if let message = message { var peers = SimpleDictionary() @@ -317,7 +317,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: message.effectiveAuthor, text: message.text, attributes: attributes, media: message.media, peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) } else { var peers = SimpleDictionary() var author: Peer? @@ -339,7 +339,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 0), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) } } case let .editMessage(prev, message): @@ -384,7 +384,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -401,7 +401,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: message.effectiveAuthor, text: message.text, attributes: attributes, media: message.media, peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: filterOriginalMessageFlags(message), read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), additionalContent: !prev.text.isEmpty || !message.text.isEmpty ? .eventLogPreviousMessage(filterOriginalMessageFlags(prev)) : nil) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: filterOriginalMessageFlags(message), read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), additionalContent: !prev.text.isEmpty || !message.text.isEmpty ? .eventLogPreviousMessage(filterOriginalMessageFlags(prev)) : nil) } case let .deleteMessage(message): switch self.id.contentIndex { @@ -427,7 +427,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -451,7 +451,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: message.effectiveAuthor, text: message.text, attributes: attributes, media: message.media, peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) } case .participantJoin, .participantLeave: var peers = SimpleDictionary() @@ -469,7 +469,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { action = TelegramMediaActionType.removedMembers(peerIds: [self.entry.event.peerId]) } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .participantInvite(participant): var peers = SimpleDictionary() var author: Peer? @@ -486,7 +486,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action: TelegramMediaActionType action = TelegramMediaActionType.addedMembers(peerIds: [participant.peer.id]) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .participantToggleBan(prev, new): var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -616,7 +616,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: text, attributes: attributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .participantToggleAdmin(prev, new): var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -708,7 +708,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: text, attributes: attributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .changeStickerPack(_, new): var peers = SimpleDictionary() var author: Peer? @@ -737,7 +737,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .togglePreHistoryHidden(value): var peers = SimpleDictionary() var author: Peer? @@ -767,7 +767,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .updateDefaultBannedRights(prev, new): var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -825,7 +825,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: text, attributes: attributes, media: [], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .pollStopped(message): switch self.id.contentIndex { case .header: @@ -853,7 +853,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: 1), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case .content: var peers = SimpleDictionary() var attributes: [MessageAttribute] = [] @@ -870,7 +870,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { } } let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: message.author, text: message.text, attributes: attributes, media: message.media, peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: filterOriginalMessageFlags(message), read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), additionalContent: nil) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: filterOriginalMessageFlags(message), read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), additionalContent: nil) } case let .linkedPeerUpdated(previous, updated): var peers = SimpleDictionary() @@ -926,7 +926,7 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) case let .changeGeoLocation(_, updated): var peers = SimpleDictionary() var author: Peer? @@ -948,12 +948,12 @@ struct ChatRecentActionsEntry: Comparable, Identifiable { let mediaMap = TelegramMediaMap(latitude: updated.latitude, longitude: updated.longitude, geoPlace: nil, venue: nil, liveBroadcastingTimeout: nil) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: text, attributes: [], media: [mediaMap], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) } else { let action = TelegramMediaActionType.customText(text: text, entities: entities) let message = Message(stableId: self.entry.stableId, stableVersion: 0, id: MessageId(peerId: peer.id, namespace: Namespaces.Message.Cloud, id: Int32(bitPattern: self.entry.stableId)), globallyUniqueId: self.entry.event.id, groupingKey: nil, groupInfo: nil, timestamp: self.entry.event.date, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: author, text: "", attributes: [], media: [TelegramMediaAction(action: action)], peers: peers, associatedMessages: SimpleDictionary(), associatedMessageIds: []) - return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false))) + return ChatMessageItem(presentationData: self.presentationData, context: context, chatLocation: .peer(peer.id), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .channel, automaticDownloadNetworkType: .cellular, isRecentActions: true), controllerInteraction: controllerInteraction, content: .message(message: message, read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false))) } } } diff --git a/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift b/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift index 37b88e9ffd..ce51ccde4d 100644 --- a/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift +++ b/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift @@ -27,7 +27,7 @@ private var telegramUIDeclaredEncodables: Void = { declareEncodable(ICloudFileResource.self, f: { ICloudFileResource(decoder: $0) }) declareEncodable(MediaInputSettings.self, f: { MediaInputSettings(decoder: $0) }) declareEncodable(ContactSynchronizationSettings.self, f: { ContactSynchronizationSettings(decoder: $0) }) - declareEncodable(CachedChannelAdminIds.self, f: { CachedChannelAdminIds(decoder: $0) }) + declareEncodable(CachedChannelAdminRanks.self, f: { CachedChannelAdminRanks(decoder: $0) }) declareEncodable(StickerSettings.self, f: { StickerSettings(decoder: $0) }) declareEncodable(InstantPagePresentationSettings.self, f: { InstantPagePresentationSettings(decoder: $0) }) declareEncodable(InstantPageStoredState.self, f: { InstantPageStoredState(decoder: $0) }) diff --git a/submodules/TelegramUI/TelegramUI/ForwardPrivacyChatPreviewItem.swift b/submodules/TelegramUI/TelegramUI/ForwardPrivacyChatPreviewItem.swift index eb1911c800..a4434d9d4c 100644 --- a/submodules/TelegramUI/TelegramUI/ForwardPrivacyChatPreviewItem.swift +++ b/submodules/TelegramUI/TelegramUI/ForwardPrivacyChatPreviewItem.swift @@ -150,7 +150,7 @@ class ForwardPrivacyChatPreviewItemNode: ListViewItemNode { let chatPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: item.theme, wallpaper: item.wallpaper), fontSize: item.fontSize, strings: item.strings, dateTimeFormat: item.dateTimeFormat, nameDisplayOrder: item.nameDisplayOrder, disableAnimations: false, largeEmoji: false) - let messageItem: ChatMessageItem = ChatMessageItem(presentationData: chatPresentationData, context: item.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: forwardInfo, author: nil, text: item.strings.Privacy_Forwards_PreviewMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), disableDate: true) + let messageItem = ChatMessageItem(presentationData: chatPresentationData, context: item.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: forwardInfo, author: nil, text: item.strings.Privacy_Forwards_PreviewMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), disableDate: true) var node: ListViewItemNode? if let current = currentNode { diff --git a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift index b2fc1efc25..a03f91afb9 100644 --- a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift @@ -93,8 +93,8 @@ private enum GroupInfoEntryTag { private enum GroupInfoMemberStatus: Equatable { case member - case admin(String?) - case owner(String?) + case admin(rank: String?) + case owner(rank: String?) } private enum GroupEntryStableId: Hashable, Equatable { @@ -530,10 +530,10 @@ private enum GroupInfoEntry: ItemListNodeEntry { case let .member(theme, strings, dateTimeFormat, nameDisplayOrder, _, _, peer, participant, presence, memberStatus, editing, actions, enabled, selectable): let label: String? switch memberStatus { - case .owner: - label = strings.GroupInfo_LabelOwner - case .admin: - label = strings.GroupInfo_LabelAdmin + case let .owner(rank): + label = rank ?? strings.GroupInfo_LabelOwner + case let .admin(rank): + label = rank ?? strings.GroupInfo_LabelAdmin case .member: label = nil } @@ -1014,10 +1014,10 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa switch sortedParticipants[i] { case .creator: participant = .creator(id: sortedParticipants[i].peerId, rank: nil) - memberStatus = .owner(nil) + memberStatus = .owner(rank: nil) case .admin: participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: ChannelParticipantAdminInfo(rights: TelegramChatAdminRights(flags: .groupSpecific), promotedBy: account.peerId, canBeEditedByAccountPeer: true), banInfo: nil, rank: nil) - memberStatus = .admin(nil) + memberStatus = .admin(rank: nil) case .member: participant = .member(id: sortedParticipants[i].peerId, invitedAt: 0, adminInfo: nil, banInfo: nil, rank: nil) memberStatus = .member @@ -1133,10 +1133,10 @@ private func groupInfoEntries(account: Account, presentationData: PresentationDa let memberStatus: GroupInfoMemberStatus switch participant.participant { case let .creator(_, rank): - memberStatus = .owner(rank) + memberStatus = .owner(rank: rank) case let .member(_, _, adminInfo, _, rank): if adminInfo != nil { - memberStatus = .admin(rank) + memberStatus = .admin(rank: rank) } else { memberStatus = .member } diff --git a/submodules/TelegramUI/TelegramUI/ItemListSingleLineInputItem.swift b/submodules/TelegramUI/TelegramUI/ItemListSingleLineInputItem.swift index f90676f947..84aae2e58a 100644 --- a/submodules/TelegramUI/TelegramUI/ItemListSingleLineInputItem.swift +++ b/submodules/TelegramUI/TelegramUI/ItemListSingleLineInputItem.swift @@ -373,4 +373,8 @@ class ItemListSingleLineInputItemNode: ListViewItemNode, UITextFieldDelegate, It @objc internal func textFieldDidBeginEditing(_ textField: UITextField) { self.item?.receivedFocus?() } + + func animateError() { + self.textNode.layer.addShakeAnimation() + } } diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping index 6ff2cc2f4280d811b63ccff26c4b30f0a6550153..ed73639bdf295af58046e9b896754b76120b2dff 100644 GIT binary patch delta 31820 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

Se08g_`6Y<(RL6j3)2 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 ViewController { } checkAddressNameDisposable.set((validateAddressNameInteractive(account: context.account, domain: .account, name: text) - |> deliverOnMainQueue).start(next: { result in - updateState { state in - return state.withUpdatedAddressNameValidationStatus(result) - } - })) + |> deliverOnMainQueue).start(next: { result in + updateState { state in + return state.withUpdatedAddressNameValidationStatus(result) + } + })) } }, shareLink: { let _ = (context.account.postbox.loadedPeerWithId(context.account.peerId) diff --git a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift index a7637737d9..7353772c59 100644 --- a/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift +++ b/submodules/TelegramUI/TelegramUI/WallpaperGalleryController.swift @@ -609,9 +609,9 @@ class WallpaperGalleryController: ViewController { bottomMessageText = presentationData.strings.WallpaperPreview_CustomColorBottomText } - items.append(ChatMessageItem(presentationData: chatPresentationData, context: self.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: bottomMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), disableDate: false)) + items.append(ChatMessageItem(presentationData: chatPresentationData, context: self.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: bottomMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), disableDate: false)) - items.append(ChatMessageItem(presentationData: chatPresentationData, context: self.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: topMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(isAdmin: false, isContact: false)), disableDate: false)) + items.append(ChatMessageItem(presentationData: chatPresentationData, context: self.context, chatLocation: .peer(peerId), associatedData: ChatMessageItemAssociatedData(automaticDownloadPeerType: .contact, automaticDownloadNetworkType: .cellular, isRecentActions: false), controllerInteraction: controllerInteraction, content: .message(message: Message(stableId: 1, stableVersion: 0, id: MessageId(peerId: peerId, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66000, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[peerId], text: topMessageText, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), read: true, selection: .none, attributes: ChatMessageEntryAttributes(rank: nil, isContact: false)), disableDate: false)) let params = ListViewItemLayoutParams(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right) if let messageNodes = self.messageNodes {