{
  "version": 3,
  "sources": ["../src/platform/node.ts", "../src/utils/Utils.ts", "../node_modules/jintr/dist/nodes/index.js", "../node_modules/jintr/dist/nodes/BaseJSNode.js", "../node_modules/jintr/dist/nodes/ArrayExpression.js", "../node_modules/jintr/dist/utils/index.js", "../node_modules/jintr/dist/nodes/ArrowFunctionExpression.js", "../node_modules/jintr/dist/nodes/AssignmentExpression.js", "../node_modules/jintr/dist/nodes/BinaryExpression.js", "../node_modules/jintr/dist/nodes/BlockStatement.js", "../node_modules/jintr/dist/nodes/BreakStatement.js", "../node_modules/jintr/dist/nodes/CallExpression.js", "../node_modules/jintr/dist/nodes/ConditionalExpression.js", "../node_modules/jintr/dist/nodes/ContinueStatement.js", "../node_modules/jintr/dist/nodes/EmptyStatement.js", "../node_modules/jintr/dist/nodes/ExpressionStatement.js", "../node_modules/jintr/dist/nodes/ForOfStatement.js", "../node_modules/jintr/dist/nodes/ForStatement.js", "../node_modules/jintr/dist/nodes/FunctionDeclaration.js", "../node_modules/jintr/dist/nodes/FunctionExpression.js", "../node_modules/jintr/dist/nodes/Identifier.js", "../node_modules/jintr/dist/nodes/IfStatement.js", "../node_modules/jintr/dist/nodes/Literal.js", "../node_modules/jintr/dist/nodes/LogicalExpression.js", "../node_modules/jintr/dist/nodes/MemberExpression.js", "../node_modules/jintr/dist/nodes/NewExpression.js", "../node_modules/jintr/dist/nodes/ObjectExpression.js", "../node_modules/jintr/dist/nodes/Property.js", "../node_modules/jintr/dist/nodes/ReturnStatement.js", "../node_modules/jintr/dist/nodes/SequenceExpression.js", "../node_modules/jintr/dist/nodes/SwitchCase.js", "../node_modules/jintr/dist/nodes/SwitchStatement.js", "../node_modules/jintr/dist/nodes/TemplateLiteral.js", "../node_modules/jintr/dist/nodes/ThisExpression.js", "../node_modules/jintr/dist/nodes/ThrowStatement.js", "../node_modules/jintr/dist/nodes/TryStatement.js", "../node_modules/jintr/dist/nodes/UnaryExpression.js", "../node_modules/jintr/dist/nodes/UpdateExpression.js", "../node_modules/jintr/dist/nodes/VariableDeclaration.js", "../node_modules/jintr/dist/nodes/WhileStatement.js", "../node_modules/jintr/dist/visitor.js", "../node_modules/acorn/dist/acorn.mjs", "../node_modules/jintr/dist/main.js", "../src/parser/helpers.ts", "../src/utils/Log.ts", "../src/parser/misc.ts", "../src/parser/classes/misc/AccessibilityContext.ts", "../src/parser/classes/misc/AccessibilityData.ts", "../src/utils/Constants.ts", "../src/parser/parser.ts", "../src/parser/nodes.ts", "../src/utils/Cache.ts", "../src/utils/EventEmitterLike.ts", "../src/utils/FormatUtils.ts", "../src/utils/DashUtils.ts", "../src/parser/classes/PlayerStoryboardSpec.ts", "../src/utils/StreamingInfo.ts", "../src/utils/DashManifest.tsx", "../src/utils/HTTPClient.ts", "../src/utils/LZW.ts", "../src/utils/BinarySerializer.ts", "../src/utils/ProtoUtils.ts", "../node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js", "../node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js", "../node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js", "../node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js", "../protos/generated/misc/params.ts", "../src/parser/classes/actions/OpenPopupAction.ts", "../src/parser/classes/Button.ts", "../src/parser/classes/DropdownItem.ts", "../src/parser/classes/Dropdown.ts", "../src/parser/classes/CreatePlaylistDialog.ts", "../src/parser/classes/commands/CommandExecutorCommand.ts", "../src/parser/classes/NavigationEndpoint.ts", "../src/parser/classes/misc/Thumbnail.ts", "../src/parser/classes/misc/EmojiRun.ts", "../src/parser/classes/misc/TextRun.ts", "../src/parser/classes/misc/Text.ts", "../src/parser/classes/ChannelExternalLinkView.ts", "../src/parser/classes/AboutChannelView.ts", "../src/parser/classes/AboutChannel.ts", "../src/parser/classes/AccountChannel.ts", "../src/parser/classes/AccountItem.ts", "../src/parser/classes/AccountItemSectionHeader.ts", "../src/parser/classes/CompactLink.ts", "../src/parser/classes/AccountItemSection.ts", "../src/parser/classes/AccountSectionList.ts", "../src/parser/classes/actions/AppendContinuationItemsAction.ts", "../src/parser/classes/actions/ChangeEngagementPanelVisibilityAction.ts", "../src/parser/classes/menus/MultiPageMenu.ts", "../src/parser/classes/actions/GetMultiPageMenuAction.ts", "../src/parser/classes/actions/SendFeedbackAction.ts", "../src/parser/classes/actions/SignalAction.ts", "../src/parser/classes/ChannelSwitcherPage.ts", "../src/parser/classes/actions/UpdateChannelSwitcherPageAction.ts", "../src/parser/classes/SortFilterSubMenu.ts", "../src/parser/classes/TranscriptFooter.ts", "../src/parser/classes/TranscriptSearchBox.ts", "../src/parser/classes/TranscriptSectionHeader.ts", "../src/parser/classes/TranscriptSegment.ts", "../src/parser/classes/TranscriptSegmentList.ts", "../src/parser/classes/TranscriptSearchPanel.ts", "../src/parser/classes/Transcript.ts", "../src/parser/classes/actions/UpdateEngagementPanelAction.ts", "../src/parser/classes/actions/UpdateSubscribeButtonAction.ts", "../src/parser/classes/ActiveAccountHeader.ts", "../src/parser/classes/MenuTitle.ts", "../src/parser/classes/PlaylistAddToOption.ts", "../src/parser/classes/AddToPlaylist.ts", "../src/parser/classes/Alert.ts", "../src/parser/classes/AlertWithButton.ts", "../src/parser/classes/AnimatedThumbnailOverlayView.ts", "../src/parser/classes/AttributionView.ts", "../src/parser/classes/AudioOnlyPlayability.ts", "../src/parser/classes/AutomixPreviewVideo.ts", "../src/parser/classes/AvatarView.ts", "../src/parser/classes/misc/CommandContext.ts", "../src/parser/classes/misc/RendererContext.ts", "../src/parser/classes/AvatarStackView.ts", "../src/parser/classes/ButtonView.ts", "../src/parser/classes/BackgroundPromo.ts", "../src/parser/classes/BackstageImage.ts", "../src/parser/classes/ToggleButton.ts", "../src/parser/classes/comments/CreatorHeart.ts", "../src/parser/classes/comments/CommentActionButtons.ts", "../src/parser/classes/ToggleButtonView.ts", "../src/parser/classes/LikeButtonView.ts", "../src/parser/classes/DislikeButtonView.ts", "../src/parser/classes/SegmentedLikeDislikeButtonView.ts", "../src/parser/classes/menus/MenuServiceItem.ts", "../src/parser/classes/DownloadButton.ts", "../src/parser/classes/menus/MenuServiceItemDownload.ts", "../src/parser/classes/menus/MenuFlexibleItem.ts", "../src/parser/classes/LikeButton.ts", "../src/parser/classes/FlexibleActionsView.ts", "../src/parser/classes/menus/Menu.ts", "../src/parser/classes/BackstagePost.ts", "../src/parser/classes/BackstagePostThread.ts", "../src/parser/classes/BadgeView.ts", "../src/parser/classes/SubFeedOption.ts", "../src/parser/classes/SubFeedSelector.ts", "../src/parser/classes/EomSettingsDisclaimer.ts", "../src/parser/classes/SearchBox.ts", "../src/parser/classes/BrowseFeedActions.ts", "../src/parser/classes/BrowserMediaSession.ts", "../src/parser/classes/ButtonCardView.ts", "../src/parser/classes/ChannelHeaderLinks.ts", "../src/parser/classes/ChannelHeaderLinksView.ts", "../src/parser/classes/ClipCreationTextInput.ts", "../src/parser/classes/ClipCreationScrubber.ts", "../src/parser/classes/ClipAdState.ts", "../src/parser/classes/ClipCreation.ts", "../src/parser/classes/ClipSection.ts", "../src/parser/classes/ContinuationItem.ts", "../src/parser/classes/EngagementPanelTitleHeader.ts", "../src/parser/classes/MacroMarkersInfoItem.ts", "../src/parser/classes/MacroMarkersListItem.ts", "../src/parser/classes/MacroMarkersList.ts", "../src/parser/classes/ProductList.ts", "../src/parser/classes/SectionList.ts", "../src/parser/classes/ExpandableVideoDescriptionBody.ts", "../src/parser/classes/SearchRefinementCard.ts", "../src/parser/classes/GameCard.ts", "../src/parser/classes/HorizontalList.ts", "../src/parser/classes/ExpandableMetadata.ts", "../src/parser/classes/MetadataBadge.ts", "../src/parser/classes/ThumbnailOverlayTimeStatus.ts", "../src/parser/classes/Video.ts", "../src/parser/classes/VideoCard.ts", "../src/parser/classes/ContentPreviewImageView.ts", "../src/parser/classes/VideoAttributeView.ts", "../src/parser/classes/HorizontalCardList.ts", "../src/parser/classes/Factoid.ts", "../src/parser/classes/UploadTimeFactoid.ts", "../src/parser/classes/ViewCountFactoid.ts", "../src/parser/classes/HypePointsFactoid.ts", "../src/parser/classes/VideoDescriptionHeader.ts", "../src/parser/classes/VideoDescriptionInfocardsSection.ts", "../src/parser/classes/InfoRow.ts", "../src/parser/classes/CompactVideo.ts", "../src/parser/classes/CarouselLockup.ts", "../src/parser/classes/VideoDescriptionMusicSection.ts", "../src/parser/classes/VideoDescriptionTranscriptSection.ts", "../src/parser/classes/StructuredDescriptionPlaylistLockup.ts", "../src/parser/classes/VideoDescriptionCourseSection.ts", "../src/parser/classes/VideoAttributesSectionView.ts", "../src/parser/classes/HowThisWasMadeSectionView.ts", "../src/parser/classes/ReelShelf.ts", "../src/parser/classes/StructuredDescriptionContent.ts", "../src/parser/classes/EngagementPanelSectionList.ts", "../src/parser/classes/ChannelTagline.ts", "../src/parser/classes/SubscriptionNotificationToggleButton.ts", "../src/parser/classes/SubscribeButton.ts", "../src/parser/classes/C4TabbedHeader.ts", "../src/parser/classes/CallToActionButton.ts", "../src/parser/classes/Card.ts", "../src/parser/classes/CardCollection.ts", "../src/parser/classes/CarouselHeader.ts", "../src/parser/classes/CarouselItem.ts", "../src/parser/classes/TextCarouselItemView.ts", "../src/parser/classes/CarouselItemView.ts", "../src/parser/classes/CarouselTitleView.ts", "../src/parser/classes/Channel.ts", "../src/parser/classes/ChannelAboutFullMetadata.ts", "../src/parser/classes/ChannelAgeGate.ts", "../src/parser/classes/ChannelFeaturedContent.ts", "../src/parser/classes/ChannelMetadata.ts", "../src/parser/classes/ChannelMobileHeader.ts", "../src/parser/classes/ChannelOptions.ts", "../src/parser/classes/ChannelOwnerEmptyState.ts", "../src/parser/classes/ChannelSubMenu.ts", "../src/parser/classes/ChannelSwitcherHeader.ts", "../src/parser/classes/ChannelThumbnailWithLink.ts", "../src/parser/classes/ChannelVideoPlayer.ts", "../src/parser/classes/Chapter.ts", "../src/parser/classes/ChildVideo.ts", "../src/parser/classes/ChipView.ts", "../src/parser/classes/ChipBarView.ts", "../src/parser/classes/ChipCloudChip.ts", "../src/parser/classes/ChipCloud.ts", "../src/parser/classes/ClientSideToggleMenuItem.ts", "../src/parser/classes/CollaboratorInfoCardContent.ts", "../src/parser/classes/CollageHeroImage.ts", "../src/parser/classes/ThumbnailHoverOverlayView.ts", "../src/parser/classes/ThumbnailBadgeView.ts", "../src/parser/classes/ThumbnailOverlayBadgeView.ts", "../src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts", "../src/parser/classes/ThumbnailOverlayProgressBarView.ts", "../src/parser/classes/ThumbnailBottomOverlayView.ts", "../src/parser/classes/ThumbnailView.ts", "../src/parser/classes/CollectionThumbnailView.ts", "../src/parser/classes/commands/AddToPlaylistCommand.ts", "../src/parser/classes/commands/ContinuationCommand.ts", "../src/parser/classes/commands/GetKidsBlocklistPickerCommand.ts", "../src/parser/classes/commands/RunAttestationCommand.ts", "../src/parser/classes/commands/ShowDialogCommand.ts", "../src/parser/classes/commands/UpdateEngagementPanelContentCommand.ts", "../src/parser/classes/comments/AuthorCommentBadge.ts", "../src/parser/classes/comments/EmojiPicker.ts", "../src/parser/classes/comments/CommentDialog.ts", "../src/parser/classes/comments/CommentReplies.ts", "../src/parser/classes/comments/CommentReplyDialog.ts", "../src/parser/classes/comments/CommentsSimplebox.ts", "../src/parser/classes/comments/CommentsEntryPointTeaser.ts", "../src/parser/classes/comments/CommentsEntryPointHeader.ts", "../src/parser/classes/comments/CommentsHeader.ts", "../src/parser/classes/comments/CommentSimplebox.ts", "../src/parser/classes/comments/VoiceReplyContainerView.ts", "../src/parser/classes/comments/CommentView.ts", "../src/parser/classes/comments/CommentThread.ts", "../src/parser/classes/comments/PdgCommentChip.ts", "../src/parser/classes/comments/SponsorCommentBadge.ts", "../src/parser/classes/CompactChannel.ts", "../src/parser/classes/PlaylistCustomThumbnail.ts", "../src/parser/classes/PlaylistVideoThumbnail.ts", "../src/parser/classes/Playlist.ts", "../src/parser/classes/CompactMix.ts", "../src/parser/classes/CompactMovie.ts", "../src/parser/classes/CompactPlaylist.ts", "../src/parser/classes/CompactStation.ts", "../src/parser/classes/CompositeVideoPrimaryInfo.ts", "../src/parser/classes/ConfirmDialog.ts", "../src/parser/classes/ContentMetadataView.ts", "../src/parser/classes/Message.ts", "../src/parser/classes/ConversationBar.ts", "../src/parser/classes/CopyLink.ts", "../src/parser/classes/DropdownView.ts", "../src/parser/classes/TextFieldView.ts", "../src/parser/classes/CreatePlaylistDialogFormView.ts", "../src/parser/classes/DecoratedAvatarView.ts", "../src/parser/classes/HeatMarker.ts", "../src/parser/classes/TimedMarkerDecoration.ts", "../src/parser/classes/Heatmap.ts", "../src/parser/classes/MultiMarkersPlayerBar.ts", "../src/parser/classes/DecoratedPlayerBar.ts", "../src/parser/classes/DefaultPromoPanel.ts", "../src/parser/classes/DescriptionPreviewView.ts", "../src/parser/classes/DialogHeaderView.ts", "../src/parser/classes/PanelFooterView.ts", "../src/parser/classes/FormFooterView.ts", "../src/parser/classes/DialogView.ts", "../src/parser/classes/DidYouMean.ts", "../src/parser/classes/DismissableDialogContentSection.ts", "../src/parser/classes/DismissableDialog.ts", "../src/parser/classes/DynamicTextView.ts", "../src/parser/classes/misc/ChildElement.ts", "../src/parser/classes/Element.ts", "../src/parser/classes/EmergencyOnebox.ts", "../src/parser/classes/EmojiPickerCategory.ts", "../src/parser/classes/EmojiPickerCategoryButton.ts", "../src/parser/classes/EmojiPickerUpsellCategory.ts", "../src/parser/classes/endpoints/AddToPlaylistServiceEndpoint.ts", "../src/parser/classes/endpoints/AddToPlaylistEndpoint.ts", "../src/parser/classes/endpoints/BrowseEndpoint.ts", "../src/parser/classes/endpoints/CreateCommentEndpoint.ts", "../src/parser/classes/endpoints/CreatePlaylistServiceEndpoint.ts", "../src/parser/classes/endpoints/DeletePlaylistEndpoint.ts", "../src/parser/classes/endpoints/FeedbackEndpoint.ts", "../src/parser/classes/endpoints/GetAccountsListInnertubeEndpoint.ts", "../src/parser/classes/endpoints/HideEngagementPanelEndpoint.ts", "../src/parser/classes/endpoints/LikeEndpoint.ts", "../src/parser/classes/endpoints/LiveChatItemContextMenuEndpoint.ts", "../src/parser/classes/endpoints/ModifyChannelNotificationPreferenceEndpoint.ts", "../src/parser/classes/endpoints/PerformCommentActionEndpoint.ts", "../src/parser/classes/endpoints/PlaylistEditEndpoint.ts", "../src/parser/classes/endpoints/WatchEndpoint.ts", "../src/parser/classes/endpoints/PrefetchWatchCommand.ts", "../src/parser/classes/endpoints/ReelWatchEndpoint.ts", "../src/parser/classes/endpoints/SearchEndpoint.ts", "../src/parser/classes/endpoints/ShareEntityServiceEndpoint.ts", "../src/parser/classes/endpoints/ShareEndpoint.ts", "../src/parser/classes/endpoints/ShareEntityEndpoint.ts", "../src/parser/classes/endpoints/ShowEngagementPanelEndpoint.ts", "../src/parser/classes/endpoints/SignalServiceEndpoint.ts", "../src/parser/classes/endpoints/SubscribeEndpoint.ts", "../src/parser/classes/endpoints/UnsubscribeEndpoint.ts", "../src/parser/classes/endpoints/WatchNextEndpoint.ts", "../src/parser/classes/Endscreen.ts", "../src/parser/classes/EndscreenElement.ts", "../src/parser/classes/EndScreenPlaylist.ts", "../src/parser/classes/EndScreenVideo.ts", "../src/parser/classes/ExpandableTab.ts", "../src/parser/classes/ExpandedShelfContents.ts", "../src/parser/classes/FancyDismissibleDialog.ts", "../src/parser/classes/FeedFilterChipBar.ts", "../src/parser/classes/FeedNudge.ts", "../src/parser/classes/FeedTabbedHeader.ts", "../src/parser/classes/GameDetails.ts", "../src/parser/classes/Grid.ts", "../src/parser/classes/GridChannel.ts", "../src/parser/classes/GridHeader.ts", "../src/parser/classes/GridMix.ts", "../src/parser/classes/GridMovie.ts", "../src/parser/classes/GridPlaylist.ts", "../src/parser/classes/GridShelfView.ts", "../src/parser/classes/ShowCustomThumbnail.ts", "../src/parser/classes/ThumbnailOverlayBottomPanel.ts", "../src/parser/classes/GridShow.ts", "../src/parser/classes/GridVideo.ts", "../src/parser/classes/GuideEntry.ts", "../src/parser/classes/GuideCollapsibleEntry.ts", "../src/parser/classes/GuideCollapsibleSectionEntry.ts", "../src/parser/classes/GuideDownloadsEntry.ts", "../src/parser/classes/GuideSection.ts", "../src/parser/classes/GuideSubscriptionsSection.ts", "../src/parser/classes/HashtagHeader.ts", "../src/parser/classes/HashtagTile.ts", "../src/parser/classes/HeroPlaylistThumbnail.ts", "../src/parser/classes/HighlightsCarousel.ts", "../src/parser/classes/SearchSuggestion.ts", "../src/parser/classes/HistorySuggestion.ts", "../src/parser/classes/HorizontalMovieList.ts", "../src/parser/classes/IconLink.ts", "../src/parser/classes/ImageBannerView.ts", "../src/parser/classes/IncludingResultsFor.ts", "../src/parser/classes/InfoPanelContent.ts", "../src/parser/classes/InfoPanelContainer.ts", "../src/parser/classes/InteractiveTabbedHeader.ts", "../src/parser/classes/ItemSectionHeader.ts", "../src/parser/classes/ItemSectionTab.ts", "../src/parser/classes/ItemSectionTabbedHeader.ts", "../src/parser/classes/SortFilterHeader.ts", "../src/parser/classes/ItemSection.ts", "../src/parser/classes/LiveChat.ts", "../src/parser/classes/livechat/items/LiveChatBannerHeader.ts", "../src/parser/classes/livechat/items/LiveChatBanner.ts", "../src/parser/classes/livechat/AddBannerToLiveChatCommand.ts", "../src/parser/classes/livechat/AddChatItemAction.ts", "../src/parser/classes/livechat/AddLiveChatTickerItemAction.ts", "../src/parser/classes/livechat/DimChatItemAction.ts", "../src/parser/classes/livechat/items/BumperUserEduContentView.ts", "../src/parser/classes/livechat/items/CreatorHeartView.ts", "../src/parser/classes/livechat/items/LiveChatAutoModMessage.ts", "../src/parser/classes/livechat/items/LiveChatBannerChatSummary.ts", "../src/parser/classes/livechat/items/LiveChatBannerPoll.ts", "../src/parser/classes/livechat/items/LiveChatBannerRedirect.ts", "../src/parser/classes/livechat/items/LiveChatItemBumperView.ts", "../src/parser/classes/livechat/items/LiveChatMembershipItem.ts", "../src/parser/classes/livechat/items/LiveChatModeChangeMessage.ts", "../src/parser/classes/livechat/items/PdgReplyButtonView.ts", "../src/parser/classes/livechat/items/LiveChatPaidMessage.ts", "../src/parser/classes/livechat/items/LiveChatPaidSticker.ts", "../src/parser/classes/livechat/items/LiveChatPlaceholderItem.ts", "../src/parser/classes/livechat/items/LiveChatProductItem.ts", "../src/parser/classes/livechat/items/LiveChatRestrictedParticipation.ts", "../src/parser/classes/LiveChatAuthorBadge.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsHeader.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsGiftPurchaseAnnouncement.ts", "../src/parser/classes/livechat/items/LiveChatSponsorshipsGiftRedemptionAnnouncement.ts", "../src/parser/classes/livechat/items/LiveChatTextMessage.ts", "../src/parser/classes/livechat/items/LiveChatTickerPaidMessageItem.ts", "../src/parser/classes/livechat/items/LiveChatTickerPaidStickerItem.ts", "../src/parser/classes/livechat/items/LiveChatTickerSponsorItem.ts", "../src/parser/classes/livechat/items/LiveChatViewerEngagementMessage.ts", "../src/parser/classes/livechat/items/PollHeader.ts", "../src/parser/classes/livechat/LiveChatActionPanel.ts", "../src/parser/classes/livechat/MarkChatItemAsDeletedAction.ts", "../src/parser/classes/livechat/MarkChatItemsByAuthorAsDeletedAction.ts", "../src/parser/classes/livechat/RemoveBannerForLiveChatCommand.ts", "../src/parser/classes/livechat/RemoveChatItemAction.ts", "../src/parser/classes/livechat/RemoveChatItemByAuthorAction.ts", "../src/parser/classes/livechat/ReplaceChatItemAction.ts", "../src/parser/classes/livechat/ReplaceLiveChatAction.ts", "../src/parser/classes/livechat/ReplayChatItemAction.ts", "../src/parser/classes/livechat/ShowLiveChatActionPanelAction.ts", "../src/parser/classes/livechat/ShowLiveChatDialogAction.ts", "../src/parser/classes/livechat/ShowLiveChatTooltipCommand.ts", "../src/parser/classes/livechat/UpdateDateTextAction.ts", "../src/parser/classes/livechat/UpdateDescriptionAction.ts", "../src/parser/classes/livechat/UpdateLiveChatPollAction.ts", "../src/parser/classes/livechat/UpdateTitleAction.ts", "../src/parser/classes/livechat/UpdateToggleButtonTextAction.ts", "../src/parser/classes/livechat/UpdateViewershipAction.ts", "../src/parser/classes/LiveChatDialog.ts", "../src/parser/classes/LiveChatHeader.ts", "../src/parser/classes/LiveChatItemList.ts", "../src/parser/classes/LiveChatMessageInput.ts", "../src/parser/classes/LiveChatParticipant.ts", "../src/parser/classes/LiveChatParticipantsList.ts", "../src/parser/classes/LockupMetadataView.ts", "../src/parser/classes/LockupView.ts", "../src/parser/classes/MacroMarkersListEntity.ts", "../src/parser/classes/menus/MenuNavigationItem.ts", "../src/parser/classes/menus/MenuPopup.ts", "../src/parser/classes/Notification.ts", "../src/parser/classes/menus/MultiPageMenuNotificationSection.ts", "../src/parser/classes/menus/MusicMenuItemDivider.ts", "../src/parser/classes/menus/MusicMultiSelectMenuItem.ts", "../src/parser/classes/menus/MusicMultiSelectMenu.ts", "../src/parser/classes/menus/SimpleMenuHeader.ts", "../src/parser/classes/MerchandiseItem.ts", "../src/parser/classes/MerchandiseShelf.ts", "../src/parser/classes/MetadataRow.ts", "../src/parser/classes/MetadataRowContainer.ts", "../src/parser/classes/MetadataRowHeader.ts", "../src/parser/classes/MetadataScreen.ts", "../src/parser/classes/MicroformatData.ts", "../src/parser/classes/Mix.ts", "../src/parser/classes/ModalWithTitleAndButton.ts", "../src/parser/classes/Movie.ts", "../src/parser/classes/MovingThumbnail.ts", "../src/parser/classes/MusicCardShelfHeaderBasic.ts", "../src/parser/classes/MusicInlineBadge.ts", "../src/parser/classes/MusicPlayButton.ts", "../src/parser/classes/MusicItemThumbnailOverlay.ts", "../src/parser/classes/MusicThumbnail.ts", "../src/parser/classes/MusicCardShelf.ts", "../src/parser/classes/MusicCarouselShelfBasicHeader.ts", "../src/parser/classes/MusicMultiRowListItem.ts", "../src/parser/classes/MusicNavigationButton.ts", "../src/parser/classes/MusicResponsiveListItemFixedColumn.ts", "../src/parser/classes/MusicResponsiveListItemFlexColumn.ts", "../src/parser/classes/MusicResponsiveListItem.ts", "../src/parser/classes/MusicTwoRowItem.ts", "../src/parser/classes/MusicCarouselShelf.ts", "../src/parser/classes/MusicDescriptionShelf.ts", "../src/parser/classes/MusicDetailHeader.ts", "../src/parser/classes/MusicDownloadStateBadge.ts", "../src/parser/classes/MusicEditablePlaylistDetailHeader.ts", "../src/parser/classes/MusicElementHeader.ts", "../src/parser/classes/MusicHeader.ts", "../src/parser/classes/MusicImmersiveHeader.ts", "../src/parser/classes/MusicLargeCardItemCarousel.ts", "../src/parser/classes/MusicPlaylistEditHeader.ts", "../src/parser/classes/MusicPlaylistShelf.ts", "../src/parser/classes/PlaylistPanelVideo.ts", "../src/parser/classes/PlaylistPanelVideoWrapper.ts", "../src/parser/classes/PlaylistPanel.ts", "../src/parser/classes/MusicQueue.ts", "../src/parser/classes/MusicResponsiveHeader.ts", "../src/parser/classes/MusicShelf.ts", "../src/parser/classes/MusicSideAlignedItem.ts", "../src/parser/classes/MusicSortFilterButton.ts", "../src/parser/classes/MusicTastebuilderShelfThumbnail.ts", "../src/parser/classes/MusicTastebuilderShelf.ts", "../src/parser/classes/MusicVisualHeader.ts", "../src/parser/classes/mweb/MobileTopbar.ts", "../src/parser/classes/mweb/MultiPageMenuSection.ts", "../src/parser/classes/mweb/PivotBar.ts", "../src/parser/classes/mweb/PivotBarItem.ts", "../src/parser/classes/mweb/TopbarMenuButton.ts", "../src/parser/classes/NotificationAction.ts", "../src/parser/classes/OpenOnePickAddVideoModalCommand.ts", "../src/parser/classes/PageHeaderView.ts", "../src/parser/classes/PageHeader.ts", "../src/parser/classes/PageIntroduction.ts", "../src/parser/classes/PivotButton.ts", "../src/parser/classes/PlayerAnnotationsExpanded.ts", "../src/parser/classes/PlayerCaptionsTracklist.ts", "../src/parser/classes/PlayerOverflow.ts", "../src/parser/classes/PlayerControlsOverlay.ts", "../src/parser/classes/PlayerErrorMessage.ts", "../src/parser/classes/PlayerLegacyDesktopYpcOffer.ts", "../src/parser/classes/YpcTrailer.ts", "../src/parser/classes/PlayerLegacyDesktopYpcTrailer.ts", "../src/parser/classes/PlayerLiveStoryboardSpec.ts", "../src/parser/classes/PlayerMicroformat.ts", "../src/parser/classes/PlayerOverlayAutoplay.ts", "../src/parser/classes/PlayerOverlayVideoDetails.ts", "../src/parser/classes/WatchNextEndScreen.ts", "../src/parser/classes/PlayerOverlay.ts", "../src/parser/classes/PlaylistHeader.ts", "../src/parser/classes/PlaylistInfoCardContent.ts", "../src/parser/classes/PlaylistMetadata.ts", "../src/parser/classes/PlaylistSidebar.ts", "../src/parser/classes/PlaylistSidebarPrimaryInfo.ts", "../src/parser/classes/PlaylistSidebarSecondaryInfo.ts", "../src/parser/classes/PlaylistThumbnailOverlay.ts", "../src/parser/classes/PlaylistVideo.ts", "../src/parser/classes/PlaylistVideoList.ts", "../src/parser/classes/Poll.ts", "../src/parser/classes/Post.ts", "../src/parser/classes/PostMultiImage.ts", "../src/parser/classes/PremiereTrailerBadge.ts", "../src/parser/classes/ProductListHeader.ts", "../src/parser/classes/ProductListItem.ts", "../src/parser/classes/ProfileColumn.ts", "../src/parser/classes/ProfileColumnStats.ts", "../src/parser/classes/ProfileColumnStatsEntry.ts", "../src/parser/classes/ProfileColumnUserInfo.ts", "../src/parser/classes/Quiz.ts", "../src/parser/classes/RecognitionShelf.ts", "../src/parser/classes/ReelItem.ts", "../src/parser/classes/ReelPlayerHeader.ts", "../src/parser/classes/ReelPlayerOverlay.ts", "../src/parser/classes/RelatedChipCloud.ts", "../src/parser/classes/RichGrid.ts", "../src/parser/classes/RichItem.ts", "../src/parser/classes/RichListHeader.ts", "../src/parser/classes/RichMetadata.ts", "../src/parser/classes/RichMetadataRow.ts", "../src/parser/classes/RichSection.ts", "../src/parser/classes/RichShelf.ts", "../src/parser/classes/SearchFilter.ts", "../src/parser/classes/SearchFilterGroup.ts", "../src/parser/classes/SearchFilterOptionsDialog.ts", "../src/parser/classes/SearchHeader.ts", "../src/parser/classes/SearchSubMenu.ts", "../src/parser/classes/SearchSuggestionsSection.ts", "../src/parser/classes/UniversalWatchCard.ts", "../src/parser/classes/SecondarySearchContainer.ts", "../src/parser/classes/SectionHeaderView.ts", "../src/parser/classes/SegmentedLikeDislikeButton.ts", "../src/parser/classes/SettingBoolean.ts", "../src/parser/classes/SettingsCheckbox.ts", "../src/parser/classes/SettingsSwitch.ts", "../src/parser/classes/SettingsOptions.ts", "../src/parser/classes/SettingsSidebar.ts", "../src/parser/classes/SharedPost.ts", "../src/parser/classes/SharePanelHeader.ts", "../src/parser/classes/SharePanelTitleV15.ts", "../src/parser/classes/ShareTarget.ts", "../src/parser/classes/Shelf.ts", "../src/parser/classes/ShortsLockupView.ts", "../src/parser/classes/ShowingResultsFor.ts", "../src/parser/classes/SimpleCardContent.ts", "../src/parser/classes/SimpleCardTeaser.ts", "../src/parser/classes/SimpleTextSection.ts", "../src/parser/classes/SingleActionEmergencySupport.ts", "../src/parser/classes/Tab.ts", "../src/parser/classes/SingleColumnBrowseResults.ts", "../src/parser/classes/SingleColumnMusicWatchNextResults.ts", "../src/parser/classes/SingleHeroImage.ts", "../src/parser/classes/SlimOwner.ts", "../src/parser/classes/SlimVideoMetadata.ts", "../src/parser/classes/StartAt.ts", "../src/parser/classes/Tabbed.ts", "../src/parser/classes/TabbedSearchResults.ts", "../src/parser/classes/TextHeader.ts", "../src/parser/classes/ThirdPartyShareTargetSection.ts", "../src/parser/classes/ThumbnailLandscapePortrait.ts", "../src/parser/classes/ThumbnailOverlayEndorsement.ts", "../src/parser/classes/ThumbnailOverlayHoverText.ts", "../src/parser/classes/ThumbnailOverlayInlineUnplayable.ts", "../src/parser/classes/ThumbnailOverlayLoadingPreview.ts", "../src/parser/classes/ThumbnailOverlayNowPlaying.ts", "../src/parser/classes/ThumbnailOverlayPinking.ts", "../src/parser/classes/ThumbnailOverlayPlaybackStatus.ts", "../src/parser/classes/ThumbnailOverlayResumePlayback.ts", "../src/parser/classes/ThumbnailOverlaySidePanel.ts", "../src/parser/classes/ThumbnailOverlayToggleButton.ts", "../src/parser/classes/TitleAndButtonListHeader.ts", "../src/parser/classes/ToggleFormField.ts", "../src/parser/classes/ToggleMenuServiceItem.ts", "../src/parser/classes/Tooltip.ts", "../src/parser/classes/TopicChannelDetails.ts", "../src/parser/classes/TwoColumnBrowseResults.ts", "../src/parser/classes/TwoColumnSearchResults.ts", "../src/parser/classes/TwoColumnWatchNextResults.ts", "../src/parser/classes/UnifiedSharePanel.ts", "../src/parser/classes/UpsellDialog.ts", "../src/parser/classes/VerticalList.ts", "../src/parser/classes/VerticalWatchCardList.ts", "../src/parser/classes/VideoInfoCardContent.ts", "../src/parser/classes/VideoMetadataCarouselView.ts", "../src/parser/classes/misc/SubscriptionButton.ts", "../src/parser/classes/VideoOwner.ts", "../src/parser/classes/VideoViewCount.ts", "../src/parser/classes/VideoPrimaryInfo.ts", "../src/parser/classes/VideoSecondaryInfo.ts", "../src/parser/classes/WatchCardCompactVideo.ts", "../src/parser/classes/WatchCardHeroVideo.ts", "../src/parser/classes/WatchCardRichHeader.ts", "../src/parser/classes/WatchCardSectionSequence.ts", "../src/parser/classes/WatchNextTabbedResults.ts", "../src/parser/classes/ytkids/AnchoredSection.ts", "../src/parser/classes/ytkids/KidsBlocklistPickerItem.ts", "../src/parser/classes/ytkids/KidsBlocklistPicker.ts", "../src/parser/classes/ytkids/KidsCategoryTab.ts", "../src/parser/classes/ytkids/KidsCategoriesHeader.ts", "../src/parser/classes/ytkids/KidsHomeScreen.ts", "../src/parser/generator.ts", "../src/parser/continuations.ts", "../protos/generated/misc/common.ts", "../src/parser/classes/misc/Format.ts", "../src/parser/classes/misc/VideoDetails.ts", "../src/parser/youtube/index.ts", "../src/parser/youtube/AccountInfo.ts", "../src/core/mixins/Feed.ts", "../src/core/mixins/FilterableFeed.ts", "../src/core/mixins/index.ts", "../src/core/mixins/MediaInfo.ts", "../src/core/mixins/TabbedFeed.ts", "../src/parser/youtube/Channel.ts", "../src/parser/youtube/Comments.ts", "../src/parser/youtube/Guide.ts", "../src/parser/youtube/History.ts", "../src/parser/youtube/HomeFeed.ts", "../src/parser/youtube/HashtagFeed.ts", "../src/parser/youtube/ItemMenu.ts", "../src/parser/youtube/Playlist.ts", "../src/parser/youtube/Library.ts", "../src/parser/youtube/SmoothedQueue.ts", "../src/parser/youtube/LiveChat.ts", "../src/parser/youtube/NotificationsMenu.ts", "../src/parser/youtube/Search.ts", "../src/parser/youtube/Settings.ts", "../src/parser/youtube/VideoInfo.ts", "../src/parser/youtube/TranscriptInfo.ts", "../src/parser/ytmusic/index.ts", "../src/parser/ytmusic/Album.ts", "../src/parser/ytmusic/Artist.ts", "../src/parser/ytmusic/Explore.ts", "../src/parser/ytmusic/HomeFeed.ts", "../src/parser/ytmusic/Library.ts", "../src/parser/ytmusic/Playlist.ts", "../src/parser/ytmusic/Recap.ts", "../src/parser/ytmusic/Search.ts", "../src/parser/ytmusic/TrackInfo.ts", "../src/parser/ytkids/index.ts", "../src/parser/ytkids/Channel.ts", "../src/parser/ytkids/HomeFeed.ts", "../src/parser/ytkids/Search.ts", "../src/parser/ytkids/VideoInfo.ts", "../src/parser/ytshorts/index.ts", "../src/parser/ytshorts/ShortFormVideoInfo.ts", "../src/parser/types/index.ts", "../src/parser/classes/misc/Author.ts", "../src/utils/user-agents.ts", "../src/platform/polyfills/node-custom-event.ts", "../src/core/Actions.ts", "../src/core/OAuth2.ts", "../src/core/Player.ts", "../src/core/Session.ts", "../src/core/clients/index.ts", "../src/core/clients/Kids.ts", "../src/core/clients/Music.ts", "../protos/generated/youtube/api/pfiinnertube/capability_info.ts", "../protos/generated/youtube/api/pfiinnertube/client_info.ts", "../protos/generated/youtube/api/pfiinnertube/attestation_response_data.ts", "../protos/generated/youtube/api/pfiinnertube/request_info.ts", "../protos/generated/youtube/api/pfiinnertube/third_party_info.ts", "../protos/generated/youtube/api/pfiinnertube/user_info.ts", "../protos/generated/youtube/api/pfiinnertube/innertube_context.ts", "../protos/generated/youtube/api/pfiinnertube/metadata_update_request.ts", "../src/core/clients/Studio.ts", "../src/core/managers/index.ts", "../src/core/managers/AccountManager.ts", "../src/core/managers/PlaylistManager.ts", "../src/core/managers/InteractionManager.ts", "../src/Innertube.ts", "../src/types/index.ts", "../src/platform/lib.ts", "../src/platform/jsruntime/jinter.ts"],
  "sourcesContent": ["// Node.js Platform Support\nimport { ReadableStream } from 'stream/web';\nimport {\n  fetch as defaultFetch,\n  Request,\n  Response,\n  Headers,\n  FormData,\n  File\n} from 'undici';\nimport type { ICache } from '../types/Cache.js';\nimport { Platform } from '../utils/Utils.js';\nimport crypto from 'crypto';\nimport type { FetchFunction } from '../types/PlatformShim.js';\nimport path from 'path';\nimport os from 'os';\nimport fs from 'fs/promises';\nimport CustomEvent from './polyfills/node-custom-event.js';\nimport { fileURLToPath } from 'url';\nimport evaluate from './jsruntime/jinter.js';\nimport { $INLINE_JSON } from 'ts-transformer-inline-file';\n\nconst meta_url = import.meta.url;\nconst is_cjs = !meta_url;\nconst __dirname__ = is_cjs ? __dirname : path.dirname(fileURLToPath(meta_url));\n\nconst { homepage, version, bugs } = $INLINE_JSON('../../package.json');\nconst repo_url = homepage?.split('#')[0];\n\nclass Cache implements ICache {\n  #persistent_directory: string;\n  #persistent: boolean;\n\n  constructor(persistent = false, persistent_directory?: string) {\n    this.#persistent_directory = persistent_directory || Cache.default_persistent_directory;\n    this.#persistent = persistent;\n  }\n\n  static get temp_directory() {\n    return `${os.tmpdir()}/youtubei.js`;\n  }\n\n  static get default_persistent_directory() {\n    return path.resolve(__dirname__, '..', '..', '.cache', 'youtubei.js');\n  }\n\n  get cache_dir() {\n    return this.#persistent ? this.#persistent_directory : Cache.temp_directory;\n  }\n\n  async #createCache() {\n    const dir = this.cache_dir;\n    try {\n      const cwd = await fs.stat(dir);\n      if (!cwd.isDirectory())\n        throw new Error('An unexpected file was found in place of the cache directory');\n    } catch (e: any) {\n      if (e?.code === 'ENOENT')\n        await fs.mkdir(dir, { recursive: true });\n      else\n        throw e;\n    }\n  }\n\n  async get(key: string) {\n    await this.#createCache();\n    const file = path.resolve(this.cache_dir, key);\n    try {\n      const stat = await fs.stat(file);\n      if (stat.isFile()) {\n        const data: Buffer = await fs.readFile(file);\n        return data.buffer;\n      }\n      throw new Error('An unexpected file was found in place of the cache key');\n\n    } catch (e: any) {\n      if (e?.code === 'ENOENT')\n        return undefined;\n      throw e;\n    }\n  }\n\n  async set(key: string, value: ArrayBuffer) {\n    await this.#createCache();\n    const file = path.resolve(this.cache_dir, key);\n    await fs.writeFile(file, new Uint8Array(value));\n  }\n\n  async remove(key: string) {\n    await this.#createCache();\n    const file = path.resolve(this.cache_dir, key);\n    try {\n      await fs.unlink(file);\n    } catch (e: any) {\n      if (e?.code === 'ENOENT') return;\n      throw e;\n    }\n  }\n}\n\nPlatform.load({\n  runtime: 'node',\n  info: {\n    version: version,\n    bugs_url: bugs?.url || `${repo_url}/issues`,\n    repo_url\n  },\n  server: true,\n  Cache: Cache,\n  sha1Hash: async (data: string) => {\n    return crypto.createHash('sha1').update(data).digest('hex');\n  },\n  uuidv4() {\n    return crypto.randomUUID();\n  },\n  eval: evaluate,\n  fetch: defaultFetch as unknown as FetchFunction,\n  Request: Request as unknown as typeof globalThis.Request,\n  Response: Response as unknown as typeof globalThis.Response,\n  Headers: Headers as unknown as typeof globalThis.Headers,\n  FormData: FormData as unknown as typeof globalThis.FormData,\n  File: File as unknown as typeof globalThis.File,\n  ReadableStream: ReadableStream as unknown as typeof globalThis.ReadableStream,\n  CustomEvent: CustomEvent as unknown as typeof globalThis.CustomEvent\n});\n\nexport * from './lib.js';\nimport Innertube from './lib.js';\nexport default Innertube;\n", "import type { Node } from 'estree';\nimport { Jinter } from 'jintr';\n\nimport type { EmojiRun, TextRun } from '../parser/misc.js';\nimport type { FetchFunction } from '../types/index.js';\nimport type PlatformShim from '../types/PlatformShim.js';\n\nimport { Memo } from '../parser/helpers.js';\nimport { Text } from '../parser/misc.js';\nimport * as Log from './Log.js';\nimport userAgents from './user-agents.js';\n\nconst TAG_ = 'Utils';\n\nlet shim: PlatformShim | undefined;\n\nexport class Platform {\n  static load(platform: PlatformShim): void {\n    shim = platform;\n  }\n\n  static get shim(): PlatformShim {\n    if (!shim) {\n      throw new Error('Platform is not loaded');\n    }\n    return shim;\n  }\n}\n\nexport class InnertubeError extends Error {\n  date: Date;\n  version: string;\n  info?: any;\n\n  constructor(message: string, info?: any) {\n    super(message);\n\n    if (info) {\n      this.info = info;\n    }\n\n    this.date = new Date();\n    this.version = Platform.shim.info.version;\n  }\n}\n\nexport class ParsingError extends InnertubeError {\n}\n\nexport class MissingParamError extends InnertubeError {\n}\n\nexport class OAuth2Error extends InnertubeError {\n}\n\nexport class PlayerError extends Error {\n}\n\nexport class SessionError extends Error {\n}\n\nexport class ChannelError extends Error {\n}\n\n/**\n * Compares given objects. May not work correctly for\n * objects with methods.\n */\nexport function deepCompare(obj1: any, obj2: any): boolean {\n  const keys = Reflect.ownKeys(obj1);\n  return keys.some((key) => {\n    const is_text = obj2[key] instanceof Text;\n    if (!is_text && typeof obj2[key] === 'object') {\n      return JSON.stringify(obj1[key]) === JSON.stringify(obj2[key]);\n    }\n    return obj1[key] === (is_text ? obj2[key].toString() : obj2[key]);\n  });\n}\n\n/**\n * Finds a string between two delimiters.\n * @param data - the data.\n * @param start_string - start string.\n * @param end_string - end string.\n */\nexport function getStringBetweenStrings(data: string, start_string: string, end_string: string): string | undefined {\n  const regex = new RegExp(`${escapeStringRegexp(start_string)}(.*?)${escapeStringRegexp(end_string)}`, 's');\n  const match = data.match(regex);\n  return match ? match[1] : undefined;\n}\n\nexport function escapeStringRegexp(input: string): string {\n  return input.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n\nexport type DeviceCategory = 'mobile' | 'desktop';\n\n/**\n * Returns a random user agent.\n * @param type - mobile | desktop\n */\nexport function getRandomUserAgent(type: DeviceCategory): string {\n  const available_agents = userAgents[type];\n  const random_index = Math.floor(Math.random() * available_agents.length);\n  return available_agents[random_index];\n}\n\n/**\n * Generates an authentication token from a cookies' sid.\n * @param sid - Sid extracted from cookies\n */\nexport async function generateSidAuth(sid: string): Promise<string> {\n  const youtube = 'https://www.youtube.com';\n\n  const timestamp = Math.floor(new Date().getTime() / 1000);\n  const input = [ timestamp, sid, youtube ].join(' ');\n  const gen_hash = await Platform.shim.sha1Hash(input);\n\n  return [ 'SAPISIDHASH', [ timestamp, gen_hash ].join('_') ].join(' ');\n}\n\n/**\n * Generates a random string with the given length.\n *\n */\nexport function generateRandomString(length: number): string {\n  const result = [];\n\n  const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n  for (let i = 0; i < length; i++) {\n    result.push(alphabet.charAt(Math.floor(Math.random() * alphabet.length)));\n  }\n\n  return result.join('');\n}\n\n/**\n * Converts time (h:m:s) to seconds.\n * @returns seconds\n */\nexport function timeToSeconds(time: string): number {\n  const params = time.split(':').map((param) => parseInt(param.replace(/\\D/g, '')));\n  switch (params.length) {\n    case 1:\n      return params[0];\n    case 2:\n      return params[0] * 60 + params[1];\n    case 3:\n      return params[0] * 3600 + params[1] * 60 + params[2];\n    default:\n      throw new Error('Invalid time string');\n  }\n}\n\nexport function concatMemos(...iterables: Array<Memo | undefined>): Memo {\n  const memo = new Memo();\n\n  for (const iterable of iterables) {\n    if (!iterable) continue;\n    for (const item of iterable) {\n      // Update existing items.\n      const memo_item = memo.get(item[0]);\n      if (memo_item) {\n        memo.set(item[0], [ ...memo_item, ...item[1] ]);\n        continue;\n      }\n\n      memo.set(...item);\n    }\n  }\n\n  return memo;\n}\n\nexport function throwIfMissing(params: object): void {\n  for (const [ key, value ] of Object.entries(params)) {\n    if (!value)\n      throw new MissingParamError(`${key} is missing`);\n  }\n}\n\nexport function hasKeys<T extends object, R extends (keyof T)[]>(params: T, ...keys: R): params is Exclude<T, R[number]> & Required<Pick<T, R[number]>> {\n  for (const key of keys) {\n    if (!Reflect.has(params, key) || (params[key] === undefined))\n      return false;\n  }\n  return true;\n}\n\nexport async function* streamToIterable(stream: ReadableStream<Uint8Array>) {\n  const reader = stream.getReader();\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) {\n        return;\n      }\n      yield value;\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\nexport const debugFetch: FetchFunction = (input, init) => {\n  const url =\n    typeof input === 'string' ?\n      new URL(input) :\n      input instanceof URL ?\n        input : new URL(input.url);\n\n  const headers =\n    init?.headers ?\n      new Headers(init.headers) :\n      input instanceof Request ?\n        input.headers :\n        new Headers();\n\n  const arr_headers = [ ...headers ];\n\n  const body_contents =\n    init?.body ?\n      typeof init.body === 'string' ?\n        headers.get('content-type') === 'application/json' ?\n          JSON.stringify(JSON.parse(init.body), null, 2) : // Body is string and json\n          init.body : // Body is string\n        '    <binary>' : // Body is not string\n      '    (none)'; // No body provided\n\n  const headers_serialized =\n    arr_headers.length > 0 ?\n      `${arr_headers.map(([ key, value ]) => `    ${key}: ${value}`).join('\\n')}` :\n      '    (none)';\n\n  Log.warn(TAG_,\n    'Fetch:\\n' +\n    `  url: ${url.toString()}\\n` +\n    `  method: ${init?.method || 'GET'}\\n` +\n    `  headers:\\n${headers_serialized}\\n' + \n    '  body:\\n${body_contents}`\n  );\n\n  return Platform.shim.fetch(input, init);\n};\n\nexport function u8ToBase64(u8: Uint8Array): string {\n  return btoa(String.fromCharCode.apply(null, Array.from(u8)));\n}\n\nexport function base64ToU8(base64: string): Uint8Array {\n  const standard_base64 = base64.replace(/-/g, '+').replace(/_/g, '/');\n  const padded_base64 = standard_base64.padEnd(standard_base64.length + (4 - standard_base64.length % 4) % 4, '=');\n  return new Uint8Array(atob(padded_base64).split('').map((char) => char.charCodeAt(0)));\n}\n\nexport function isTextRun(run: TextRun | EmojiRun): run is TextRun {\n  return !('emoji' in run);\n}\n\nexport function getCookie(cookies: string, name: string, matchWholeName = false): string | undefined {\n  const regex = matchWholeName ? `(^|\\\\s?)\\\\b${name}\\\\b=([^;]+)` : `(^|s?)${name}=([^;]+)`;\n  const match = cookies.match(new RegExp(regex));\n  return match ? match[2] : undefined;\n}\n\nexport type ASTLookupArgs = {\n  /**\n   * The name of the function.\n   */\n  name?: string;\n\n  /**\n   * A string that must be included in the function's code for it to be considered.\n   */\n  includes?: string;\n\n  /**\n   * A regular expression that the function's code must match.\n   */\n  regexp?: RegExp;\n\n  /**\n   * The abstract syntax tree of the source code.\n   */\n  ast?: ReturnType<typeof Jinter.parseScript>;\n};\n\nexport type ASTLookupResult = {\n  start: number;\n  end: number;\n  name: string;\n  node: Record<string, any>;\n  result: string;\n};\n\n/**\n * Searches for a function in the given code based on specified criteria.\n *\n * @example\n * ```ts\n * const source = '(function() {var foo, bar; foo = function() { console.log(\"foo\"); }; bar = function() { console.log(\"bar\"); }; })();';\n * const result = findFunction(source, { name: 'bar' });\n * console.log(result);\n * // Output: { start: 69, end: 110, name: 'bar', node: { ... }, result: 'bar = function() { console.log(\"bar\"); };' }\n * ```\n * \n * @returns An object containing the function's details if found, `undefined` otherwise.\n */\nexport function findFunction(source: string, args: ASTLookupArgs): ASTLookupResult | undefined {\n  const { name, includes, regexp, ast } = args;\n\n  const node = ast ? ast : Jinter.parseScript(source);\n  const stack = [ node ] as (Node & { start: number; end: number })[];\n\n  for (let i = 0; i < stack.length; i++) {\n    const current = stack[i];\n\n    if (\n      current.type === 'ExpressionStatement' && (\n        current.expression.type === 'AssignmentExpression' &&\n        current.expression.left.type === 'Identifier' &&\n        current.expression.right.type === 'FunctionExpression'\n      )\n    ) {\n      const code = source.substring(current.start, current.end);\n\n      if (\n        (name && current.expression.left.name === name) ||\n        (includes && code.includes(includes)) ||\n        (regexp && regexp.test(code))\n      ) {\n        return {\n          start: current.start,\n          end: current.end,\n          name: current.expression.left.name,\n          node: current,\n          result: code\n        };\n      }\n    }\n\n    for (const key in current) {\n      const child = (current as Record<string, any>)[key];\n      if (Array.isArray(child)) {\n        stack.push(...child);\n      } else if (typeof child === 'object' && child !== null) {\n        stack.push(child);\n      }\n    }\n  }\n}\n\n/**\n * Searches for a variable declaration in the given code based on specified criteria.\n *\n * @example\n * ```ts\n * // Find a variable by name\n * const code = 'const x = 5; let y = \"hello\";';\n * const a = findVariable(code, { name: 'y' });\n * console.log(a?.result);\n *\n * // Find a variable containing specific text\n * const b = findVariable(code, { includes: 'hello' });\n * console.log(b?.result);\n *\n * // Find a variable matching a pattern\n * const c = findVariable(code, { regexp: /y\\s*=\\s*\"hello\"/ });\n * console.log(c?.result);\n * ```\n * \n * @returns An object containing the variable's details if found, `undefined` otherwise.\n */\nexport function findVariable(code: string, options: ASTLookupArgs): ASTLookupResult | undefined {\n  const ast = options.ast ? options.ast : Jinter.parseScript(code, { ecmaVersion: 'latest', ranges: true });\n\n  let found: ASTLookupResult | undefined;\n\n  function walk(node: Node): void {\n    if (found) return;\n\n    if (node.type === 'VariableDeclaration') {\n      const [ start, end ] = node.range!;\n      const node_source = code.slice(start, end);\n\n      for (const declarator of node.declarations) {\n        if (declarator.id.type === 'Identifier') {\n          const var_name = declarator.id.name;\n          if (options.name && var_name === options.name) {\n            found = { start, end, name: var_name, node, result: node_source };\n            return;\n          }\n        }\n      }\n      if (\n        (options.includes && node_source.includes(options.includes)) ||\n        (options.regexp && options.regexp.test(node_source))) {\n        found = { start, end, name: (node.declarations?.[0]?.id as any)?.name, node, result: node_source };\n        return;\n      }\n    }\n\n    for (const key in node) {\n      if (Object.prototype.hasOwnProperty.call(node, key)) {\n        const child = node[key as keyof typeof node] as any;\n        if (Array.isArray(child)) {\n          for (const c of child) {\n            if (c && typeof c.type === 'string') {\n              walk(c);\n              if (found) return;\n            }\n          }\n        } else if (child && typeof child.type === 'string') {\n          walk(child);\n          if (found) return;\n        }\n      }\n    }\n  }\n\n  walk(ast);\n  return found;\n}", "// This file is generated automatically. Do not modify it.\nexport { default as ArrayExpression } from './ArrayExpression.js';\nexport { default as ArrowFunctionExpression } from './ArrowFunctionExpression.js';\nexport { default as AssignmentExpression } from './AssignmentExpression.js';\nexport { default as BinaryExpression } from './BinaryExpression.js';\nexport { default as BlockStatement } from './BlockStatement.js';\nexport { default as BreakStatement } from './BreakStatement.js';\nexport { default as CallExpression } from './CallExpression.js';\nexport { default as ConditionalExpression } from './ConditionalExpression.js';\nexport { default as ContinueStatement } from './ContinueStatement.js';\nexport { default as EmptyStatement } from './EmptyStatement.js';\nexport { default as ExpressionStatement } from './ExpressionStatement.js';\nexport { default as ForOfStatement } from './ForOfStatement.js';\nexport { default as ForStatement } from './ForStatement.js';\nexport { default as FunctionDeclaration } from './FunctionDeclaration.js';\nexport { default as FunctionExpression } from './FunctionExpression.js';\nexport { default as Identifier } from './Identifier.js';\nexport { default as IfStatement } from './IfStatement.js';\nexport { default as Literal } from './Literal.js';\nexport { default as LogicalExpression } from './LogicalExpression.js';\nexport { default as MemberExpression } from './MemberExpression.js';\nexport { default as NewExpression } from './NewExpression.js';\nexport { default as ObjectExpression } from './ObjectExpression.js';\nexport { default as Property } from './Property.js';\nexport { default as ReturnStatement } from './ReturnStatement.js';\nexport { default as SequenceExpression } from './SequenceExpression.js';\nexport { default as SwitchCase } from './SwitchCase.js';\nexport { default as SwitchStatement } from './SwitchStatement.js';\nexport { default as TemplateLiteral } from './TemplateLiteral.js';\nexport { default as ThisExpression } from './ThisExpression.js';\nexport { default as ThrowStatement } from './ThrowStatement.js';\nexport { default as TryStatement } from './TryStatement.js';\nexport { default as UnaryExpression } from './UnaryExpression.js';\nexport { default as UpdateExpression } from './UpdateExpression.js';\nexport { default as VariableDeclaration } from './VariableDeclaration.js';\nexport { default as WhileStatement } from './WhileStatement.js';\n", "export default class BaseJSNode {\n    constructor(node, visitor) {\n        this.node = node;\n        this.visitor = visitor;\n    }\n    run() { }\n}\n", "import BaseNode from './BaseJSNode.js';\nexport default class ArrayExpression extends BaseNode {\n    run() {\n        return this.node.elements.map((el) => this.visitor.visitNode(el));\n    }\n}\n", "export const namedFunction = (name, fn) => Object.defineProperty(fn, 'name', { value: name });\nexport class JinterError extends Error {\n    constructor(message, info) {\n        super(message);\n        if (info) {\n            this.info = info;\n        }\n    }\n}\n", "import { namedFunction } from '../utils/index.js';\nimport BaseJSNode from './BaseJSNode.js';\nexport default class ArrowFunctionExpression extends BaseJSNode {\n    run() {\n        const { params, body } = this.node;\n        // @TODO: Handle other types of params and pass them directly to next node instead of saving them in the global scope\n        const fn = namedFunction('anonymous function', (args) => {\n            let index = 0;\n            for (const param of params) {\n                this.visitor.visitNode(param);\n                if (param.type === 'Identifier') {\n                    this.visitor.scope.set(param.name, args[index]);\n                }\n                else {\n                    console.warn('Unhandled param type', param.type);\n                }\n                index++;\n            }\n            return this.visitor.visitNode(body);\n        });\n        return fn;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class AssignmentExpression extends BaseJSNode {\n    handleMemberExpression(leftNode, rightValue, operation) {\n        const obj = this.visitor.visitNode(leftNode.object);\n        const prop = this.visitor.visitNode(leftNode.property);\n        const currentValue = obj[prop];\n        const newValue = operation(currentValue, rightValue);\n        return (obj[prop] = newValue);\n    }\n    handleIdentifier(leftNode, rightValue, operation) {\n        const currentValue = this.visitor.visitNode(leftNode);\n        const newValue = operation(currentValue, rightValue);\n        this.visitor.scope.set(leftNode.name, newValue);\n        return this.visitor.scope.get(leftNode.name);\n    }\n    run() {\n        const { operator, left, right } = this.node;\n        const rightValue = this.visitor.visitNode(right);\n        const operation = AssignmentExpression.operatorMap[operator];\n        if (!operation) {\n            console.warn('Unhandled operator:', operator);\n            return undefined;\n        }\n        if (left.type === 'MemberExpression') {\n            return this.handleMemberExpression(left, rightValue, operation);\n        }\n        else if (left.type === 'Identifier') {\n            return this.handleIdentifier(left, rightValue, operation);\n        }\n        console.warn('Unhandled left node type:', left.type);\n        return undefined;\n    }\n}\nAssignmentExpression.operatorMap = {\n    '=': (_, right) => right,\n    '+=': (left, right) => left + right,\n    '-=': (left, right) => left - right,\n    '*=': (left, right) => left * right,\n    '/=': (left, right) => left / right,\n    '%=': (left, right) => left % right,\n    '**=': (left, right) => left ** right,\n    '<<=': (left, right) => left << right,\n    '>>=': (left, right) => left >> right,\n    '>>>=': (left, right) => left >>> right,\n    '&=': (left, right) => left & right,\n    '^=': (left, right) => left ^ right,\n    '|=': (left, right) => left | right\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class BinaryExpression extends BaseJSNode {\n    run() {\n        const { operator, left, right } = this.node;\n        // Pre-evaluate both nodes.\n        const leftValue = this.visitor.visitNode(left);\n        const rightValue = this.visitor.visitNode(right);\n        const operation = BinaryExpression.operatorMap[operator];\n        if (!operation) {\n            console.warn('Unhandled binary operator:', operator);\n            return undefined;\n        }\n        return operation(leftValue, rightValue);\n    }\n}\nBinaryExpression.operatorMap = {\n    // Comparison operators\n    '!=': (left, right) => left != right,\n    '!==': (left, right) => left !== right,\n    '==': (left, right) => left == right,\n    '===': (left, right) => left === right,\n    '<': (left, right) => left < right,\n    '<=': (left, right) => left <= right,\n    '>': (left, right) => left > right,\n    '>=': (left, right) => left >= right,\n    // Arithmetic operators\n    '+': (left, right) => left + right,\n    '-': (left, right) => left - right,\n    '*': (left, right) => left * right,\n    '/': (left, right) => left / right,\n    '%': (left, right) => left % right,\n    '**': (left, right) => left ** right,\n    // Bitwise operators\n    '&': (left, right) => left & right,\n    '|': (left, right) => left | right,\n    '^': (left, right) => left ^ right,\n    '<<': (left, right) => left << right,\n    '>>': (left, right) => left >> right,\n    '>>>': (left, right) => left >>> right,\n    // Type checking operators\n    'in': (left, right) => left in right,\n    'instanceof': (left, right) => left instanceof right\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class BlockStatement extends BaseJSNode {\n    run() {\n        for (const stmt of this.node.body) {\n            const result = this.visitor.visitNode(stmt);\n            if (stmt.type === 'ReturnStatement')\n                return result;\n            if (result === '$jintr_break_' || result === '$jintr_continue_')\n                return result;\n            if ((stmt.type === 'WhileStatement' ||\n                stmt.type === 'IfStatement' ||\n                stmt.type === 'ForStatement' ||\n                stmt.type === 'TryStatement') &&\n                !!result) {\n                return result;\n            }\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class BreakStatement extends BaseJSNode {\n    run() {\n        // @TODO: Parse label\n        return '$jintr_break_';\n    }\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CallExpression_instances, _CallExpression_throwError, _CallExpression_getCalleeString;\nimport BaseJSNode from './BaseJSNode.js';\nimport { JinterError } from '../utils/index.js';\nconst builtins = {\n    // Override the forEach method so that the \"this\" arg is set correctly\n    forEach: (args, target, visitor) => {\n        const arr = target;\n        // Set forEach's \u201Cthis\u201D arg\n        if (args.length > 1) {\n            visitor.scope.set('_this', args.slice(-1)[0]);\n        }\n        // Execute callback function\n        let index = 0;\n        for (const element of arr) {\n            args[0]([element, index++, arr]);\n        }\n    },\n    // Also override the toString method so that it stringifies the correct object\n    toString: (_args, target) => {\n        return target.toString();\n    }\n};\nexport default class CallExpression extends BaseJSNode {\n    constructor() {\n        super(...arguments);\n        _CallExpression_instances.add(this);\n    }\n    run() {\n        let exp_object;\n        let exp_property;\n        if (this.node.callee.type === 'MemberExpression') {\n            exp_object = this.visitor.getName(this.node.callee.object);\n            exp_property = this.visitor.getName(this.node.callee.property);\n        }\n        else if (this.node.callee.type === 'Identifier') {\n            exp_property = this.node.callee.name;\n        }\n        // Obj.fn(...);\n        if (exp_object && this.visitor.listeners[exp_object]) {\n            const cb = this.visitor.listeners[exp_object](this.node, this.visitor);\n            if (cb !== '__continue_exec') {\n                return cb;\n            }\n        }\n        // ?.fn(...);\n        if (exp_property && exp_property !== 'toString' && this.visitor.listeners[exp_property]) {\n            const cb = this.visitor.listeners[exp_property](this.node, this.visitor);\n            if (cb !== '__continue_exec') {\n                return cb;\n            }\n        }\n        if (this.node.callee.type === 'MemberExpression') {\n            const obj = this.visitor.visitNode(this.node.callee.object);\n            const prop = this.node.callee.computed ? this.visitor.visitNode(this.node.callee.property) : this.visitor.getName(this.node.callee.property);\n            const args = this.node.arguments.map((arg) => this.visitor.visitNode(arg));\n            if (prop in builtins) {\n                return builtins[prop](args, obj, this.visitor);\n            }\n            if (!obj)\n                __classPrivateFieldGet(this, _CallExpression_instances, \"m\", _CallExpression_throwError).call(this);\n            if (typeof obj[prop] !== 'function')\n                __classPrivateFieldGet(this, _CallExpression_instances, \"m\", _CallExpression_throwError).call(this);\n            if (obj[prop].toString().includes('[native code]'))\n                return obj[prop](...args);\n            return obj[prop](args);\n        }\n        const fn = this.visitor.visitNode(this.node.callee);\n        const args = this.node.arguments.map((arg) => this.visitor.visitNode(arg));\n        if (typeof fn !== 'function')\n            __classPrivateFieldGet(this, _CallExpression_instances, \"m\", _CallExpression_throwError).call(this);\n        return fn(args);\n    }\n}\n_CallExpression_instances = new WeakSet(), _CallExpression_throwError = function _CallExpression_throwError() {\n    if (this.node.callee.type === 'MemberExpression' || this.node.callee.type === 'Identifier') {\n        const callee_string = __classPrivateFieldGet(this, _CallExpression_instances, \"m\", _CallExpression_getCalleeString).call(this, this.node.callee);\n        throw new JinterError(`${callee_string} is not a function`);\n    }\n    else if (this.node.callee.type === 'SequenceExpression') {\n        const call = [];\n        const items = [];\n        call.push('(');\n        this.node.callee.expressions.forEach((expr) => {\n            if (expr.type === 'Literal') {\n                items.push(expr.raw || '');\n            }\n            else if (expr.type === 'Identifier') {\n                items.push(expr.name);\n            }\n            else if (expr.type === 'MemberExpression') {\n                if (expr.computed) {\n                    items.push(`${this.visitor.getName(expr.object)}[${this.visitor.getName(expr.property) || '...'}]`);\n                }\n                else {\n                    items.push(`${this.visitor.getName(expr.object)}.${this.visitor.getName(expr.property)}`);\n                }\n            }\n        });\n        call.push(items.join(', '));\n        call.push(')');\n        throw new JinterError(`${call.join('')} is not a function`);\n    }\n}, _CallExpression_getCalleeString = function _CallExpression_getCalleeString(node) {\n    if (node.type === 'Identifier') {\n        return node.name;\n    }\n    else if (node.type === 'MemberExpression') {\n        const object_string = __classPrivateFieldGet(this, _CallExpression_instances, \"m\", _CallExpression_getCalleeString).call(this, node.object);\n        const property_string = node.computed ? `[${this.visitor.getName(node.property) || '...'}]` : `.${this.visitor.getName(node.property)}`;\n        return `${object_string}${property_string}`;\n    }\n    return '<unknown>';\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ConditionalExpression extends BaseJSNode {\n    run() {\n        const { test, consequent, alternate } = this.node;\n        const check = this.visitor.visitNode(test);\n        if (check) {\n            return this.visitor.visitNode(consequent);\n        }\n        return this.visitor.visitNode(alternate);\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ContinueStatement extends BaseJSNode {\n    run() {\n        return '$jintr_continue_';\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class EmptyStatement extends BaseJSNode {\n    run() {\n        return undefined;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ExpressionStatement extends BaseJSNode {\n    run() {\n        return this.visitor.visitNode(this.node.expression);\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ForOfStatement extends BaseJSNode {\n    run() {\n        this.visitor.visitNode(this.node.left);\n        const right_node = this.visitor.visitNode(this.node.right);\n        for (const el of right_node) {\n            if (this.node.left.type === 'VariableDeclaration' && this.node.left.declarations[0].id.type === 'Identifier') {\n                this.visitor.scope.set(this.node.left.declarations[0].id.name, el);\n            }\n            else if (this.node.left.type === 'VariableDeclaration' && this.node.left.declarations[0].id.type === 'ObjectPattern') {\n                for (const propert of this.node.left.declarations[0].id.properties) {\n                    if (propert.type === 'Property' && (propert.value.type === 'Identifier' && propert.key.type === 'Identifier')) {\n                        this.visitor.scope.set(propert.value.name, el[propert.key.name]);\n                    }\n                }\n            }\n            const body = this.visitor.visitNode(this.node.body);\n            if (body === '$jintr_break_') {\n                break;\n            }\n            if (body === '$jintr_continue_') {\n                continue;\n            }\n            if (body && this.node.body.type !== 'ExpressionStatement') {\n                return body;\n            }\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ForStatement extends BaseJSNode {\n    run() {\n        if (this.node.init) {\n            this.visitor.visitNode(this.node.init);\n        }\n        const test = () => {\n            return this.node.test\n                ? this.visitor.visitNode(this.node.test)\n                : true;\n        };\n        for (;;) {\n            const _test = test();\n            if (!_test) {\n                break;\n            }\n            const body = this.visitor.visitNode(this.node.body);\n            if (body === '$jintr_continue_') {\n                continue;\n            }\n            if (body === '$jintr_break_') {\n                break;\n            }\n            if (this.node.update) {\n                this.visitor.visitNode(this.node.update);\n            }\n            if (body && this.node.body.type !== 'ExpressionStatement') {\n                return body;\n            }\n        }\n    }\n}\n", "import { namedFunction } from '../utils/index.js';\nimport BaseJSNode from './BaseJSNode.js';\nexport default class FunctionDeclaration extends BaseJSNode {\n    run() {\n        const { params, body } = this.node;\n        const id = this.visitor.visitNode(this.node.id);\n        // @TODO: Handle other types of params and pass them directly to next node instead of saving them in the global scope\n        const fn = namedFunction(id, (args) => {\n            let index = 0;\n            for (const param of params) {\n                this.visitor.visitNode(param);\n                if (param.type === 'Identifier') {\n                    this.visitor.scope.set(param.name, args[index]);\n                }\n                else {\n                    console.warn('Unhandled param type', param.type);\n                }\n                index++;\n            }\n            return this.visitor.visitNode(body);\n        });\n        this.visitor.scope.set(id, fn);\n    }\n}\n", "import { namedFunction } from '../utils/index.js';\nimport BaseJSNode from './BaseJSNode.js';\nexport default class FunctionExpression extends BaseJSNode {\n    run() {\n        const { params, body } = this.node;\n        const fn = namedFunction('anonymous function', (args) => {\n            let index = 0;\n            for (const param of params) {\n                this.visitor.visitNode(param);\n                if (param.type === 'Identifier') {\n                    this.visitor.scope.set(param.name, args[index]);\n                }\n                else {\n                    console.warn('Unhandled param type', param.type);\n                }\n                index++;\n            }\n            return this.visitor.visitNode(body);\n        });\n        return fn;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class Identifier extends BaseJSNode {\n    run() {\n        if (this.visitor.listeners[this.node.name]) {\n            const cb = this.visitor.listeners[this.node.name](this.node, this.visitor);\n            if (cb !== '__continue_exec') {\n                return cb;\n            }\n        }\n        if (this.visitor.scope.has(this.node.name))\n            return this.visitor.scope.get(this.node.name);\n        return this.node.name;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class IfStatement extends BaseJSNode {\n    run() {\n        const test = this.visitor.visitNode(this.node.test);\n        if (test) {\n            return this.visitor.visitNode(this.node.consequent);\n        }\n        else if (this.node.alternate) {\n            return this.visitor.visitNode(this.node.alternate);\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class Literal extends BaseJSNode {\n    run() {\n        return this.node.value;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class LogicalExpression extends BaseJSNode {\n    run() {\n        const { operator, left, right } = this.node;\n        const operation = LogicalExpression.operatorMap[operator];\n        if (!operation) {\n            console.warn('Unhandled logical operator:', operator);\n            return undefined;\n        }\n        return operation(this.visitor, left, right);\n    }\n}\nLogicalExpression.operatorMap = {\n    '&&': (visitor, leftNode, rightNode) => {\n        const leftValue = visitor.visitNode(leftNode);\n        return leftValue === true ? visitor.visitNode(rightNode) : leftValue;\n    },\n    '||': (visitor, leftNode, rightNode) => {\n        const leftValue = visitor.visitNode(leftNode);\n        return leftValue || visitor.visitNode(rightNode);\n    },\n    '??': (visitor, leftNode, rightNode) => {\n        const normalizeUndefined = (value, isIdentifier) => isIdentifier && value === 'undefined' ? undefined : value;\n        const leftValue = normalizeUndefined(visitor.visitNode(leftNode), leftNode.type === 'Identifier');\n        const rightValue = normalizeUndefined(visitor.visitNode(rightNode), rightNode.type === 'Identifier');\n        return leftValue ?? rightValue;\n    }\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class MemberExpression extends BaseJSNode {\n    run() {\n        const { object, property, computed } = this.node;\n        const obj = this.visitor.visitNode(object);\n        const prop = computed ? this.visitor.visitNode(property) : this.visitor.getName(property);\n        if (prop !== undefined || prop !== null) {\n            if (this.visitor.listeners[prop]) {\n                const cb = this.visitor.listeners[prop](this.node, this.visitor);\n                if (cb !== '__continue_exec') {\n                    return cb;\n                }\n            }\n            return obj?.[prop];\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class NewExpression extends BaseJSNode {\n    run() {\n        const callee = this.visitor.visitNode(this.node.callee);\n        const args = this.node.arguments.map((arg) => this.visitor.visitNode(arg));\n        return args.length ? new callee(args) : new callee();\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ObjectExpression extends BaseJSNode {\n    run() {\n        let result = {};\n        for (const prop of this.node.properties) {\n            if (prop.type === 'Property') {\n                result = { ...result, ...this.visitor.visitNode(prop) };\n            }\n            else {\n                throw new Error(`Unhandled property type: ${prop.type}`);\n            }\n        }\n        return result;\n    }\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Property_instances, _Property_init, _Property_get, _Property_set;\nimport BaseJSNode from './BaseJSNode.js';\nexport default class Property extends BaseJSNode {\n    constructor() {\n        super(...arguments);\n        _Property_instances.add(this);\n    }\n    run() {\n        switch (this.node.kind) {\n            case 'init':\n                return __classPrivateFieldGet(this, _Property_instances, \"m\", _Property_init).call(this);\n            case 'get':\n                return __classPrivateFieldGet(this, _Property_instances, \"m\", _Property_get).call(this);\n            case 'set':\n                return __classPrivateFieldGet(this, _Property_instances, \"m\", _Property_set).call(this);\n            default:\n                throw new Error(`Unhandled property kind: ${this.node.kind}`);\n        }\n    }\n}\n_Property_instances = new WeakSet(), _Property_init = function _Property_init() {\n    const key = this.node.computed ? this.visitor.visitNode(this.node.key) : this.visitor.getName(this.node.key);\n    const value = this.visitor.visitNode(this.node.value);\n    if (key) {\n        return { [key]: value };\n    }\n}, _Property_get = function _Property_get() {\n    throw new TypeError('Not implemented: Property.get');\n}, _Property_set = function _Property_set() {\n    throw new TypeError('Not implemented: Property.set');\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ReturnStatement extends BaseJSNode {\n    run() {\n        if (this.node.argument) {\n            return this.visitor.visitNode(this.node.argument);\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class SequenceExpression extends BaseJSNode {\n    run() {\n        let result;\n        for (const expression of this.node.expressions) {\n            result = this.visitor.visitNode(expression);\n        }\n        return result;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class SwitchCase extends BaseJSNode {\n    run() {\n        for (const stmt of this.node.consequent) {\n            const result = this.visitor.visitNode(stmt);\n            if (stmt.type === 'ContinueStatement' || stmt.type === 'BreakStatement') {\n                return result;\n            }\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class SwitchStatement extends BaseJSNode {\n    run() {\n        const discriminant = this.visitor.visitNode(this.node.discriminant);\n        let matched = false;\n        let default_case = -1;\n        let index = 0;\n        while (true) {\n            const _case = this.node.cases[index];\n            if (matched) {\n                const result = this.visitor.visitNode(_case);\n                // If it's a break then stop here.\n                if (result === '$jintr_break_') {\n                    break;\n                }\n                // Switch statements do not support continue, but it can be used when inside a while/for loop.\n                if (result === '$jintr_continue_') {\n                    return result;\n                }\n                ++index;\n                if (index >= this.node.cases.length) {\n                    index = 0;\n                    break;\n                }\n                else {\n                    continue;\n                }\n            }\n            matched = _case && (discriminant === this.visitor.visitNode(_case.test));\n            // Ran through all cases and checked everything, break the loop.\n            if (matched === undefined && index > this.node.cases.length)\n                break;\n            // Save the default case so we can get back to it later.\n            if (_case && !matched && !_case.test) {\n                default_case = index;\n                index += 1;\n                continue;\n            }\n            // Ran through all cases but no match \u2014 run default case.\n            if (!_case && !matched && default_case !== -1) {\n                matched = true;\n                index = default_case;\n                continue;\n            }\n            if (!matched) {\n                ++index;\n            }\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class TemplateLiteral extends BaseJSNode {\n    run() {\n        let result = '';\n        for (let i = 0; i < this.node.quasis.length; ++i) {\n            const quasi = this.node.quasis[i];\n            if (quasi.type === 'TemplateElement') {\n                if (quasi.value.cooked === null) {\n                    throw new Error(`Invalid template literal: ${quasi.value.raw}`);\n                }\n                if (quasi.value.cooked !== undefined) {\n                    result += quasi.value.cooked;\n                }\n                if (!quasi.tail) {\n                    const expr = this.node.expressions[i];\n                    if (expr !== undefined) {\n                        // This will automatically stringify the node's return value, since result is a string.\n                        result += this.visitor.visitNode(expr);\n                    }\n                    else {\n                        throw new Error(`Expected expression after: ${quasi.value}`);\n                    }\n                }\n            }\n            else {\n                throw new Error(`Unhandled quasi type: ${quasi.type}`);\n            }\n        }\n        return result;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ThisExpression extends BaseJSNode {\n    run() {\n        return this.visitor.scope.get('_this');\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class ThrowStatement extends BaseJSNode {\n    run() {\n        const arg = this.visitor.visitNode(this.node.argument);\n        throw arg;\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class TryStatement extends BaseJSNode {\n    run() {\n        try {\n            return this.visitor.visitNode(this.node.block);\n        }\n        catch (e) {\n            if (this.node.handler) {\n                if (this.node.handler.param && this.node.handler.param.type === 'Identifier') {\n                    this.visitor.scope.set(this.node.handler.param.name, e);\n                }\n                return this.visitor.visitNode(this.node.handler.body);\n            }\n        }\n        finally {\n            this.visitor.visitNode(this.node.finalizer);\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class UnaryExpression extends BaseJSNode {\n    static isValidOperator(operator) {\n        return operator in UnaryExpression.operatorMap;\n    }\n    run() {\n        const { operator, argument } = this.node;\n        if (!UnaryExpression.isValidOperator(operator)) {\n            console.warn('Unhandled unary operator:', operator);\n            return undefined;\n        }\n        return UnaryExpression.operatorMap[operator](this.visitor, argument);\n    }\n}\nUnaryExpression.operatorMap = {\n    // Arithmetic operators\n    '-': (visitor, argument) => -visitor.visitNode(argument),\n    '+': (visitor, argument) => +visitor.visitNode(argument),\n    // Logical/Bitwise operators\n    '!': (visitor, argument) => !visitor.visitNode(argument),\n    '~': (visitor, argument) => ~visitor.visitNode(argument),\n    // Type/Value operators\n    'void': (visitor, argument) => {\n        visitor.visitNode(argument);\n        return undefined;\n    },\n    'typeof': (visitor, argument) => {\n        const arg = visitor.visitNode(argument);\n        if (argument.type === 'Identifier' && arg === 'undefined')\n            return 'undefined';\n        return typeof visitor.visitNode(argument);\n    },\n    // Property/Variable deletion\n    'delete': (visitor, argument) => {\n        if (argument.type === 'MemberExpression') {\n            const obj = visitor.visitNode(argument.object);\n            const prop = argument.computed\n                ? visitor.visitNode(argument.property)\n                : visitor.getName(argument.property);\n            return delete obj[prop];\n        }\n        if (argument.type === 'Identifier' && visitor.scope.has(argument.name)) {\n            return visitor.scope.delete(argument.name);\n        }\n        return true;\n    }\n};\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class UpdateExpression extends BaseJSNode {\n    run() {\n        const operator = this.node.operator;\n        switch (operator) {\n            case '++':\n                {\n                    if (this.node.argument.type === 'MemberExpression') {\n                        const target_node = this.visitor.visitNode(this.node.argument.object);\n                        return target_node[this.visitor.visitNode(this.node.argument.property)]++;\n                    }\n                    else if (this.node.argument.type === 'Identifier') {\n                        let target_node = this.visitor.visitNode(this.node.argument);\n                        this.visitor.scope.set(this.node.argument.name, target_node + 1);\n                        return this.node.prefix ? ++target_node : target_node;\n                    }\n                }\n                break;\n            case '--':\n                {\n                    if (this.node.argument.type === 'MemberExpression') {\n                        const target_node = this.visitor.visitNode(this.node.argument.object);\n                        return target_node[this.visitor.visitNode(this.node.argument.property)]--;\n                    }\n                    else if (this.node.argument.type === 'Identifier') {\n                        let target_node = this.visitor.visitNode(this.node.argument);\n                        this.visitor.scope.set(this.node.argument.name, target_node - 1);\n                        return this.node.prefix ? --target_node : target_node;\n                    }\n                }\n                break;\n        }\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class VariableDeclaration extends BaseJSNode {\n    run() {\n        // TODO: Parse kind\n        this.node.declarations.forEach((declar) => {\n            const { id, init } = declar;\n            const key = this.visitor.getName(id);\n            const value = init\n                ? this.visitor.visitNode(init)\n                : undefined;\n            if (key)\n                this.visitor.scope.set(key, value);\n            if (typeof value === 'object' && value !== null)\n                this.visitor.scope.set('_this', value);\n        });\n    }\n}\n", "import BaseJSNode from './BaseJSNode.js';\nexport default class WhileStatement extends BaseJSNode {\n    run() {\n        while (this.visitor.visitNode(this.node.test)) {\n            const body = this.visitor.visitNode(this.node.body);\n            if (body === '$jintr_break_')\n                break;\n            if (body === '$jintr_continue_')\n                continue;\n            if (body)\n                return body;\n        }\n    }\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Visitor_instances, _Visitor_getNode;\nimport * as Nodes from './nodes/index.js';\nexport default class Visitor {\n    constructor() {\n        _Visitor_instances.add(this);\n        this.scope = new Map();\n        this.listeners = {};\n        this.ast = [];\n    }\n    setAST(ast) {\n        this.ast = ast;\n    }\n    run() {\n        let result;\n        for (const node of this.ast) {\n            result = this.visitNode(node);\n        }\n        return result;\n    }\n    /**\n     * Visits a given node and executes it.\n     */\n    visitNode(node) {\n        if (!node)\n            return null;\n        const targetNode = __classPrivateFieldGet(this, _Visitor_instances, \"m\", _Visitor_getNode).call(this, node.type);\n        if (targetNode) {\n            const instance = new targetNode(node, this);\n            return instance.run();\n        }\n        return null;\n    }\n    /**\n     * Gets the name of a node.\n     * @param node - The target node.\n     */\n    getName(node) {\n        if (node.type === 'Identifier')\n            return node.name;\n        else if (node.type === 'Literal')\n            return node.value;\n    }\n    /**\n     * Listens for node calls. Can be used to override default behavior or add new functionality.\n     * @param node_name - The node to listen for.\n     * @param listener - The callback function.\n     */\n    on(node_name, listener) {\n        this.listeners[node_name] = listener;\n    }\n}\n_Visitor_instances = new WeakSet(), _Visitor_getNode = function _Visitor_getNode(type) {\n    const node = Nodes[type];\n    if (!node) {\n        console.warn('[JINTER]:', `JavaScript node \"${type}\" not implemented!\\nIf this is causing unexpected behavior, please report it at https://github.com/LuanRT/Jinter/issues/new`);\n    }\n    return node;\n};\n", "// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n  5: ecma5AndLessKeywords,\n  \"5module\": ecma5AndLessKeywords + \" export import\",\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n  var pos = 0x10000;\n  for (var i = 0; i < set.length; i += 2) {\n    pos += set[i];\n    if (pos > code) { return false }\n    pos += set[i + 1];\n    if (pos >= code) { return true }\n  }\n  return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n  if (code < 65) { return code === 36 }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n  if (code < 48) { return code === 36 }\n  if (code < 58) { return true }\n  if (code < 65) { return false }\n  if (code < 91) { return true }\n  if (code < 97) { return code === 95 }\n  if (code < 123) { return true }\n  if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n  if (astral === false) { return false }\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n  if ( conf === void 0 ) conf = {};\n\n  this.label = label;\n  this.keyword = conf.keyword;\n  this.beforeExpr = !!conf.beforeExpr;\n  this.startsExpr = !!conf.startsExpr;\n  this.isLoop = !!conf.isLoop;\n  this.isAssign = !!conf.isAssign;\n  this.prefix = !!conf.prefix;\n  this.postfix = !!conf.postfix;\n  this.binop = conf.binop || null;\n  this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n  return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n  if ( options === void 0 ) options = {};\n\n  options.keyword = name;\n  return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  privateId: new TokenType(\"privateId\", startsExpr),\n  eof: new TokenType(\"eof\"),\n\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  questionDot: new TokenType(\"?.\"),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n  assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n  incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n  prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {beforeExpr: true}),\n  coalesce: binop(\"??\", 1),\n\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {isLoop: true}),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {isLoop: true}),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\", startsExpr),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n  _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n  _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n  _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n  return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n  if ( end === void 0 ) end = code.length;\n\n  for (var i = from; i < end; i++) {\n    var next = code.charCodeAt(i);\n    if (isNewLine(next))\n      { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n  }\n  return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n  hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n  toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n  return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) { return String.fromCharCode(code) }\n  code -= 0x10000;\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n  this.line = line;\n  this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n  return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n  this.start = start;\n  this.end = end;\n  if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n  for (var line = 1, cur = 0;;) {\n    var nextBreak = nextLineBreak(input, cur, offset);\n    if (nextBreak < 0) { return new Position(line, offset - cur) }\n    ++line;\n    cur = nextBreak;\n  }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n  // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n  // (the latest version the library supports). This influences\n  // support for strict mode, the set of reserved words, and support\n  // for new syntax features.\n  ecmaVersion: null,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called when\n  // a semicolon is automatically inserted. It will be passed the\n  // position of the inserted semicolon as an offset, and if\n  // `locations` is enabled, it is given the location as a `{line,\n  // column}` object as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program, and an import.meta expression\n  // in a script isn't considered an error.\n  allowImportExportEverywhere: false,\n  // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: null,\n  // When enabled, super identifiers are not constrained to\n  // appearing in methods and do not raise an error when they appear elsewhere.\n  allowSuperOutsideMethod: null,\n  // When enabled, hashbang directive in the beginning of file is\n  // allowed and treated as a line comment. Enabled by default when\n  // `ecmaVersion` >= 2023.\n  allowHashBang: false,\n  // By default, the parser will verify that private properties are\n  // only used in places where they are valid and have been declared.\n  // Set this to false to turn such checks off.\n  checkPrivateFields: true,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback\u2014that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback\u2014that will corrupt its internal state.\n  // When this option has an array as value, objects representing the\n  // comments are pushed to it.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n  var options = {};\n\n  for (var opt in defaultOptions)\n    { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n  if (options.ecmaVersion === \"latest\") {\n    options.ecmaVersion = 1e8;\n  } else if (options.ecmaVersion == null) {\n    if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n      warnedAboutEcmaVersion = true;\n      console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n    }\n    options.ecmaVersion = 11;\n  } else if (options.ecmaVersion >= 2015) {\n    options.ecmaVersion -= 2009;\n  }\n\n  if (options.allowReserved == null)\n    { options.allowReserved = options.ecmaVersion < 5; }\n\n  if (!opts || opts.allowHashBang == null)\n    { options.allowHashBang = options.ecmaVersion >= 14; }\n\n  if (isArray(options.onToken)) {\n    var tokens = options.onToken;\n    options.onToken = function (token) { return tokens.push(token); };\n  }\n  if (isArray(options.onComment))\n    { options.onComment = pushComment(options, options.onComment); }\n\n  return options\n}\n\nfunction pushComment(options, array) {\n  return function(block, text, start, end, startLoc, endLoc) {\n    var comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    };\n    if (options.locations)\n      { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n    if (options.ranges)\n      { comment.range = [start, end]; }\n    array.push(comment);\n  }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n    SCOPE_TOP = 1,\n    SCOPE_FUNCTION = 2,\n    SCOPE_ASYNC = 4,\n    SCOPE_GENERATOR = 8,\n    SCOPE_ARROW = 16,\n    SCOPE_SIMPLE_CATCH = 32,\n    SCOPE_SUPER = 64,\n    SCOPE_DIRECT_SUPER = 128,\n    SCOPE_CLASS_STATIC_BLOCK = 256,\n    SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n    BIND_NONE = 0, // Not a binding\n    BIND_VAR = 1, // Var-style binding\n    BIND_LEXICAL = 2, // Let- or const-style binding\n    BIND_FUNCTION = 3, // Function declaration\n    BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n    BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n  this.options = options = getOptions(options);\n  this.sourceFile = options.sourceFile;\n  this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n  var reserved = \"\";\n  if (options.allowReserved !== true) {\n    reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n    if (options.sourceType === \"module\") { reserved += \" await\"; }\n  }\n  this.reservedWords = wordsRegexp(reserved);\n  var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n  this.reservedWordsStrict = wordsRegexp(reservedStrict);\n  this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n  this.input = String(input);\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  this.containsEsc = false;\n\n  // Set up token state\n\n  // The current position of the tokenizer in the input.\n  if (startPos) {\n    this.pos = startPos;\n    this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n  } else {\n    this.pos = this.lineStart = 0;\n    this.curLine = 1;\n  }\n\n  // Properties of the current token:\n  // Its type\n  this.type = types$1.eof;\n  // For tokens that include more information than their type, the value\n  this.value = null;\n  // Its start and end offset\n  this.start = this.end = this.pos;\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  this.startLoc = this.endLoc = this.curPosition();\n\n  // Position information for the previous token\n  this.lastTokEndLoc = this.lastTokStartLoc = null;\n  this.lastTokStart = this.lastTokEnd = this.pos;\n\n  // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n  this.context = this.initialContext();\n  this.exprAllowed = true;\n\n  // Figure out if it's a module code.\n  this.inModule = options.sourceType === \"module\";\n  this.strict = this.inModule || this.strictDirective(this.pos);\n\n  // Used to signify the start of a potential arrow function\n  this.potentialArrowAt = -1;\n  this.potentialArrowInForAwait = false;\n\n  // Positions to delayed-check that yield/await does not exist in default parameters.\n  this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n  // Labels in scope.\n  this.labels = [];\n  // Thus-far undefined exports.\n  this.undefinedExports = Object.create(null);\n\n  // If enabled, skip leading hashbang line.\n  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n    { this.skipLineComment(2); }\n\n  // Scope tracking for duplicate variable names (see scope.js)\n  this.scopeStack = [];\n  this.enterScope(SCOPE_TOP);\n\n  // For RegExp validation\n  this.regexpState = null;\n\n  // The stack of private names.\n  // Each element has two properties: 'declared' and 'used'.\n  // When it exited from the outermost class definition, all used private names must be declared.\n  this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n  var node = this.options.program || this.startNode();\n  this.nextToken();\n  return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n  for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n    if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n  }\n  return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n  var ref = this.currentThisScope();\n    var flags = ref.flags;\n    var inClassFieldInit = ref.inClassFieldInit;\n  return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n  return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n    var plugins = [], len = arguments.length;\n    while ( len-- ) plugins[ len ] = arguments[ len ];\n\n  var cls = this;\n  for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n  return cls\n};\n\nParser.parse = function parse (input, options) {\n  return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n  var parser = new this(options, input, pos);\n  parser.nextToken();\n  return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n  return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n  if (this.options.ecmaVersion < 5) { return false }\n  for (;;) {\n    // Try to find string literal.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    var match = literal.exec(this.input.slice(start));\n    if (!match) { return false }\n    if ((match[1] || match[2]) === \"use strict\") {\n      skipWhiteSpace.lastIndex = start + match[0].length;\n      var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n      var next = this.input.charAt(end);\n      return next === \";\" || next === \"}\" ||\n        (lineBreak.test(spaceAfter[0]) &&\n         !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n    }\n    start += match[0].length;\n\n    // Skip semicolon, if any.\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this.input)[0].length;\n    if (this.input[start] === \";\")\n      { start++; }\n  }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n  if (this.type === type) {\n    this.next();\n    return true\n  } else {\n    return false\n  }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n  return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n  if (!this.isContextual(name)) { return false }\n  this.next();\n  return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n  if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n  return this.type === types$1.eof ||\n    this.type === types$1.braceR ||\n    lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon)\n      { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n    return true\n  }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n  if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma)\n      { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n    if (!notNext)\n      { this.next(); }\n    return true\n  }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n  this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n  this.shorthandAssign =\n  this.trailingComma =\n  this.parenthesizedAssign =\n  this.parenthesizedBind =\n  this.doubleProto =\n    -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) { return }\n  if (refDestructuringErrors.trailingComma > -1)\n    { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n  if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) { return false }\n  var shorthandAssign = refDestructuringErrors.shorthandAssign;\n  var doubleProto = refDestructuringErrors.doubleProto;\n  if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n  if (shorthandAssign >= 0)\n    { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n  if (doubleProto >= 0)\n    { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n    { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n  if (this.awaitPos)\n    { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n  if (expr.type === \"ParenthesizedExpression\")\n    { return this.isSimpleAssignTarget(expr.expression) }\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n  var exports = Object.create(null);\n  if (!node.body) { node.body = []; }\n  while (this.type !== types$1.eof) {\n    var stmt = this.parseStatement(null, true, exports);\n    node.body.push(stmt);\n  }\n  if (this.inModule)\n    { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n      {\n        var name = list[i];\n\n        this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n      } }\n  this.adaptDirectivePrologue(node.body);\n  this.next();\n  node.sourceType = this.options.sourceType;\n  return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n  // For ambiguous cases, determine if a LexicalDeclaration (or only a\n  // Statement) is allowed here. If context is not empty then only a Statement\n  // is allowed. However, `let [` is an explicit negative lookahead for\n  // ExpressionStatement, so special-case it first.\n  if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n  if (context) { return false }\n\n  if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n  if (isIdentifierStart(nextCh, true)) {\n    var pos = next + 1;\n    while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n    if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n    var ident = this.input.slice(next, pos);\n    if (!keywordRelationalOperator.test(ident)) { return true }\n  }\n  return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n    { return false }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length, after;\n  return !lineBreak.test(this.input.slice(this.pos, next)) &&\n    this.input.slice(next, next + 8) === \"function\" &&\n    (next + 8 === this.input.length ||\n     !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n  var starttype = this.type, node = this.startNode(), kind;\n\n  if (this.isLet(context)) {\n    starttype = types$1._var;\n    kind = \"let\";\n  }\n\n  // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n  switch (starttype) {\n  case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n  case types$1._debugger: return this.parseDebuggerStatement(node)\n  case types$1._do: return this.parseDoStatement(node)\n  case types$1._for: return this.parseForStatement(node)\n  case types$1._function:\n    // Function as sole body of either an if statement or a labeled statement\n    // works, but not when it is part of a labeled statement that is the sole\n    // body of an if statement.\n    if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n    return this.parseFunctionStatement(node, false, !context)\n  case types$1._class:\n    if (context) { this.unexpected(); }\n    return this.parseClass(node, true)\n  case types$1._if: return this.parseIfStatement(node)\n  case types$1._return: return this.parseReturnStatement(node)\n  case types$1._switch: return this.parseSwitchStatement(node)\n  case types$1._throw: return this.parseThrowStatement(node)\n  case types$1._try: return this.parseTryStatement(node)\n  case types$1._const: case types$1._var:\n    kind = kind || this.value;\n    if (context && kind !== \"var\") { this.unexpected(); }\n    return this.parseVarStatement(node, kind)\n  case types$1._while: return this.parseWhileStatement(node)\n  case types$1._with: return this.parseWithStatement(node)\n  case types$1.braceL: return this.parseBlock(true, node)\n  case types$1.semi: return this.parseEmptyStatement(node)\n  case types$1._export:\n  case types$1._import:\n    if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n      skipWhiteSpace.lastIndex = this.pos;\n      var skip = skipWhiteSpace.exec(this.input);\n      var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n      if (nextCh === 40 || nextCh === 46) // '(' or '.'\n        { return this.parseExpressionStatement(node, this.parseExpression()) }\n    }\n\n    if (!this.options.allowImportExportEverywhere) {\n      if (!topLevel)\n        { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n      if (!this.inModule)\n        { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n    }\n    return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n  default:\n    if (this.isAsyncFunction()) {\n      if (context) { this.unexpected(); }\n      this.next();\n      return this.parseFunctionStatement(node, true, !context)\n    }\n\n    var maybeName = this.value, expr = this.parseExpression();\n    if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n      { return this.parseLabeledStatement(node, maybeName, expr, context) }\n    else { return this.parseExpressionStatement(node, expr) }\n  }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n  var isBreak = keyword === \"break\";\n  this.next();\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n  else if (this.type !== types$1.name) { this.unexpected(); }\n  else {\n    node.label = this.parseIdent();\n    this.semicolon();\n  }\n\n  // Verify that there is an actual destination to break or\n  // continue to.\n  var i = 0;\n  for (; i < this.labels.length; ++i) {\n    var lab = this.labels[i];\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n      if (node.label && isBreak) { break }\n    }\n  }\n  if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n  this.next();\n  this.semicolon();\n  return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n  this.next();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"do\");\n  this.labels.pop();\n  this.expect(types$1._while);\n  node.test = this.parseParenExpression();\n  if (this.options.ecmaVersion >= 6)\n    { this.eat(types$1.semi); }\n  else\n    { this.semicolon(); }\n  return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n  this.next();\n  var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n  this.labels.push(loopLabel);\n  this.enterScope(0);\n  this.expect(types$1.parenL);\n  if (this.type === types$1.semi) {\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, null)\n  }\n  var isLet = this.isLet();\n  if (this.type === types$1._var || this.type === types$1._const || isLet) {\n    var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n    this.next();\n    this.parseVar(init$1, true, kind);\n    this.finishNode(init$1, \"VariableDeclaration\");\n    if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types$1._in) {\n          if (awaitAt > -1) { this.unexpected(awaitAt); }\n        } else { node.await = awaitAt > -1; }\n      }\n      return this.parseForIn(node, init$1)\n    }\n    if (awaitAt > -1) { this.unexpected(awaitAt); }\n    return this.parseFor(node, init$1)\n  }\n  var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n  var containsEsc = this.containsEsc;\n  var refDestructuringErrors = new DestructuringErrors;\n  var initPos = this.start;\n  var init = awaitAt > -1\n    ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n    : this.parseExpression(true, refDestructuringErrors);\n  if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n    if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n      if (this.type === types$1._in) { this.unexpected(awaitAt); }\n      node.await = true;\n    } else if (isForOf && this.options.ecmaVersion >= 8) {\n      if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n      else if (this.options.ecmaVersion >= 9) { node.await = false; }\n    }\n    if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n    this.toAssignable(init, false, refDestructuringErrors);\n    this.checkLValPattern(init);\n    return this.parseForIn(node, init)\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true);\n  }\n  if (awaitAt > -1) { this.unexpected(awaitAt); }\n  return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n  this.next();\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  // allow function declarations in branches, but only in non-strict mode\n  node.consequent = this.parseStatement(\"if\");\n  node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n  return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n    { this.raise(this.start, \"'return' outside of function\"); }\n  this.next();\n\n  // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n  else { node.argument = this.parseExpression(); this.semicolon(); }\n  return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n  this.next();\n  node.discriminant = this.parseParenExpression();\n  node.cases = [];\n  this.expect(types$1.braceL);\n  this.labels.push(switchLabel);\n  this.enterScope(0);\n\n  // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  var cur;\n  for (var sawDefault = false; this.type !== types$1.braceR;) {\n    if (this.type === types$1._case || this.type === types$1._default) {\n      var isCase = this.type === types$1._case;\n      if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n      node.cases.push(cur = this.startNode());\n      cur.consequent = [];\n      this.next();\n      if (isCase) {\n        cur.test = this.parseExpression();\n      } else {\n        if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n        sawDefault = true;\n        cur.test = null;\n      }\n      this.expect(types$1.colon);\n    } else {\n      if (!cur) { this.unexpected(); }\n      cur.consequent.push(this.parseStatement(null));\n    }\n  }\n  this.exitScope();\n  if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n  this.next(); // Closing brace\n  this.labels.pop();\n  return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n  this.next();\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n    { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n  node.argument = this.parseExpression();\n  this.semicolon();\n  return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n  var param = this.parseBindingAtom();\n  var simple = param.type === \"Identifier\";\n  this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n  this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n  this.expect(types$1.parenR);\n\n  return param\n};\n\npp$8.parseTryStatement = function(node) {\n  this.next();\n  node.block = this.parseBlock();\n  node.handler = null;\n  if (this.type === types$1._catch) {\n    var clause = this.startNode();\n    this.next();\n    if (this.eat(types$1.parenL)) {\n      clause.param = this.parseCatchClauseParam();\n    } else {\n      if (this.options.ecmaVersion < 10) { this.unexpected(); }\n      clause.param = null;\n      this.enterScope(0);\n    }\n    clause.body = this.parseBlock(false);\n    this.exitScope();\n    node.handler = this.finishNode(clause, \"CatchClause\");\n  }\n  node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n  if (!node.handler && !node.finalizer)\n    { this.raise(node.start, \"Missing catch or finally clause\"); }\n  return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n  this.next();\n  this.parseVar(node, false, kind, allowMissingInitializer);\n  this.semicolon();\n  return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"while\");\n  this.labels.pop();\n  return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n  if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n  this.next();\n  node.object = this.parseParenExpression();\n  node.body = this.parseStatement(\"with\");\n  return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n  this.next();\n  return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n  for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n    {\n    var label = list[i$1];\n\n    if (label.name === maybeName)\n      { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n  } }\n  var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n  for (var i = this.labels.length - 1; i >= 0; i--) {\n    var label$1 = this.labels[i];\n    if (label$1.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label$1.statementStart = this.start;\n      label$1.kind = kind;\n    } else { break }\n  }\n  this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n  node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n  this.labels.pop();\n  node.label = expr;\n  return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n  node.expression = expr;\n  this.semicolon();\n  return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n  if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n  if ( node === void 0 ) node = this.startNode();\n\n  node.body = [];\n  this.expect(types$1.braceL);\n  if (createNewLexicalScope) { this.enterScope(0); }\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  if (exitStrict) { this.strict = false; }\n  this.next();\n  if (createNewLexicalScope) { this.exitScope(); }\n  return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n  node.init = init;\n  this.expect(types$1.semi);\n  node.test = this.type === types$1.semi ? null : this.parseExpression();\n  this.expect(types$1.semi);\n  node.update = this.type === types$1.parenR ? null : this.parseExpression();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n  var isForIn = this.type === types$1._in;\n  this.next();\n\n  if (\n    init.type === \"VariableDeclaration\" &&\n    init.declarations[0].init != null &&\n    (\n      !isForIn ||\n      this.options.ecmaVersion < 8 ||\n      this.strict ||\n      init.kind !== \"var\" ||\n      init.declarations[0].id.type !== \"Identifier\"\n    )\n  ) {\n    this.raise(\n      init.start,\n      ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n    );\n  }\n  node.left = init;\n  node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n  this.expect(types$1.parenR);\n  node.body = this.parseStatement(\"for\");\n  this.exitScope();\n  this.labels.pop();\n  return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n  node.declarations = [];\n  node.kind = kind;\n  for (;;) {\n    var decl = this.startNode();\n    this.parseVarId(decl, kind);\n    if (this.eat(types$1.eq)) {\n      decl.init = this.parseMaybeAssign(isFor);\n    } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n      this.unexpected();\n    } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n      this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n    } else {\n      decl.init = null;\n    }\n    node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n    if (!this.eat(types$1.comma)) { break }\n  }\n  return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n  decl.id = this.parseBindingAtom();\n  this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n      { this.unexpected(); }\n    node.generator = this.eat(types$1.star);\n  }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n      // If it is a regular function declaration in sloppy mode, then it is\n      // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n      // mode depends on properties of the current scope (see\n      // treatFunctionsAsVar).\n      { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n  }\n\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(node.async, node.generator));\n\n  if (!(statement & FUNC_STATEMENT))\n    { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n  this.parseFunctionParams(node);\n  this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n  this.next();\n\n  // ecma-262 14.6 Class Definitions\n  // A class definition is always strict mode code.\n  var oldStrict = this.strict;\n  this.strict = true;\n\n  this.parseClassId(node, isStatement);\n  this.parseClassSuper(node);\n  var privateNameMap = this.enterClassBody();\n  var classBody = this.startNode();\n  var hadConstructor = false;\n  classBody.body = [];\n  this.expect(types$1.braceL);\n  while (this.type !== types$1.braceR) {\n    var element = this.parseClassElement(node.superClass !== null);\n    if (element) {\n      classBody.body.push(element);\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n        hadConstructor = true;\n      } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n        this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n      }\n    }\n  }\n  this.strict = oldStrict;\n  this.next();\n  node.body = this.finishNode(classBody, \"ClassBody\");\n  this.exitClassBody();\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n  if (this.eat(types$1.semi)) { return null }\n\n  var ecmaVersion = this.options.ecmaVersion;\n  var node = this.startNode();\n  var keyName = \"\";\n  var isGenerator = false;\n  var isAsync = false;\n  var kind = \"method\";\n  var isStatic = false;\n\n  if (this.eatContextual(\"static\")) {\n    // Parse static init block\n    if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n      this.parseClassStaticBlock(node);\n      return node\n    }\n    if (this.isClassElementNameStart() || this.type === types$1.star) {\n      isStatic = true;\n    } else {\n      keyName = \"static\";\n    }\n  }\n  node.static = isStatic;\n  if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n    if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n      isAsync = true;\n    } else {\n      keyName = \"async\";\n    }\n  }\n  if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n    isGenerator = true;\n  }\n  if (!keyName && !isAsync && !isGenerator) {\n    var lastValue = this.value;\n    if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n      if (this.isClassElementNameStart()) {\n        kind = lastValue;\n      } else {\n        keyName = lastValue;\n      }\n    }\n  }\n\n  // Parse element name\n  if (keyName) {\n    // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n    // The last token is any of those. Make it the element name.\n    node.computed = false;\n    node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n    node.key.name = keyName;\n    this.finishNode(node.key, \"Identifier\");\n  } else {\n    this.parseClassElementName(node);\n  }\n\n  // Parse element value\n  if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n    var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n    var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n    // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n    if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n    node.kind = isConstructor ? \"constructor\" : kind;\n    this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n  } else {\n    this.parseClassField(node);\n  }\n\n  return node\n};\n\npp$8.isClassElementNameStart = function() {\n  return (\n    this.type === types$1.name ||\n    this.type === types$1.privateId ||\n    this.type === types$1.num ||\n    this.type === types$1.string ||\n    this.type === types$1.bracketL ||\n    this.type.keyword\n  )\n};\n\npp$8.parseClassElementName = function(element) {\n  if (this.type === types$1.privateId) {\n    if (this.value === \"constructor\") {\n      this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n    }\n    element.computed = false;\n    element.key = this.parsePrivateIdent();\n  } else {\n    this.parsePropertyName(element);\n  }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n  // Check key and flags\n  var key = method.key;\n  if (method.kind === \"constructor\") {\n    if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n    if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n  } else if (method.static && checkKeyName(method, \"prototype\")) {\n    this.raise(key.start, \"Classes may not have a static property named prototype\");\n  }\n\n  // Parse value\n  var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n  // Check value\n  if (method.kind === \"get\" && value.params.length !== 0)\n    { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n  if (method.kind === \"set\" && value.params.length !== 1)\n    { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n  if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n    { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n  return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n  if (checkKeyName(field, \"constructor\")) {\n    this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n  } else if (field.static && checkKeyName(field, \"prototype\")) {\n    this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n  }\n\n  if (this.eat(types$1.eq)) {\n    // To raise SyntaxError if 'arguments' exists in the initializer.\n    var scope = this.currentThisScope();\n    var inClassFieldInit = scope.inClassFieldInit;\n    scope.inClassFieldInit = true;\n    field.value = this.parseMaybeAssign();\n    scope.inClassFieldInit = inClassFieldInit;\n  } else {\n    field.value = null;\n  }\n  this.semicolon();\n\n  return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n  node.body = [];\n\n  var oldLabels = this.labels;\n  this.labels = [];\n  this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n  while (this.type !== types$1.braceR) {\n    var stmt = this.parseStatement(null);\n    node.body.push(stmt);\n  }\n  this.next();\n  this.exitScope();\n  this.labels = oldLabels;\n\n  return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n  if (this.type === types$1.name) {\n    node.id = this.parseIdent();\n    if (isStatement)\n      { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n  } else {\n    if (isStatement === true)\n      { this.unexpected(); }\n    node.id = null;\n  }\n};\n\npp$8.parseClassSuper = function(node) {\n  node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n  var element = {declared: Object.create(null), used: []};\n  this.privateNameStack.push(element);\n  return element.declared\n};\n\npp$8.exitClassBody = function() {\n  var ref = this.privateNameStack.pop();\n  var declared = ref.declared;\n  var used = ref.used;\n  if (!this.options.checkPrivateFields) { return }\n  var len = this.privateNameStack.length;\n  var parent = len === 0 ? null : this.privateNameStack[len - 1];\n  for (var i = 0; i < used.length; ++i) {\n    var id = used[i];\n    if (!hasOwn(declared, id.name)) {\n      if (parent) {\n        parent.used.push(id);\n      } else {\n        this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n      }\n    }\n  }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n  var name = element.key.name;\n  var curr = privateNameMap[name];\n\n  var next = \"true\";\n  if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n    next = (element.static ? \"s\" : \"i\") + element.kind;\n  }\n\n  // `class { get #a(){}; static set #a(_){} }` is also conflict.\n  if (\n    curr === \"iget\" && next === \"iset\" ||\n    curr === \"iset\" && next === \"iget\" ||\n    curr === \"sget\" && next === \"sset\" ||\n    curr === \"sset\" && next === \"sget\"\n  ) {\n    privateNameMap[name] = \"true\";\n    return false\n  } else if (!curr) {\n    privateNameMap[name] = next;\n    return false\n  } else {\n    return true\n  }\n}\n\nfunction checkKeyName(node, name) {\n  var computed = node.computed;\n  var key = node.key;\n  return !computed && (\n    key.type === \"Identifier\" && key.name === name ||\n    key.type === \"Literal\" && key.value === name\n  )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n  if (this.options.ecmaVersion >= 11) {\n    if (this.eatContextual(\"as\")) {\n      node.exported = this.parseModuleExportName();\n      this.checkExport(exports, node.exported, this.lastTokStart);\n    } else {\n      node.exported = null;\n    }\n  }\n  this.expectContextual(\"from\");\n  if (this.type !== types$1.string) { this.unexpected(); }\n  node.source = this.parseExprAtom();\n  this.semicolon();\n  return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n  this.next();\n  // export * from '...'\n  if (this.eat(types$1.star)) {\n    return this.parseExportAllDeclaration(node, exports)\n  }\n  if (this.eat(types$1._default)) { // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart);\n    node.declaration = this.parseExportDefaultDeclaration();\n    return this.finishNode(node, \"ExportDefaultDeclaration\")\n  }\n  // export var|const|let|function|class ...\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseExportDeclaration(node);\n    if (node.declaration.type === \"VariableDeclaration\")\n      { this.checkVariableExport(exports, node.declaration.declarations); }\n    else\n      { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n    node.specifiers = [];\n    node.source = null;\n  } else { // export { x, y as z } [from '...']\n    node.declaration = null;\n    node.specifiers = this.parseExportSpecifiers(exports);\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== types$1.string) { this.unexpected(); }\n      node.source = this.parseExprAtom();\n    } else {\n      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n        // check for keywords used as local names\n        var spec = list[i];\n\n        this.checkUnreserved(spec.local);\n        // check if export is defined\n        this.checkLocalExport(spec.local);\n\n        if (spec.local.type === \"Literal\") {\n          this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n        }\n      }\n\n      node.source = null;\n    }\n    this.semicolon();\n  }\n  return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n  return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n  var isAsync;\n  if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n    var fNode = this.startNode();\n    this.next();\n    if (isAsync) { this.next(); }\n    return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n  } else if (this.type === types$1._class) {\n    var cNode = this.startNode();\n    return this.parseClass(cNode, \"nullableID\")\n  } else {\n    var declaration = this.parseMaybeAssign();\n    this.semicolon();\n    return declaration\n  }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n  if (!exports) { return }\n  if (typeof name !== \"string\")\n    { name = name.type === \"Identifier\" ? name.name : name.value; }\n  if (hasOwn(exports, name))\n    { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n  exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n  var type = pat.type;\n  if (type === \"Identifier\")\n    { this.checkExport(exports, pat, pat.start); }\n  else if (type === \"ObjectPattern\")\n    { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n      {\n        var prop = list[i];\n\n        this.checkPatternExport(exports, prop);\n      } }\n  else if (type === \"ArrayPattern\")\n    { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n      var elt = list$1[i$1];\n\n        if (elt) { this.checkPatternExport(exports, elt); }\n    } }\n  else if (type === \"Property\")\n    { this.checkPatternExport(exports, pat.value); }\n  else if (type === \"AssignmentPattern\")\n    { this.checkPatternExport(exports, pat.left); }\n  else if (type === \"RestElement\")\n    { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n  if (!exports) { return }\n  for (var i = 0, list = decls; i < list.length; i += 1)\n    {\n    var decl = list[i];\n\n    this.checkPatternExport(exports, decl.id);\n  }\n};\n\npp$8.shouldParseExportStatement = function() {\n  return this.type.keyword === \"var\" ||\n    this.type.keyword === \"const\" ||\n    this.type.keyword === \"class\" ||\n    this.type.keyword === \"function\" ||\n    this.isLet() ||\n    this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n  var node = this.startNode();\n  node.local = this.parseModuleExportName();\n\n  node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n  this.checkExport(\n    exports,\n    node.exported,\n    node.exported.start\n  );\n\n  return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n  var nodes = [], first = true;\n  // export { x, y as z } [from '...']\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseExportSpecifier(exports));\n  }\n  return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n  this.next();\n\n  // import '...'\n  if (this.type === types$1.string) {\n    node.specifiers = empty$1;\n    node.source = this.parseExprAtom();\n  } else {\n    node.specifiers = this.parseImportSpecifiers();\n    this.expectContextual(\"from\");\n    node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n  }\n  this.semicolon();\n  return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n  var node = this.startNode();\n  node.imported = this.parseModuleExportName();\n\n  if (this.eatContextual(\"as\")) {\n    node.local = this.parseIdent();\n  } else {\n    this.checkUnreserved(node.imported);\n    node.local = node.imported;\n  }\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n\n  return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n  // import defaultObj, { x, y as z } from '...'\n  var node = this.startNode();\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n  var node = this.startNode();\n  this.next();\n  this.expectContextual(\"as\");\n  node.local = this.parseIdent();\n  this.checkLValSimple(node.local, BIND_LEXICAL);\n  return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n  var nodes = [], first = true;\n  if (this.type === types$1.name) {\n    nodes.push(this.parseImportDefaultSpecifier());\n    if (!this.eat(types$1.comma)) { return nodes }\n  }\n  if (this.type === types$1.star) {\n    nodes.push(this.parseImportNamespaceSpecifier());\n    return nodes\n  }\n  this.expect(types$1.braceL);\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    nodes.push(this.parseImportSpecifier());\n  }\n  return nodes\n};\n\npp$8.parseModuleExportName = function() {\n  if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n    var stringLiteral = this.parseLiteral(this.value);\n    if (loneSurrogate.test(stringLiteral.value)) {\n      this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n    }\n    return stringLiteral\n  }\n  return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1);\n  }\n};\npp$8.isDirectiveCandidate = function(statement) {\n  return (\n    this.options.ecmaVersion >= 5 &&\n    statement.type === \"ExpressionStatement\" &&\n    statement.expression.type === \"Literal\" &&\n    typeof statement.expression.value === \"string\" &&\n    // Reject parenthesized strings.\n    (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n  )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n    case \"Identifier\":\n      if (this.inAsync && node.name === \"await\")\n        { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n      break\n\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n    case \"AssignmentPattern\":\n    case \"RestElement\":\n      break\n\n    case \"ObjectExpression\":\n      node.type = \"ObjectPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      for (var i = 0, list = node.properties; i < list.length; i += 1) {\n        var prop = list[i];\n\n      this.toAssignable(prop, isBinding);\n        // Early error:\n        //   AssignmentRestProperty[Yield, Await] :\n        //     `...` DestructuringAssignmentTarget[Yield, Await]\n        //\n        //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n        if (\n          prop.type === \"RestElement\" &&\n          (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n        ) {\n          this.raise(prop.argument.start, \"Unexpected token\");\n        }\n      }\n      break\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n      this.toAssignable(node.value, isBinding);\n      break\n\n    case \"ArrayExpression\":\n      node.type = \"ArrayPattern\";\n      if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n      this.toAssignableList(node.elements, isBinding);\n      break\n\n    case \"SpreadElement\":\n      node.type = \"RestElement\";\n      this.toAssignable(node.argument, isBinding);\n      if (node.argument.type === \"AssignmentPattern\")\n        { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n      break\n\n    case \"AssignmentExpression\":\n      if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n      node.type = \"AssignmentPattern\";\n      delete node.operator;\n      this.toAssignable(node.left, isBinding);\n      break\n\n    case \"ParenthesizedExpression\":\n      this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n      break\n\n    case \"ChainExpression\":\n      this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n      break\n\n    case \"MemberExpression\":\n      if (!isBinding) { break }\n\n    default:\n      this.raise(node.start, \"Assigning to rvalue\");\n    }\n  } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n  return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n  var end = exprList.length;\n  for (var i = 0; i < end; i++) {\n    var elt = exprList[i];\n    if (elt) { this.toAssignable(elt, isBinding); }\n  }\n  if (end) {\n    var last = exprList[end - 1];\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n      { this.unexpected(last.argument.start); }\n  }\n  return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n  return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n  var node = this.startNode();\n  this.next();\n\n  // RestElement inside of a function parameter must be an identifier\n  if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n    { this.unexpected(); }\n\n  node.argument = this.parseBindingAtom();\n\n  return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n    case types$1.bracketL:\n      var node = this.startNode();\n      this.next();\n      node.elements = this.parseBindingList(types$1.bracketR, true, true);\n      return this.finishNode(node, \"ArrayPattern\")\n\n    case types$1.braceL:\n      return this.parseObj(true)\n    }\n  }\n  return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (first) { first = false; }\n    else { this.expect(types$1.comma); }\n    if (allowEmpty && this.type === types$1.comma) {\n      elts.push(null);\n    } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n      break\n    } else if (this.type === types$1.ellipsis) {\n      var rest = this.parseRestBinding();\n      this.parseBindingListItem(rest);\n      elts.push(rest);\n      if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n      this.expect(close);\n      break\n    } else {\n      elts.push(this.parseAssignableListItem(allowModifiers));\n    }\n  }\n  return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n  var elem = this.parseMaybeDefault(this.start, this.startLoc);\n  this.parseBindingListItem(elem);\n  return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n  return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n  left = left || this.parseBindingAtom();\n  if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.right = this.parseMaybeAssign();\n  return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue \u2014\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n//   nothing other than identifiers and member expressions. Parenthesized\n//   expressions are also correctly handled. This is generally appropriate for\n//   constructs for which the spec says\n//\n//   > It is a Syntax Error if AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   It is also appropriate for checking if an identifier is valid and not\n//   defined elsewhere, like import declarations or function/class identifiers.\n//\n//   Examples where this is used include:\n//     a += \u2026;\n//     import a from '\u2026';\n//   where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n//   anything checkLValSimple() supports, as well as object and array\n//   destructuring patterns. This is generally appropriate for constructs for\n//   which the spec says\n//\n//   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n//   > an ArrayLiteral and AssignmentTargetType of [the production] is not\n//   > simple.\n//\n//   Examples where this is used include:\n//     (a = \u2026);\n//     const a = \u2026;\n//     try { \u2026 } catch (a) { \u2026 }\n//   where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n//   anything checkLValPattern() supports, as well as default assignment\n//   patterns, rest elements, and other constructs that may appear within an\n//   object or array destructuring pattern.\n//\n//   As a special case, function parameters also use checkLValInnerPattern(),\n//   as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  var isBind = bindingType !== BIND_NONE;\n\n  switch (expr.type) {\n  case \"Identifier\":\n    if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n      { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n    if (isBind) {\n      if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n        { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n      if (checkClashes) {\n        if (hasOwn(checkClashes, expr.name))\n          { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n        checkClashes[expr.name] = true;\n      }\n      if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n    }\n    break\n\n  case \"ChainExpression\":\n    this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n    break\n\n  case \"MemberExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n    break\n\n  case \"ParenthesizedExpression\":\n    if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n    return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n  default:\n    this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n  }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"ObjectPattern\":\n    for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n      var prop = list[i];\n\n    this.checkLValInnerPattern(prop, bindingType, checkClashes);\n    }\n    break\n\n  case \"ArrayPattern\":\n    for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n      var elem = list$1[i$1];\n\n    if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n    }\n    break\n\n  default:\n    this.checkLValSimple(expr, bindingType, checkClashes);\n  }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n  if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n  case \"Property\":\n    // AssignmentProperty has type === \"Property\"\n    this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n    break\n\n  case \"AssignmentPattern\":\n    this.checkLValPattern(expr.left, bindingType, checkClashes);\n    break\n\n  case \"RestElement\":\n    this.checkLValPattern(expr.argument, bindingType, checkClashes);\n    break\n\n  default:\n    this.checkLValPattern(expr, bindingType, checkClashes);\n  }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n  this.token = token;\n  this.isExpr = !!isExpr;\n  this.preserveSpace = !!preserveSpace;\n  this.override = override;\n  this.generator = !!generator;\n};\n\nvar types = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n  return [types.b_stat]\n};\n\npp$6.curContext = function() {\n  return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n  var parent = this.curContext();\n  if (parent === types.f_expr || parent === types.f_stat)\n    { return true }\n  if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n    { return !parent.isExpr }\n\n  // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n  if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n    { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n  if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n    { return true }\n  if (prevType === types$1.braceL)\n    { return parent === types.b_stat }\n  if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n    { return false }\n  return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n  for (var i = this.context.length - 1; i >= 1; i--) {\n    var context = this.context[i];\n    if (context.token === \"function\")\n      { return context.generator }\n  }\n  return false\n};\n\npp$6.updateContext = function(prevType) {\n  var update, type = this.type;\n  if (type.keyword && prevType === types$1.dot)\n    { this.exprAllowed = false; }\n  else if (update = type.updateContext)\n    { update.call(this, prevType); }\n  else\n    { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n  if (this.curContext() !== tokenCtx) {\n    this.context[this.context.length - 1] = tokenCtx;\n  }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n  if (this.context.length === 1) {\n    this.exprAllowed = true;\n    return\n  }\n  var out = this.context.pop();\n  if (out === types.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop();\n  }\n  this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n  this.context.push(types.b_tmpl);\n  this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n  var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n  this.context.push(statementParens ? types.p_stat : types.p_expr);\n  this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n  // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n  if (prevType.beforeExpr && prevType !== types$1._else &&\n      !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n      !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n      !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n    { this.context.push(types.f_expr); }\n  else\n    { this.context.push(types.f_stat); }\n  this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n  if (this.curContext().token === \"function\") { this.context.pop(); }\n  this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n  if (this.curContext() === types.q_tmpl)\n    { this.context.pop(); }\n  else\n    { this.context.push(types.q_tmpl); }\n  this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n  if (prevType === types$1._function) {\n    var index = this.context.length - 1;\n    if (this.context[index] === types.f_expr)\n      { this.context[index] = types.f_expr_gen; }\n    else\n      { this.context[index] = types.f_gen; }\n  }\n  this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n  var allowed = false;\n  if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n    if (this.value === \"of\" && !this.exprAllowed ||\n        this.value === \"yield\" && this.inGeneratorContext())\n      { allowed = true; }\n  }\n  this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts \u2014 that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash \u2014\n// either with each other or with an init property \u2014 and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n    { return }\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n    { return }\n  var key = prop.key;\n  var name;\n  switch (key.type) {\n  case \"Identifier\": name = key.name; break\n  case \"Literal\": name = String(key.value); break\n  default: return\n  }\n  var kind = prop.kind;\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors) {\n          if (refDestructuringErrors.doubleProto < 0) {\n            refDestructuringErrors.doubleProto = key.start;\n          }\n        } else {\n          this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n        }\n      }\n      propHash.proto = true;\n    }\n    return\n  }\n  name = \"$\" + name;\n  var other = propHash[name];\n  if (other) {\n    var redefinition;\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set;\n    } else {\n      redefinition = other.init || other[kind];\n    }\n    if (redefinition)\n      { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    };\n  }\n  other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n  if (this.type === types$1.comma) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.expressions = [expr];\n    while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n    return this.finishNode(node, \"SequenceExpression\")\n  }\n  return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) { return this.parseYield(forInit) }\n    // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else { this.exprAllowed = false; }\n  }\n\n  var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n    oldTrailingComma = refDestructuringErrors.trailingComma;\n    oldDoubleProto = refDestructuringErrors.doubleProto;\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n  } else {\n    refDestructuringErrors = new DestructuringErrors;\n    ownDestructuringErrors = true;\n  }\n\n  var startPos = this.start, startLoc = this.startLoc;\n  if (this.type === types$1.parenL || this.type === types$1.name) {\n    this.potentialArrowAt = this.start;\n    this.potentialArrowInForAwait = forInit === \"await\";\n  }\n  var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n  if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n  if (this.type.isAssign) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.operator = this.value;\n    if (this.type === types$1.eq)\n      { left = this.toAssignable(left, false, refDestructuringErrors); }\n    if (!ownDestructuringErrors) {\n      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n    }\n    if (refDestructuringErrors.shorthandAssign >= left.start)\n      { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n    if (this.type === types$1.eq)\n      { this.checkLValPattern(left); }\n    else\n      { this.checkLValSimple(left); }\n    node.left = left;\n    this.next();\n    node.right = this.parseMaybeAssign(forInit);\n    if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n    return this.finishNode(node, \"AssignmentExpression\")\n  } else {\n    if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n  }\n  if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n  if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n  return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprOps(forInit, refDestructuringErrors);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  if (this.eat(types$1.question)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.test = expr;\n    node.consequent = this.parseMaybeAssign();\n    this.expect(types$1.colon);\n    node.alternate = this.parseMaybeAssign(forInit);\n    return this.finishNode(node, \"ConditionalExpression\")\n  }\n  return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n  if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n  var prec = this.type.binop;\n  if (prec != null && (!forInit || this.type !== types$1._in)) {\n    if (prec > minPrec) {\n      var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n      var coalesce = this.type === types$1.coalesce;\n      if (coalesce) {\n        // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n        // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n        prec = types$1.logicalAND.binop;\n      }\n      var op = this.value;\n      this.next();\n      var startPos = this.start, startLoc = this.startLoc;\n      var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n      if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n        this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n      }\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n    }\n  }\n  return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n  if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.operator = op;\n  node.right = right;\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, expr;\n  if (this.isContextual(\"await\") && this.canAwait) {\n    expr = this.parseAwait(forInit);\n    sawUnary = true;\n  } else if (this.type.prefix) {\n    var node = this.startNode(), update = this.type === types$1.incDec;\n    node.operator = this.value;\n    node.prefix = true;\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true, update, forInit);\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    if (update) { this.checkLValSimple(node.argument); }\n    else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n    else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n      { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n    else { sawUnary = true; }\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n  } else if (!sawUnary && this.type === types$1.privateId) {\n    if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n    expr = this.parsePrivateIdent();\n    // only could be private fields in 'in', such as #x in obj\n    if (this.type !== types$1._in) { this.unexpected(); }\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      var node$1 = this.startNodeAt(startPos, startLoc);\n      node$1.operator = this.value;\n      node$1.prefix = false;\n      node$1.argument = expr;\n      this.checkLValSimple(expr);\n      this.next();\n      expr = this.finishNode(node$1, \"UpdateExpression\");\n    }\n  }\n\n  if (!incDec && this.eat(types$1.starstar)) {\n    if (sawUnary)\n      { this.unexpected(this.lastTokStart); }\n    else\n      { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n  } else {\n    return expr\n  }\n};\n\nfunction isLocalVariableAccess(node) {\n  return (\n    node.type === \"Identifier\" ||\n    node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n  )\n}\n\nfunction isPrivateFieldAccess(node) {\n  return (\n    node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n    node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n    node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n  )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n  var startPos = this.start, startLoc = this.startLoc;\n  var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n  if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n    { return expr }\n  var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n    if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n    if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n  }\n  return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n      this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n      this.potentialArrowAt === base.start;\n  var optionalChained = false;\n\n  while (true) {\n    var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n    if (element.optional) { optionalChained = true; }\n    if (element === base || element.type === \"ArrowFunctionExpression\") {\n      if (optionalChained) {\n        var chainNode = this.startNodeAt(startPos, startLoc);\n        chainNode.expression = element;\n        element = this.finishNode(chainNode, \"ChainExpression\");\n      }\n      return element\n    }\n\n    base = element;\n  }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n  return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n  var optionalSupported = this.options.ecmaVersion >= 11;\n  var optional = optionalSupported && this.eat(types$1.questionDot);\n  if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n  var computed = this.eat(types$1.bracketL);\n  if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.object = base;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(types$1.bracketR);\n    } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n      node.property = this.parsePrivateIdent();\n    } else {\n      node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n    }\n    node.computed = !!computed;\n    if (optionalSupported) {\n      node.optional = optional;\n    }\n    base = this.finishNode(node, \"MemberExpression\");\n  } else if (!noCalls && this.eat(types$1.parenL)) {\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    this.awaitIdentPos = 0;\n    var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n    if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      if (this.awaitIdentPos > 0)\n        { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      this.awaitIdentPos = oldAwaitIdentPos;\n      return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n    }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n    this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n    var node$1 = this.startNodeAt(startPos, startLoc);\n    node$1.callee = base;\n    node$1.arguments = exprList;\n    if (optionalSupported) {\n      node$1.optional = optional;\n    }\n    base = this.finishNode(node$1, \"CallExpression\");\n  } else if (this.type === types$1.backQuote) {\n    if (optional || optionalChained) {\n      this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n    }\n    var node$2 = this.startNodeAt(startPos, startLoc);\n    node$2.tag = base;\n    node$2.quasi = this.parseTemplate({isTagged: true});\n    base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n  }\n  return base\n};\n\n// Parse an atomic expression \u2014 either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n  // If a division operator appears in an expression position, the\n  // tokenizer got confused, and we force it to read a regexp instead.\n  if (this.type === types$1.slash) { this.readRegexp(); }\n\n  var node, canBeArrow = this.potentialArrowAt === this.start;\n  switch (this.type) {\n  case types$1._super:\n    if (!this.allowSuper)\n      { this.raise(this.start, \"'super' keyword outside a method\"); }\n    node = this.startNode();\n    this.next();\n    if (this.type === types$1.parenL && !this.allowDirectSuper)\n      { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n    // The `super` keyword can appear at below:\n    // SuperProperty:\n    //     super [ Expression ]\n    //     super . IdentifierName\n    // SuperCall:\n    //     super ( Arguments )\n    if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n      { this.unexpected(); }\n    return this.finishNode(node, \"Super\")\n\n  case types$1._this:\n    node = this.startNode();\n    this.next();\n    return this.finishNode(node, \"ThisExpression\")\n\n  case types$1.name:\n    var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n    var id = this.parseIdent(false);\n    if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n      this.overrideContext(types.f_expr);\n      return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n    }\n    if (canBeArrow && !this.canInsertSemicolon()) {\n      if (this.eat(types$1.arrow))\n        { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n      if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n          (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n        id = this.parseIdent(false);\n        if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n          { this.unexpected(); }\n        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n      }\n    }\n    return id\n\n  case types$1.regexp:\n    var value = this.value;\n    node = this.parseLiteral(value.value);\n    node.regex = {pattern: value.pattern, flags: value.flags};\n    return node\n\n  case types$1.num: case types$1.string:\n    return this.parseLiteral(this.value)\n\n  case types$1._null: case types$1._true: case types$1._false:\n    node = this.startNode();\n    node.value = this.type === types$1._null ? null : this.type === types$1._true;\n    node.raw = this.type.keyword;\n    this.next();\n    return this.finishNode(node, \"Literal\")\n\n  case types$1.parenL:\n    var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n    if (refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n        { refDestructuringErrors.parenthesizedAssign = start; }\n      if (refDestructuringErrors.parenthesizedBind < 0)\n        { refDestructuringErrors.parenthesizedBind = start; }\n    }\n    return expr\n\n  case types$1.bracketL:\n    node = this.startNode();\n    this.next();\n    node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n    return this.finishNode(node, \"ArrayExpression\")\n\n  case types$1.braceL:\n    this.overrideContext(types.b_expr);\n    return this.parseObj(false, refDestructuringErrors)\n\n  case types$1._function:\n    node = this.startNode();\n    this.next();\n    return this.parseFunction(node, 0)\n\n  case types$1._class:\n    return this.parseClass(this.startNode(), false)\n\n  case types$1._new:\n    return this.parseNew()\n\n  case types$1.backQuote:\n    return this.parseTemplate()\n\n  case types$1._import:\n    if (this.options.ecmaVersion >= 11) {\n      return this.parseExprImport(forNew)\n    } else {\n      return this.unexpected()\n    }\n\n  default:\n    return this.parseExprAtomDefault()\n  }\n};\n\npp$5.parseExprAtomDefault = function() {\n  this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n  var node = this.startNode();\n\n  // Consume `import` as an identifier for `import.meta`.\n  // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n  this.next();\n\n  if (this.type === types$1.parenL && !forNew) {\n    return this.parseDynamicImport(node)\n  } else if (this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"import\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    return this.parseImportMeta(node)\n  } else {\n    this.unexpected();\n  }\n};\n\npp$5.parseDynamicImport = function(node) {\n  this.next(); // skip `(`\n\n  // Parse node.source.\n  node.source = this.parseMaybeAssign();\n\n  // Verify ending.\n  if (!this.eat(types$1.parenR)) {\n    var errorPos = this.start;\n    if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n      this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n    } else {\n      this.unexpected(errorPos);\n    }\n  }\n\n  return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n  this.next(); // skip `.`\n\n  var containsEsc = this.containsEsc;\n  node.property = this.parseIdent(true);\n\n  if (node.property.name !== \"meta\")\n    { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n  if (containsEsc)\n    { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n  if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n    { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n  return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n  var node = this.startNode();\n  node.value = value;\n  node.raw = this.input.slice(this.start, this.end);\n  if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n  this.next();\n  return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n  this.expect(types$1.parenL);\n  var val = this.parseExpression();\n  this.expect(types$1.parenR);\n  return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n  return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n  var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n  if (this.options.ecmaVersion >= 6) {\n    this.next();\n\n    var innerStartPos = this.start, innerStartLoc = this.startLoc;\n    var exprList = [], first = true, lastIsComma = false;\n    var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n    // Do not save awaitIdentPos to allow checking awaits nested in parameters\n    while (this.type !== types$1.parenR) {\n      first ? first = false : this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n        lastIsComma = true;\n        break\n      } else if (this.type === types$1.ellipsis) {\n        spreadStart = this.start;\n        exprList.push(this.parseParenItem(this.parseRestBinding()));\n        if (this.type === types$1.comma) {\n          this.raiseRecoverable(\n            this.start,\n            \"Comma is not permitted after the rest element\"\n          );\n        }\n        break\n      } else {\n        exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n      }\n    }\n    var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n    this.expect(types$1.parenR);\n\n    if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n    }\n\n    if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n    if (spreadStart) { this.unexpected(spreadStart); }\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n  } else {\n    val = this.parseParenExpression();\n  }\n\n  if (this.options.preserveParens) {\n    var par = this.startNodeAt(startPos, startLoc);\n    par.expression = val;\n    return this.finishNode(par, \"ParenthesizedExpression\")\n  } else {\n    return val\n  }\n};\n\npp$5.parseParenItem = function(item) {\n  return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call \u2014 at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n  if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n  var node = this.startNode();\n  this.next();\n  if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n    var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n    meta.name = \"new\";\n    node.meta = this.finishNode(meta, \"Identifier\");\n    this.next();\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n    if (node.property.name !== \"target\")\n      { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n    if (containsEsc)\n      { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n    if (!this.allowNewDotTarget)\n      { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n    return this.finishNode(node, \"MetaProperty\")\n  }\n  var startPos = this.start, startLoc = this.startLoc;\n  node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n  if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n  else { node.arguments = empty; }\n  return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n  var isTagged = ref.isTagged;\n\n  var elem = this.startNode();\n  if (this.type === types$1.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n    }\n    elem.value = {\n      raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n      cooked: null\n    };\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    };\n  }\n  this.next();\n  elem.tail = this.type === types$1.backQuote;\n  return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n  if ( ref === void 0 ) ref = {};\n  var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n  var node = this.startNode();\n  this.next();\n  node.expressions = [];\n  var curElt = this.parseTemplateElement({isTagged: isTagged});\n  node.quasis = [curElt];\n  while (!curElt.tail) {\n    if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n    this.expect(types$1.dollarBraceL);\n    node.expressions.push(this.parseExpression());\n    this.expect(types$1.braceR);\n    node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n  }\n  this.next();\n  return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n    (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n    !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n  var node = this.startNode(), first = true, propHash = {};\n  node.properties = [];\n  this.next();\n  while (!this.eat(types$1.braceR)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n    } else { first = false; }\n\n    var prop = this.parseProperty(isPattern, refDestructuringErrors);\n    if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n    node.properties.push(prop);\n  }\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n  var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n  if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false);\n      if (this.type === types$1.comma) {\n        this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n      }\n      return this.finishNode(prop, \"RestElement\")\n    }\n    // Parse argument.\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n    // To disallow trailing comma via `this.toAssignable()`.\n    if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start;\n    }\n    // Finish\n    return this.finishNode(prop, \"SpreadElement\")\n  }\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false;\n    prop.shorthand = false;\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start;\n      startLoc = this.startLoc;\n    }\n    if (!isPattern)\n      { isGenerator = this.eat(types$1.star); }\n  }\n  var containsEsc = this.containsEsc;\n  this.parsePropertyName(prop);\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true;\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n    this.parsePropertyName(prop);\n  } else {\n    isAsync = false;\n  }\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n  return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n  prop.kind = prop.key.name;\n  this.parsePropertyName(prop);\n  prop.value = this.parseMethod(false);\n  var paramCount = prop.kind === \"get\" ? 0 : 1;\n  if (prop.value.params.length !== paramCount) {\n    var start = prop.value.start;\n    if (prop.kind === \"get\")\n      { this.raiseRecoverable(start, \"getter should have no params\"); }\n    else\n      { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n  } else {\n    if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n      { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n  }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === types$1.colon)\n    { this.unexpected(); }\n\n  if (this.eat(types$1.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n    prop.kind = \"init\";\n  } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n    if (isPattern) { this.unexpected(); }\n    prop.kind = \"init\";\n    prop.method = true;\n    prop.value = this.parseMethod(isGenerator, isAsync);\n  } else if (!isPattern && !containsEsc &&\n             this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n             (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n             (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.parseGetterSetter(prop);\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    if (isGenerator || isAsync) { this.unexpected(); }\n    this.checkUnreserved(prop.key);\n    if (prop.key.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = startPos; }\n    prop.kind = \"init\";\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else if (this.type === types$1.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0)\n        { refDestructuringErrors.shorthandAssign = this.start; }\n      prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n    } else {\n      prop.value = this.copyNode(prop.key);\n    }\n    prop.shorthand = true;\n  } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(types$1.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssign();\n      this.expect(types$1.bracketR);\n      return prop.key\n    } else {\n      prop.computed = false;\n    }\n  }\n  return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n  node.id = null;\n  if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n  if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n  var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 6)\n    { node.generator = isGenerator; }\n  if (this.options.ecmaVersion >= 8)\n    { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n  this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n  this.expect(types$1.parenL);\n  node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n  this.parseFunctionBody(node, false, true, false);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n  var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n  this.initFunction(node);\n  if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.awaitIdentPos = 0;\n\n  node.params = this.toAssignableList(params, true);\n  this.parseFunctionBody(node, true, false, forInit);\n\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  this.awaitIdentPos = oldAwaitIdentPos;\n  return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n  var isExpression = isArrowFunction && this.type !== types$1.braceL;\n  var oldStrict = this.strict, useStrict = false;\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign(forInit);\n    node.expression = true;\n    this.checkParams(node, false);\n  } else {\n    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end);\n      // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n      if (useStrict && nonSimple)\n        { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n    }\n    // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n    var oldLabels = this.labels;\n    this.labels = [];\n    if (useStrict) { this.strict = true; }\n\n    // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n    // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n    if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n    node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n    node.expression = false;\n    this.adaptDirectivePrologue(node.body.body);\n    this.labels = oldLabels;\n  }\n  this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n  for (var i = 0, list = params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    if (param.type !== \"Identifier\") { return false\n  } }\n  return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n  var nameHash = Object.create(null);\n  for (var i = 0, list = node.params; i < list.length; i += 1)\n    {\n    var param = list[i];\n\n    this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n  }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  var elts = [], first = true;\n  while (!this.eat(close)) {\n    if (!first) {\n      this.expect(types$1.comma);\n      if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n    } else { first = false; }\n\n    var elt = (void 0);\n    if (allowEmpty && this.type === types$1.comma)\n      { elt = null; }\n    else if (this.type === types$1.ellipsis) {\n      elt = this.parseSpread(refDestructuringErrors);\n      if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n        { refDestructuringErrors.trailingComma = this.start; }\n    } else {\n      elt = this.parseMaybeAssign(false, refDestructuringErrors);\n    }\n    elts.push(elt);\n  }\n  return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n  var start = ref.start;\n  var end = ref.end;\n  var name = ref.name;\n\n  if (this.inGenerator && name === \"yield\")\n    { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n  if (this.inAsync && name === \"await\")\n    { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n  if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n    { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n  if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n    { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n  if (this.keywords.test(name))\n    { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n  if (this.options.ecmaVersion < 6 &&\n    this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\")\n      { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n    this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n  }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n  var node = this.parseIdentNode();\n  this.next(!!liberal);\n  this.finishNode(node, \"Identifier\");\n  if (!liberal) {\n    this.checkUnreserved(node);\n    if (node.name === \"await\" && !this.awaitIdentPos)\n      { this.awaitIdentPos = node.start; }\n  }\n  return node\n};\n\npp$5.parseIdentNode = function() {\n  var node = this.startNode();\n  if (this.type === types$1.name) {\n    node.name = this.value;\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword;\n\n    // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n    if ((node.name === \"class\" || node.name === \"function\") &&\n      (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop();\n    }\n    this.type = types$1.name;\n  } else {\n    this.unexpected();\n  }\n  return node\n};\n\npp$5.parsePrivateIdent = function() {\n  var node = this.startNode();\n  if (this.type === types$1.privateId) {\n    node.name = this.value;\n  } else {\n    this.unexpected();\n  }\n  this.next();\n  this.finishNode(node, \"PrivateIdentifier\");\n\n  // For validating existence\n  if (this.options.checkPrivateFields) {\n    if (this.privateNameStack.length === 0) {\n      this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n    } else {\n      this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n    }\n  }\n\n  return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n  if (!this.yieldPos) { this.yieldPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n    node.delegate = false;\n    node.argument = null;\n  } else {\n    node.delegate = this.eat(types$1.star);\n    node.argument = this.parseMaybeAssign(forInit);\n  }\n  return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n  if (!this.awaitPos) { this.awaitPos = this.start; }\n\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeUnary(null, true, false, forInit);\n  return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n  var loc = getLineInfo(this.input, pos);\n  message += \" (\" + loc.line + \":\" + loc.column + \")\";\n  var err = new SyntaxError(message);\n  err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n  throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart)\n  }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n  this.flags = flags;\n  // A list of var-declared names in the current lexical scope\n  this.var = [];\n  // A list of lexically-declared names in the current lexical scope\n  this.lexical = [];\n  // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n  this.functions = [];\n  // A switch to disallow the identifier reference 'arguments'\n  this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n  this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n  this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n  return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n  var redeclared = false;\n  if (bindingType === BIND_LEXICAL) {\n    var scope = this.currentScope();\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    scope.lexical.push(name);\n    if (this.inModule && (scope.flags & SCOPE_TOP))\n      { delete this.undefinedExports[name]; }\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    var scope$1 = this.currentScope();\n    scope$1.lexical.push(name);\n  } else if (bindingType === BIND_FUNCTION) {\n    var scope$2 = this.currentScope();\n    if (this.treatFunctionsAsVar)\n      { redeclared = scope$2.lexical.indexOf(name) > -1; }\n    else\n      { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n    scope$2.functions.push(name);\n  } else {\n    for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n      var scope$3 = this.scopeStack[i];\n      if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n          !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n        redeclared = true;\n        break\n      }\n      scope$3.var.push(name);\n      if (this.inModule && (scope$3.flags & SCOPE_TOP))\n        { delete this.undefinedExports[name]; }\n      if (scope$3.flags & SCOPE_VAR) { break }\n    }\n  }\n  if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n  // scope.functions must be empty as Module code is always strict.\n  if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n      this.scopeStack[0].var.indexOf(id.name) === -1) {\n    this.undefinedExports[id.name] = id;\n  }\n};\n\npp$3.currentScope = function() {\n  return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR) { return scope }\n  }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this.scopeStack[i];\n    if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n  }\n};\n\nvar Node = function Node(parser, pos, loc) {\n  this.type = \"\";\n  this.start = pos;\n  this.end = 0;\n  if (parser.options.locations)\n    { this.loc = new SourceLocation(parser, loc); }\n  if (parser.options.directSourceFile)\n    { this.sourceFile = parser.options.directSourceFile; }\n  if (parser.options.ranges)\n    { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n  return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n  return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type;\n  node.end = pos;\n  if (this.options.locations)\n    { node.loc.end = loc; }\n  if (this.options.ranges)\n    { node.range[1] = pos; }\n  return node\n}\n\npp$2.finishNode = function(node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n  var newNode = new Node(this, node.start, this.startLoc);\n  for (var prop in node) { newNode[prop] = node[prop]; }\n  return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n  9: ecma9BinaryProperties,\n  10: ecma10BinaryProperties,\n  11: ecma11BinaryProperties,\n  12: ecma12BinaryProperties,\n  13: ecma13BinaryProperties,\n  14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n  9: \"\",\n  10: \"\",\n  11: \"\",\n  12: \"\",\n  13: \"\",\n  14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n  9: ecma9ScriptValues,\n  10: ecma10ScriptValues,\n  11: ecma11ScriptValues,\n  12: ecma12ScriptValues,\n  13: ecma13ScriptValues,\n  14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n  var d = data[ecmaVersion] = {\n    binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n    binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n    nonBinary: {\n      General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n      Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n    }\n  };\n  d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n  d.nonBinary.gc = d.nonBinary.General_Category;\n  d.nonBinary.sc = d.nonBinary.Script;\n  d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n  var ecmaVersion = list[i];\n\n  buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n  // Parent disjunction branch\n  this.parent = parent;\n  // Identifies this set of sibling branches\n  this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n  // A branch is separate from another branch if they or any of\n  // their parents are siblings in a given disjunction\n  for (var self = this; self; self = self.parent) {\n    for (var other = alt; other; other = other.parent) {\n      if (self.base === other.base && self !== other) { return true }\n    }\n  }\n  return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n  return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n  this.parser = parser;\n  this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n  this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n  this.source = \"\";\n  this.flags = \"\";\n  this.start = 0;\n  this.switchU = false;\n  this.switchV = false;\n  this.switchN = false;\n  this.pos = 0;\n  this.lastIntValue = 0;\n  this.lastStringValue = \"\";\n  this.lastAssertionIsQuantifiable = false;\n  this.numCapturingParens = 0;\n  this.maxBackReference = 0;\n  this.groupNames = Object.create(null);\n  this.backReferenceNames = [];\n  this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n  var unicodeSets = flags.indexOf(\"v\") !== -1;\n  var unicode = flags.indexOf(\"u\") !== -1;\n  this.start = start | 0;\n  this.source = pattern + \"\";\n  this.flags = flags;\n  if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n    this.switchU = true;\n    this.switchV = true;\n    this.switchN = true;\n  } else {\n    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n    this.switchV = false;\n    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n  }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n  this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return -1\n  }\n  var c = s.charCodeAt(i);\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return c\n  }\n  var next = s.charCodeAt(i + 1);\n  return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var s = this.source;\n  var l = s.length;\n  if (i >= l) {\n    return l\n  }\n  var c = s.charCodeAt(i), next;\n  if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n      (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n    return i + 1\n  }\n  return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  if (this.current(forceU) === ch) {\n    this.advance(forceU);\n    return true\n  }\n  return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n    if ( forceU === void 0 ) forceU = false;\n\n  var pos = this.pos;\n  for (var i = 0, list = chs; i < list.length; i += 1) {\n    var ch = list[i];\n\n      var current = this.at(pos, forceU);\n    if (current === -1 || current !== ch) {\n      return false\n    }\n    pos = this.nextIndex(pos, forceU);\n  }\n  this.pos = pos;\n  return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n  var validFlags = state.validFlags;\n  var flags = state.flags;\n\n  var u = false;\n  var v = false;\n\n  for (var i = 0; i < flags.length; i++) {\n    var flag = flags.charAt(i);\n    if (validFlags.indexOf(flag) === -1) {\n      this.raise(state.start, \"Invalid regular expression flag\");\n    }\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this.raise(state.start, \"Duplicate regular expression flag\");\n    }\n    if (flag === \"u\") { u = true; }\n    if (flag === \"v\") { v = true; }\n  }\n  if (this.options.ecmaVersion >= 15 && u && v) {\n    this.raise(state.start, \"Invalid regular expression flag\");\n  }\n};\n\nfunction hasProp(obj) {\n  for (var _ in obj) { return true }\n  return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n  this.regexp_pattern(state);\n\n  // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n  if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n    state.switchN = true;\n    this.regexp_pattern(state);\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n  state.pos = 0;\n  state.lastIntValue = 0;\n  state.lastStringValue = \"\";\n  state.lastAssertionIsQuantifiable = false;\n  state.numCapturingParens = 0;\n  state.maxBackReference = 0;\n  state.groupNames = Object.create(null);\n  state.backReferenceNames.length = 0;\n  state.branchID = null;\n\n  this.regexp_disjunction(state);\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29 /* ) */)) {\n      state.raise(\"Unmatched ')'\");\n    }\n    if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  }\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\");\n  }\n  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n    var name = list[i];\n\n    if (!state.groupNames[name]) {\n      state.raise(\"Invalid named capture referenced\");\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n  var trackDisjunction = this.options.ecmaVersion >= 16;\n  if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n  this.regexp_alternative(state);\n  while (state.eat(0x7C /* | */)) {\n    if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n    this.regexp_alternative(state);\n  }\n  if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n  // Make the same message as V8.\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  if (state.eat(0x7B /* { */)) {\n    state.raise(\"Lone quantifier brackets\");\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\");\n      }\n    }\n    return true\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state);\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n  var start = state.pos;\n  state.lastAssertionIsQuantifiable = false;\n\n  // ^, $\n  if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n    return true\n  }\n\n  // \\b \\B\n  if (state.eat(0x5C /* \\ */)) {\n    if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  // Lookahead / Lookbehind\n  if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n    var lookbehind = false;\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C /* < */);\n    }\n    if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n      this.regexp_disjunction(state);\n      if (!state.eat(0x29 /* ) */)) {\n        state.raise(\"Unterminated group\");\n      }\n      state.lastAssertionIsQuantifiable = !lookbehind;\n      return true\n    }\n  }\n\n  state.pos = start;\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n  if ( noError === void 0 ) noError = false;\n\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F /* ? */);\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n  return (\n    state.eat(0x2A /* * */) ||\n    state.eat(0x2B /* + */) ||\n    state.eat(0x3F /* ? */) ||\n    this.regexp_eatBracedQuantifier(state, noError)\n  )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n  var start = state.pos;\n  if (state.eat(0x7B /* { */)) {\n    var min = 0, max = -1;\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue;\n      if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue;\n      }\n      if (state.eat(0x7D /* } */)) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\");\n        }\n        return true\n      }\n    }\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n  return (\n    this.regexp_eatPatternCharacters(state) ||\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state)\n  )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n  var start = state.pos;\n  if (state.eat(0x28 /* ( */)) {\n    if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n      this.regexp_disjunction(state);\n      if (state.eat(0x29 /* ) */)) {\n        return true\n      }\n      state.raise(\"Unterminated group\");\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n  if (state.eat(0x28 /* ( */)) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state);\n    } else if (state.current() === 0x3F /* ? */) {\n      state.raise(\"Invalid group\");\n    }\n    this.regexp_disjunction(state);\n    if (state.eat(0x29 /* ) */)) {\n      state.numCapturingParens += 1;\n      return true\n    }\n    state.raise(\"Unterminated group\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n  return (\n    state.eat(0x2E /* . */) ||\n    this.regexp_eatReverseSolidusAtomEscape(state) ||\n    this.regexp_eatCharacterClass(state) ||\n    this.regexp_eatUncapturingGroup(state) ||\n    this.regexp_eatCapturingGroup(state) ||\n    this.regexp_eatInvalidBracedQuantifier(state) ||\n    this.regexp_eatExtendedPatternCharacter(state)\n  )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n  var ch = state.current();\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isSyntaxCharacter(ch) {\n  return (\n    ch === 0x24 /* $ */ ||\n    ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n    ch === 0x2E /* . */ ||\n    ch === 0x3F /* ? */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance();\n  }\n  return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n  var ch = state.current();\n  if (\n    ch !== -1 &&\n    ch !== 0x24 /* $ */ &&\n    !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n    ch !== 0x2E /* . */ &&\n    ch !== 0x3F /* ? */ &&\n    ch !== 0x5B /* [ */ &&\n    ch !== 0x5E /* ^ */ &&\n    ch !== 0x7C /* | */\n  ) {\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// GroupSpecifier ::\n//   [empty]\n//   `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n  if (state.eat(0x3F /* ? */)) {\n    if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n    var trackDisjunction = this.options.ecmaVersion >= 16;\n    var known = state.groupNames[state.lastStringValue];\n    if (known) {\n      if (trackDisjunction) {\n        for (var i = 0, list = known; i < list.length; i += 1) {\n          var altID = list[i];\n\n          if (!altID.separatedFrom(state.branchID))\n            { state.raise(\"Duplicate capture group name\"); }\n        }\n      } else {\n        state.raise(\"Duplicate capture group name\");\n      }\n    }\n    if (trackDisjunction) {\n      (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n    } else {\n      state.groupNames[state.lastStringValue] = true;\n    }\n  }\n};\n\n// GroupName ::\n//   `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n  state.lastStringValue = \"\";\n  if (state.eat(0x3C /* < */)) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n      return true\n    }\n    state.raise(\"Invalid capture group name\");\n  }\n  return false\n};\n\n// RegExpIdentifierName ::\n//   RegExpIdentifierStart\n//   RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n  state.lastStringValue = \"\";\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString(state.lastIntValue);\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString(state.lastIntValue);\n    }\n    return true\n  }\n  return false\n};\n\n// RegExpIdentifierStart ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[+U]\n//   <ZWNJ>\n//   <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n  var start = state.pos;\n  var forceU = this.options.ecmaVersion >= 11;\n  var ch = state.current(forceU);\n  state.advance(forceU);\n\n  if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n    ch = state.lastIntValue;\n  }\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch;\n    return true\n  }\n\n  state.pos = start;\n  return false\n};\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n  if (\n    this.regexp_eatBackReference(state) ||\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state) ||\n    (state.switchN && this.regexp_eatKGroupName(state))\n  ) {\n    return true\n  }\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63 /* c */) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.raise(\"Invalid escape\");\n  }\n  return false\n};\npp$1.regexp_eatBackReference = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatDecimalEscape(state)) {\n    var n = state.lastIntValue;\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n;\n      }\n      return true\n    }\n    if (n <= state.numCapturingParens) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n  if (state.eat(0x6B /* k */)) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue);\n      return true\n    }\n    state.raise(\"Invalid named reference\");\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n  return (\n    this.regexp_eatControlEscape(state) ||\n    this.regexp_eatCControlLetter(state) ||\n    this.regexp_eatZero(state) ||\n    this.regexp_eatHexEscapeSequence(state) ||\n    this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n    (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n    this.regexp_eatIdentityEscape(state)\n  )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x63 /* c */)) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\npp$1.regexp_eatZero = function(state) {\n  if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n  var ch = state.current();\n  if (ch === 0x74 /* t */) {\n    state.lastIntValue = 0x09; /* \\t */\n    state.advance();\n    return true\n  }\n  if (ch === 0x6E /* n */) {\n    state.lastIntValue = 0x0A; /* \\n */\n    state.advance();\n    return true\n  }\n  if (ch === 0x76 /* v */) {\n    state.lastIntValue = 0x0B; /* \\v */\n    state.advance();\n    return true\n  }\n  if (ch === 0x66 /* f */) {\n    state.lastIntValue = 0x0C; /* \\f */\n    state.advance();\n    return true\n  }\n  if (ch === 0x72 /* r */) {\n    state.lastIntValue = 0x0D; /* \\r */\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n  var ch = state.current();\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\nfunction isControlLetter(ch) {\n  return (\n    (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n  if ( forceU === void 0 ) forceU = false;\n\n  var start = state.pos;\n  var switchU = forceU || state.switchU;\n\n  if (state.eat(0x75 /* u */)) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      var lead = state.lastIntValue;\n      if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        var leadSurrogateEnd = state.pos;\n        if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n          var trail = state.lastIntValue;\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n            return true\n          }\n        }\n        state.pos = leadSurrogateEnd;\n        state.lastIntValue = lead;\n      }\n      return true\n    }\n    if (\n      switchU &&\n      state.eat(0x7B /* { */) &&\n      this.regexp_eatHexDigits(state) &&\n      state.eat(0x7D /* } */) &&\n      isValidUnicode(state.lastIntValue)\n    ) {\n      return true\n    }\n    if (switchU) {\n      state.raise(\"Invalid unicode escape\");\n    }\n    state.pos = start;\n  }\n\n  return false\n};\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true\n    }\n    if (state.eat(0x2F /* / */)) {\n      state.lastIntValue = 0x2F; /* / */\n      return true\n    }\n    return false\n  }\n\n  var ch = state.current();\n  if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n  state.lastIntValue = 0;\n  var ch = state.current();\n  if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n    do {\n      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n      state.advance();\n    } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n    return true\n  }\n  return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n  var ch = state.current();\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1;\n    state.advance();\n    return CharSetOk\n  }\n\n  var negate = false;\n  if (\n    state.switchU &&\n    this.options.ecmaVersion >= 9 &&\n    ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n  ) {\n    state.lastIntValue = -1;\n    state.advance();\n    var result;\n    if (\n      state.eat(0x7B /* { */) &&\n      (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n      state.eat(0x7D /* } */)\n    ) {\n      if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n      return result\n    }\n    state.raise(\"Invalid property name\");\n  }\n\n  return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n  return (\n    ch === 0x64 /* d */ ||\n    ch === 0x44 /* D */ ||\n    ch === 0x73 /* s */ ||\n    ch === 0x53 /* S */ ||\n    ch === 0x77 /* w */ ||\n    ch === 0x57 /* W */\n  )\n}\n\n// UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n  var start = state.pos;\n\n  // UnicodePropertyName `=` UnicodePropertyValue\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n    var name = state.lastStringValue;\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      var value = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n      return CharSetOk\n    }\n  }\n  state.pos = start;\n\n  // LoneUnicodePropertyNameOrValue\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    var nameOrValue = state.lastStringValue;\n    return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n  }\n  return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n  if (!hasOwn(state.unicodeProperties.nonBinary, name))\n    { state.raise(\"Invalid property name\"); }\n  if (!state.unicodeProperties.nonBinary[name].test(value))\n    { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n  if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n  if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n  state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString(ch);\n    state.advance();\n  }\n  return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n  return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (!state.eat(0x5D /* ] */))\n      { state.raise(\"Unterminated character class\"); }\n    if (negate && result === CharSetString)\n      { state.raise(\"Negated character class may contain strings\"); }\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n  if (state.current() === 0x5D /* ] */) { return CharSetOk }\n  if (state.switchV) { return this.regexp_classSetExpression(state) }\n  this.regexp_nonEmptyClassRanges(state);\n  return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n  while (this.regexp_eatClassAtom(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n      var right = state.lastIntValue;\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\");\n      }\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n    }\n  }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C /* \\ */)) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true\n    }\n    if (state.switchU) {\n      // Make the same message as V8.\n      var ch$1 = state.current();\n      if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n        state.raise(\"Invalid class escape\");\n      }\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n\n  var ch = state.current();\n  if (ch !== 0x5D /* ] */) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n  var start = state.pos;\n\n  if (state.eat(0x62 /* b */)) {\n    state.lastIntValue = 0x08; /* <BS> */\n    return true\n  }\n\n  if (state.switchU && state.eat(0x2D /* - */)) {\n    state.lastIntValue = 0x2D; /* - */\n    return true\n  }\n\n  if (!state.switchU && state.eat(0x63 /* c */)) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true\n    }\n    state.pos = start;\n  }\n\n  return (\n    this.regexp_eatCharacterClassEscape(state) ||\n    this.regexp_eatCharacterEscape(state)\n  )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n  var result = CharSetOk, subResult;\n  if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n    if (subResult === CharSetString) { result = CharSetString; }\n    // https://tc39.es/ecma262/#prod-ClassIntersection\n    var start = state.pos;\n    while (state.eatChars([0x26, 0x26] /* && */)) {\n      if (\n        state.current() !== 0x26 /* & */ &&\n        (subResult = this.regexp_eatClassSetOperand(state))\n      ) {\n        if (subResult !== CharSetString) { result = CharSetOk; }\n        continue\n      }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n    // https://tc39.es/ecma262/#prod-ClassSubtraction\n    while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n      if (this.regexp_eatClassSetOperand(state)) { continue }\n      state.raise(\"Invalid character in character class\");\n    }\n    if (start !== state.pos) { return result }\n  } else {\n    state.raise(\"Invalid character in character class\");\n  }\n  // https://tc39.es/ecma262/#prod-ClassUnion\n  for (;;) {\n    if (this.regexp_eatClassSetRange(state)) { continue }\n    subResult = this.regexp_eatClassSetOperand(state);\n    if (!subResult) { return result }\n    if (subResult === CharSetString) { result = CharSetString; }\n  }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n  var start = state.pos;\n  if (this.regexp_eatClassSetCharacter(state)) {\n    var left = state.lastIntValue;\n    if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n      var right = state.lastIntValue;\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n      return true\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n  if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n  return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5B /* [ */)) {\n    var negate = state.eat(0x5E /* ^ */);\n    var result = this.regexp_classContents(state);\n    if (state.eat(0x5D /* ] */)) {\n      if (negate && result === CharSetString) {\n        state.raise(\"Negated character class may contain strings\");\n      }\n      return result\n    }\n    state.pos = start;\n  }\n  if (state.eat(0x5C /* \\ */)) {\n    var result$1 = this.regexp_eatCharacterClassEscape(state);\n    if (result$1) {\n      return result$1\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n  var start = state.pos;\n  if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n    if (state.eat(0x7B /* { */)) {\n      var result = this.regexp_classStringDisjunctionContents(state);\n      if (state.eat(0x7D /* } */)) {\n        return result\n      }\n    } else {\n      // Make the same message as V8.\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n  var result = this.regexp_classString(state);\n  while (state.eat(0x7C /* | */)) {\n    if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n  }\n  return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n  var count = 0;\n  while (this.regexp_eatClassSetCharacter(state)) { count++; }\n  return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n  var start = state.pos;\n  if (state.eat(0x5C /* \\ */)) {\n    if (\n      this.regexp_eatCharacterEscape(state) ||\n      this.regexp_eatClassSetReservedPunctuator(state)\n    ) {\n      return true\n    }\n    if (state.eat(0x62 /* b */)) {\n      state.lastIntValue = 0x08; /* <BS> */\n      return true\n    }\n    state.pos = start;\n    return false\n  }\n  var ch = state.current();\n  if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n  if (isClassSetSyntaxCharacter(ch)) { return false }\n  state.advance();\n  state.lastIntValue = ch;\n  return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n    ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n    ch === 0x2E /* . */ ||\n    ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n    ch === 0x5E /* ^ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n  return (\n    ch === 0x28 /* ( */ ||\n    ch === 0x29 /* ) */ ||\n    ch === 0x2D /* - */ ||\n    ch === 0x2F /* / */ ||\n    ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n    ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n  )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n  var ch = state.current();\n  if (isClassSetReservedPunctuator(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n  return (\n    ch === 0x21 /* ! */ ||\n    ch === 0x23 /* # */ ||\n    ch === 0x25 /* % */ ||\n    ch === 0x26 /* & */ ||\n    ch === 0x2C /* , */ ||\n    ch === 0x2D /* - */ ||\n    ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n    ch === 0x40 /* @ */ ||\n    ch === 0x60 /* ` */ ||\n    ch === 0x7E /* ~ */\n  )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n  var ch = state.current();\n  if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n  var start = state.pos;\n  if (state.eat(0x78 /* x */)) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true\n    }\n    if (state.switchU) {\n      state.raise(\"Invalid escape\");\n    }\n    state.pos = start;\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return state.pos !== start\n};\nfunction isHexDigit(ch) {\n  return (\n    (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n    (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n    (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n  )\n}\nfunction hexToInt(ch) {\n  if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n    return 10 + (ch - 0x41 /* A */)\n  }\n  if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n    return 10 + (ch - 0x61 /* a */)\n  }\n  return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    var n1 = state.lastIntValue;\n    if (this.regexp_eatOctalDigit(state)) {\n      var n2 = state.lastIntValue;\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n      } else {\n        state.lastIntValue = n1 * 8 + n2;\n      }\n    } else {\n      state.lastIntValue = n1;\n    }\n    return true\n  }\n  return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n  var ch = state.current();\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30; /* 0 */\n    state.advance();\n    return true\n  }\n  state.lastIntValue = 0;\n  return false\n};\nfunction isOctalDigit(ch) {\n  return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n  var start = state.pos;\n  state.lastIntValue = 0;\n  for (var i = 0; i < length; ++i) {\n    var ch = state.current();\n    if (!isHexDigit(ch)) {\n      state.pos = start;\n      return false\n    }\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n  return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n  this.type = p.type;\n  this.value = p.value;\n  this.start = p.start;\n  this.end = p.end;\n  if (p.options.locations)\n    { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n  if (p.options.ranges)\n    { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n  if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n    { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n  if (this.options.onToken)\n    { this.options.onToken(new Token(this)); }\n\n  this.lastTokEnd = this.end;\n  this.lastTokStart = this.start;\n  this.lastTokEndLoc = this.endLoc;\n  this.lastTokStartLoc = this.startLoc;\n  this.nextToken();\n};\n\npp.getToken = function() {\n  this.next();\n  return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n  { pp[Symbol.iterator] = function() {\n    var this$1$1 = this;\n\n    return {\n      next: function () {\n        var token = this$1$1.getToken();\n        return {\n          done: token.type === types$1.eof,\n          value: token\n        }\n      }\n    }\n  }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n  var curContext = this.curContext();\n  if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n  this.start = this.pos;\n  if (this.options.locations) { this.startLoc = this.curPosition(); }\n  if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n  if (curContext.override) { return curContext.override(this) }\n  else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n    { return this.readWord() }\n\n  return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n  var code = this.input.charCodeAt(this.pos);\n  if (code <= 0xd7ff || code >= 0xdc00) { return code }\n  var next = this.input.charCodeAt(this.pos + 1);\n  return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n  var startLoc = this.options.onComment && this.curPosition();\n  var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n  if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n  this.pos = end + 2;\n  if (this.options.locations) {\n    for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n      ++this.curLine;\n      pos = this.lineStart = nextBreak;\n    }\n  }\n  if (this.options.onComment)\n    { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n  var start = this.pos;\n  var startLoc = this.options.onComment && this.curPosition();\n  var ch = this.input.charCodeAt(this.pos += startSkip);\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this.input.charCodeAt(++this.pos);\n  }\n  if (this.options.onComment)\n    { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n                           startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n  loop: while (this.pos < this.input.length) {\n    var ch = this.input.charCodeAt(this.pos);\n    switch (ch) {\n    case 32: case 160: // ' '\n      ++this.pos;\n      break\n    case 13:\n      if (this.input.charCodeAt(this.pos + 1) === 10) {\n        ++this.pos;\n      }\n    case 10: case 8232: case 8233:\n      ++this.pos;\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      break\n    case 47: // '/'\n      switch (this.input.charCodeAt(this.pos + 1)) {\n      case 42: // '*'\n        this.skipBlockComment();\n        break\n      case 47:\n        this.skipLineComment(2);\n        break\n      default:\n        break loop\n      }\n      break\n    default:\n      if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n        ++this.pos;\n      } else {\n        break loop\n      }\n    }\n  }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n  this.end = this.pos;\n  if (this.options.locations) { this.endLoc = this.curPosition(); }\n  var prevType = this.type;\n  this.type = type;\n  this.value = val;\n\n  this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next >= 48 && next <= 57) { return this.readNumber(true) }\n  var next2 = this.input.charCodeAt(this.pos + 2);\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n    this.pos += 3;\n    return this.finishToken(types$1.ellipsis)\n  } else {\n    ++this.pos;\n    return this.finishToken(types$1.dot)\n  }\n};\n\npp.readToken_slash = function() { // '/'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n  // exponentiation operator ** and **=\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size;\n    tokentype = types$1.starstar;\n    next = this.input.charCodeAt(this.pos + 2);\n  }\n\n  if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n  return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (this.options.ecmaVersion >= 12) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n    }\n    return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n        (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3);\n      this.skipSpace();\n      return this.nextToken()\n    }\n    return this.finishOp(types$1.incDec, 2)\n  }\n  if (next === 61) { return this.finishOp(types$1.assign, 2) }\n  return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n    if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n    return this.finishOp(types$1.bitShift, size)\n  }\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n      this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4);\n    this.skipSpace();\n    return this.nextToken()\n  }\n  if (next === 61) { size = 2; }\n  return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n  var next = this.input.charCodeAt(this.pos + 1);\n  if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n    this.pos += 2;\n    return this.finishToken(types$1.arrow)\n  }\n  return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n  var ecmaVersion = this.options.ecmaVersion;\n  if (ecmaVersion >= 11) {\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 46) {\n      var next2 = this.input.charCodeAt(this.pos + 2);\n      if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n    }\n    if (next === 63) {\n      if (ecmaVersion >= 12) {\n        var next2$1 = this.input.charCodeAt(this.pos + 2);\n        if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n      }\n      return this.finishOp(types$1.coalesce, 2)\n    }\n  }\n  return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n  var ecmaVersion = this.options.ecmaVersion;\n  var code = 35; // '#'\n  if (ecmaVersion >= 13) {\n    ++this.pos;\n    code = this.fullCharCodeAtPos();\n    if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n      return this.finishToken(types$1.privateId, this.readWord1())\n    }\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n  switch (code) {\n  // The interpretation of a dot depends on whether it is followed\n  // by a digit or another two dots.\n  case 46: // '.'\n    return this.readToken_dot()\n\n  // Punctuation tokens.\n  case 40: ++this.pos; return this.finishToken(types$1.parenL)\n  case 41: ++this.pos; return this.finishToken(types$1.parenR)\n  case 59: ++this.pos; return this.finishToken(types$1.semi)\n  case 44: ++this.pos; return this.finishToken(types$1.comma)\n  case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n  case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n  case 123: ++this.pos; return this.finishToken(types$1.braceL)\n  case 125: ++this.pos; return this.finishToken(types$1.braceR)\n  case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n  case 96: // '`'\n    if (this.options.ecmaVersion < 6) { break }\n    ++this.pos;\n    return this.finishToken(types$1.backQuote)\n\n  case 48: // '0'\n    var next = this.input.charCodeAt(this.pos + 1);\n    if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n    if (this.options.ecmaVersion >= 6) {\n      if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n      if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n    }\n\n  // Anything else beginning with a digit is an integer, octal\n  // number, or float.\n  case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n    return this.readNumber(false)\n\n  // Quotes produce strings.\n  case 34: case 39: // '\"', \"'\"\n    return this.readString(code)\n\n  // Operators are parsed inline in tiny state machines. '=' (61) is\n  // often referred to. `finishOp` simply skips the amount of\n  // characters it is given as second argument, and returns a token\n  // of the type given by its first argument.\n  case 47: // '/'\n    return this.readToken_slash()\n\n  case 37: case 42: // '%*'\n    return this.readToken_mult_modulo_exp(code)\n\n  case 124: case 38: // '|&'\n    return this.readToken_pipe_amp(code)\n\n  case 94: // '^'\n    return this.readToken_caret()\n\n  case 43: case 45: // '+-'\n    return this.readToken_plus_min(code)\n\n  case 60: case 62: // '<>'\n    return this.readToken_lt_gt(code)\n\n  case 61: case 33: // '=!'\n    return this.readToken_eq_excl(code)\n\n  case 63: // '?'\n    return this.readToken_question()\n\n  case 126: // '~'\n    return this.finishOp(types$1.prefix, 1)\n\n  case 35: // '#'\n    return this.readToken_numberSign()\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n  var str = this.input.slice(this.pos, this.pos + size);\n  this.pos += size;\n  return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n  var escaped, inClass, start = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n    var ch = this.input.charAt(this.pos);\n    if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n    if (!escaped) {\n      if (ch === \"[\") { inClass = true; }\n      else if (ch === \"]\" && inClass) { inClass = false; }\n      else if (ch === \"/\" && !inClass) { break }\n      escaped = ch === \"\\\\\";\n    } else { escaped = false; }\n    ++this.pos;\n  }\n  var pattern = this.input.slice(start, this.pos);\n  ++this.pos;\n  var flagsStart = this.pos;\n  var flags = this.readWord1();\n  if (this.containsEsc) { this.unexpected(flagsStart); }\n\n  // Validate pattern\n  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n  state.reset(start, pattern, flags);\n  this.validateRegExpFlags(state);\n  this.validateRegExpPattern(state);\n\n  // Create Literal#value property value.\n  var value = null;\n  try {\n    value = new RegExp(pattern, flags);\n  } catch (e) {\n    // ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n  // `len` is used for character escape sequences. In that case, disallow separators.\n  var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n  // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n  // and isn't fraction part nor exponent part. In that case, if the first digit\n  // is zero then disallow separators.\n  var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n  var start = this.pos, total = 0, lastCode = 0;\n  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n    var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n    if (allowSeparators && code === 95) {\n      if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n      if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n      if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n      lastCode = code;\n      continue\n    }\n\n    if (code >= 97) { val = code - 97 + 10; } // a\n    else if (code >= 65) { val = code - 65 + 10; } // A\n    else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n    else { val = Infinity; }\n    if (val >= radix) { break }\n    lastCode = code;\n    total = total * radix + val;\n  }\n\n  if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n  if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n  return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n  if (isLegacyOctalNumericLiteral) {\n    return parseInt(str, 8)\n  }\n\n  // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n  return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n  if (typeof BigInt !== \"function\") {\n    return null\n  }\n\n  // `BigInt(value)` throws syntax error if the string contains numeric separators.\n  return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n  var start = this.pos;\n  this.pos += 2; // 0x\n  var val = this.readInt(radix);\n  if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n  if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n    val = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n  } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n  return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n  var start = this.pos;\n  if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n  if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n  var next = this.input.charCodeAt(this.pos);\n  if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n    var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n    ++this.pos;\n    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n    return this.finishToken(types$1.num, val$1)\n  }\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n  if (next === 46 && !octal) { // '.'\n    ++this.pos;\n    this.readInt(10);\n    next = this.input.charCodeAt(this.pos);\n  }\n  if ((next === 69 || next === 101) && !octal) { // 'eE'\n    next = this.input.charCodeAt(++this.pos);\n    if (next === 43 || next === 45) { ++this.pos; } // '+-'\n    if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n  }\n  if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n  var val = stringToNumber(this.input.slice(start, this.pos), octal);\n  return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n  var ch = this.input.charCodeAt(this.pos), code;\n\n  if (ch === 123) { // '{'\n    if (this.options.ecmaVersion < 6) { this.unexpected(); }\n    var codePos = ++this.pos;\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n    ++this.pos;\n    if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n  } else {\n    code = this.readHexChar(4);\n  }\n  return code\n};\n\npp.readString = function(quote) {\n  var out = \"\", chunkStart = ++this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === quote) { break }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(false);\n      chunkStart = this.pos;\n    } else if (ch === 0x2028 || ch === 0x2029) {\n      if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n      if (this.options.locations) {\n        this.curLine++;\n        this.lineStart = this.pos;\n      }\n    } else {\n      if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n      ++this.pos;\n    }\n  }\n  out += this.input.slice(chunkStart, this.pos++);\n  return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n  this.inTemplateElement = true;\n  try {\n    this.readTmplToken();\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken();\n    } else {\n      throw err\n    }\n  }\n\n  this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR\n  } else {\n    this.raise(position, message);\n  }\n};\n\npp.readTmplToken = function() {\n  var out = \"\", chunkStart = this.pos;\n  for (;;) {\n    if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n    var ch = this.input.charCodeAt(this.pos);\n    if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n      if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n        if (ch === 36) {\n          this.pos += 2;\n          return this.finishToken(types$1.dollarBraceL)\n        } else {\n          ++this.pos;\n          return this.finishToken(types$1.backQuote)\n        }\n      }\n      out += this.input.slice(chunkStart, this.pos);\n      return this.finishToken(types$1.template, out)\n    }\n    if (ch === 92) { // '\\'\n      out += this.input.slice(chunkStart, this.pos);\n      out += this.readEscapedChar(true);\n      chunkStart = this.pos;\n    } else if (isNewLine(ch)) {\n      out += this.input.slice(chunkStart, this.pos);\n      ++this.pos;\n      switch (ch) {\n      case 13:\n        if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n      case 10:\n        out += \"\\n\";\n        break\n      default:\n        out += String.fromCharCode(ch);\n        break\n      }\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n      chunkStart = this.pos;\n    } else {\n      ++this.pos;\n    }\n  }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this.input[this.pos]) {\n    case \"\\\\\":\n      ++this.pos;\n      break\n\n    case \"$\":\n      if (this.input[this.pos + 1] !== \"{\") { break }\n      // fall through\n    case \"`\":\n      return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n    case \"\\r\":\n      if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n      // fall through\n    case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n      ++this.curLine;\n      this.lineStart = this.pos + 1;\n      break\n    }\n  }\n  this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n  var ch = this.input.charCodeAt(++this.pos);\n  ++this.pos;\n  switch (ch) {\n  case 110: return \"\\n\" // 'n' -> '\\n'\n  case 114: return \"\\r\" // 'r' -> '\\r'\n  case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n  case 117: return codePointToString(this.readCodePoint()) // 'u'\n  case 116: return \"\\t\" // 't' -> '\\t'\n  case 98: return \"\\b\" // 'b' -> '\\b'\n  case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n  case 102: return \"\\f\" // 'f' -> '\\f'\n  case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n  case 10: // ' \\n'\n    if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n    return \"\"\n  case 56:\n  case 57:\n    if (this.strict) {\n      this.invalidStringToken(\n        this.pos - 1,\n        \"Invalid escape sequence\"\n      );\n    }\n    if (inTemplate) {\n      var codePos = this.pos - 1;\n\n      this.invalidStringToken(\n        codePos,\n        \"Invalid escape sequence in template string\"\n      );\n    }\n  default:\n    if (ch >= 48 && ch <= 55) {\n      var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n      var octal = parseInt(octalStr, 8);\n      if (octal > 255) {\n        octalStr = octalStr.slice(0, -1);\n        octal = parseInt(octalStr, 8);\n      }\n      this.pos += octalStr.length - 1;\n      ch = this.input.charCodeAt(this.pos);\n      if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n        this.invalidStringToken(\n          this.pos - 1 - octalStr.length,\n          inTemplate\n            ? \"Octal literal in template string\"\n            : \"Octal literal in strict mode\"\n        );\n      }\n      return String.fromCharCode(octal)\n    }\n    if (isNewLine(ch)) {\n      // Unicode new line characters after \\ get removed from output in both\n      // template literals and strings\n      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n      return \"\"\n    }\n    return String.fromCharCode(ch)\n  }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n  var codePos = this.pos;\n  var n = this.readInt(16, len);\n  if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n  return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n  this.containsEsc = false;\n  var word = \"\", first = true, chunkStart = this.pos;\n  var astral = this.options.ecmaVersion >= 6;\n  while (this.pos < this.input.length) {\n    var ch = this.fullCharCodeAtPos();\n    if (isIdentifierChar(ch, astral)) {\n      this.pos += ch <= 0xffff ? 1 : 2;\n    } else if (ch === 92) { // \"\\\"\n      this.containsEsc = true;\n      word += this.input.slice(chunkStart, this.pos);\n      var escStart = this.pos;\n      if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n        { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n      ++this.pos;\n      var esc = this.readCodePoint();\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n        { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n      word += codePointToString(esc);\n      chunkStart = this.pos;\n    } else {\n      break\n    }\n    first = false;\n  }\n  return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n  var word = this.readWord1();\n  var type = types$1.name;\n  if (this.keywords.test(word)) {\n    type = keywords[word];\n  }\n  return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\n\nvar version = \"8.12.1\";\n\nParser.acorn = {\n  Parser: Parser,\n  version: version,\n  defaultOptions: defaultOptions,\n  Position: Position,\n  SourceLocation: SourceLocation,\n  getLineInfo: getLineInfo,\n  Node: Node,\n  TokenType: TokenType,\n  tokTypes: types$1,\n  keywordTypes: keywords,\n  TokContext: TokContext,\n  tokContexts: types,\n  isIdentifierChar: isIdentifierChar,\n  isIdentifierStart: isIdentifierStart,\n  Token: Token,\n  isNewLine: isNewLine,\n  lineBreak: lineBreak,\n  lineBreakG: lineBreakG,\n  nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n  return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n  return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Jinter_ast;\nimport Visitor from './visitor.js';\nimport { parse } from 'acorn';\nimport { JinterError } from './utils/index.js';\nexport default class Jinter {\n    constructor() {\n        _Jinter_ast.set(this, []);\n        this.visitor = new Visitor();\n        this.scope = this.visitor.scope;\n        this.scope.set('print', (args) => console.log(...args));\n        this.defineObject('console', console);\n        this.defineObject('Math', Math);\n        this.defineObject('String', String);\n        this.defineObject('Number', Number);\n        this.defineObject('Array', Array);\n        this.defineObject('Date', Date);\n    }\n    defineObject(name, obj) {\n        this.visitor.on(name, (node, visitor) => {\n            if (node.type === 'Identifier')\n                return obj;\n            if (node.type === 'CallExpression' && node.callee.type === 'MemberExpression') {\n                const prop = visitor.visitNode(node.callee.property);\n                const args = node.arguments.map((arg) => visitor.visitNode(arg));\n                const callable = obj[prop];\n                if (!callable)\n                    return '__continue_exec';\n                return callable.apply(obj, args);\n            }\n            return '__continue_exec';\n        });\n    }\n    /**\n     * Evaluates the program.\n     * @returns The result of the last statement in the program.\n     */\n    evaluate(input) {\n        const program = Jinter.parseScript(input);\n        __classPrivateFieldSet(this, _Jinter_ast, program.body, \"f\");\n        this.visitor.setAST(__classPrivateFieldGet(this, _Jinter_ast, \"f\"));\n        return this.visitor.run();\n    }\n    /**\n     * Generates an AST from the input.\n     */\n    static parseScript(input, options) {\n        try {\n            return parse(input, { ecmaVersion: 2020, ...(options || {}) });\n        }\n        catch (e) {\n            const match = e.message.match(/\\((\\d+):(\\d+)\\)/);\n            if (match) {\n                const line = parseInt(match[1], 10);\n                const column = parseInt(match[2], 10);\n                const lines = input.split('\\n');\n                const errorLine = lines[line - 1];\n                const snippet = errorLine ? errorLine.substring(Math.max(0, column - 10), column + 10) : '';\n                throw new JinterError(`${e.message.replace(/\\(.*\\)/, '').trim()} at line ${line}, column ${column}: ${snippet}`, { errorLine });\n            }\n            else {\n                throw new JinterError(e.message);\n            }\n        }\n    }\n}\n_Jinter_ast = new WeakMap();\n", "import * as Log from '../utils/Log.js';\nimport { deepCompare, ParsingError } from '../utils/Utils.js';\n\nconst isObserved = Symbol('ObservedArray.isObserved');\n\nexport class YTNode {\n  static readonly type: string = 'YTNode';\n  readonly type: string;\n\n  constructor() {\n    this.type = (this.constructor as YTNodeConstructor).type;\n  }\n\n  /**\n   * Check if the node is of the given type.\n   * @param types - The type to check\n   * @returns whether the node is of the given type\n   */\n  is<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): this is InstanceType<K[number]> {\n    return types.some((type) => this.type === type.type);\n  }\n\n  /**\n   * Cast to one of the given types.\n   * @param types - The types to cast to\n   * @returns The node cast to one of the given types\n   * @throws {ParsingError} If the node is not of the given type\n   */\n  as<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): InstanceType<K[number]> {\n    if (!this.is(...types)) {\n      throw new ParsingError(`Cannot cast ${this.type} to one of ${types.map((t) => t.type).join(', ')}`);\n    }\n    return this;\n  }\n\n  /**\n   * Check for a key without asserting the type.\n   * @param key - The key to check\n   * @returns Whether the node has the key\n   */\n  hasKey<T extends string, R = any>(key: T): this is this & { [k in T]: R } {\n    return Reflect.has(this, key);\n  }\n\n  /**\n   * Assert that the node has the given key and return it.\n   * @param key - The key to check\n   * @returns The value of the key wrapped in a Maybe\n   * @throws {ParsingError} If the node does not have the key\n   */\n  key<T extends string, R = any>(key: T) {\n    if (!this.hasKey<T, R>(key)) {\n      throw new ParsingError(`Missing key ${key}`);\n    }\n    return new Maybe(this[key]);\n  }\n}\n\nconst MAYBE_TAG = 'Maybe';\n\n/**\n * A wrapper class that provides type-safe access to a value.\n */\nexport class Maybe {\n  readonly #value;\n\n  constructor (value: any) {\n    this.#value = value;\n  }\n\n  #checkPrimitive(type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function') {\n    return typeof this.#value === type;\n  }\n\n  #assertPrimitive(type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function') {\n    if (!this.#checkPrimitive(type)) {\n      throw new TypeError(`Expected ${type}, got ${this.typeof}`);\n    }\n    return this.#value;\n  }\n\n  get typeof() {\n    return typeof this.#value;\n  }\n\n  string(): string {\n    return this.#assertPrimitive('string');\n  }\n\n  isString() {\n    return this.#checkPrimitive('string');\n  }\n\n  number(): number {\n    return this.#assertPrimitive('number');\n  }\n\n  isNumber() {\n    return this.#checkPrimitive('number');\n  }\n\n  bigint(): bigint {\n    return this.#assertPrimitive('bigint');\n  }\n\n  isBigint() {\n    return this.#checkPrimitive('bigint');\n  }\n\n  boolean(): boolean {\n    return this.#assertPrimitive('boolean');\n  }\n\n  isBoolean() {\n    return this.#checkPrimitive('boolean');\n  }\n\n  symbol(): symbol {\n    return this.#assertPrimitive('symbol');\n  }\n\n  isSymbol() {\n    return this.#checkPrimitive('symbol');\n  }\n\n  undefined(): undefined {\n    return this.#assertPrimitive('undefined');\n  }\n\n  isUndefined() {\n    return this.#checkPrimitive('undefined');\n  }\n\n  null(): null {\n    if (this.#value !== null)\n      throw new TypeError(`Expected null, got ${typeof this.#value}`);\n    return this.#value;\n  }\n\n  isNull() {\n    return this.#value === null;\n  }\n\n  object(): object {\n    return this.#assertPrimitive('object');\n  }\n\n  isObject() {\n    return this.#checkPrimitive('object');\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  function(): Function {\n    return this.#assertPrimitive('function');\n  }\n\n  isFunction() {\n    return this.#checkPrimitive('function');\n  }\n\n  /**\n   * Get the value as an array.\n   * @returns the value as any[].\n   * @throws If the value is not an array.\n   */\n  array(): any[] {\n    if (!Array.isArray(this.#value)) {\n      throw new TypeError(`Expected array, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * More typesafe variant of {@link Maybe#array}.\n   * @returns a proxied array which returns all the values as {@link Maybe}.\n   * @throws {TypeError} If the value is not an array\n   */\n  arrayOfMaybe(): Maybe[] {\n    const arrayProps: any[] = [];\n    return new Proxy(this.array(), {\n      get(target, prop) {\n        if (Reflect.has(arrayProps, prop)) {\n          return Reflect.get(target, prop);\n        }\n        return new Maybe(Reflect.get(target, prop));\n      }\n    });\n  }\n\n  /**\n   * Check whether the value is an array.\n   * @returns whether the value is an array.\n   */\n  isArray() {\n    return Array.isArray(this.#value);\n  }\n\n  /**\n   * Get the value as a YTNode.\n   * @returns the value as a YTNode.\n   * @throws If the value is not a YTNode.\n   */\n  node() {\n    if (!(this.#value instanceof YTNode)) {\n      throw new TypeError(`Expected YTNode, got ${this.#value.constructor.name}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the value is a YTNode.\n   * @returns Whether the value is a YTNode.\n   */\n  isNode() {\n    return this.#value instanceof YTNode;\n  }\n\n  /**\n   * Get the value as a YTNode of the given type.\n   * @param types - The type(s) to cast to.\n   * @returns The node cast to the given type.\n   * @throws If the node is not of the given type.\n   */\n  nodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K) {\n    return this.node().as(...types);\n  }\n\n  /**\n   * Check if the value is a YTNode of the given type.\n   * @param types - the type(s) to check.\n   * @returns Whether the value is a YTNode of the given type.\n   */\n  isNodeOfType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K) {\n    return this.isNode() && this.node().is(...types);\n  }\n\n  /**\n   * Get the value as an ObservedArray.\n   * @returns the value of the Maybe as a ObservedArray.\n   */\n  observed(): ObservedArray<YTNode> {\n    if (!this.isObserved()) {\n      throw new TypeError(`Expected ObservedArray, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the value is an ObservedArray.\n   */\n  isObserved() {\n    return this.#value?.[isObserved];\n  }\n\n  /**\n   * Get the value of the Maybe as a SuperParsedResult.\n   * @returns the value as a SuperParsedResult.\n   * @throws If the value is not a SuperParsedResult.\n   */\n  parsed(): SuperParsedResult {\n    if (!(this.#value instanceof SuperParsedResult)) {\n      throw new TypeError(`Expected SuperParsedResult, got ${typeof this.#value}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Is the result a SuperParsedResult?\n   */\n  isParsed() {\n    return this.#value instanceof SuperParsedResult;\n  }\n\n  /**\n   * @deprecated\n   * This call is not meant to be used outside of debugging. Please use the specific type getter instead.\n   */\n  any(): any {\n    Log.warn(MAYBE_TAG, 'This call is not meant to be used outside of debugging. Please use the specific type getter instead.');\n    return this.#value;\n  }\n\n  /**\n   * Get the node as an instance of the given class.\n   * @param type - The type to check.\n   * @returns the value as the given type.\n   * @throws If the node is not of the given type.\n   */\n  instanceof<T extends object>(type: Constructor<T>): T {\n    if (!this.isInstanceof(type)) {\n      throw new TypeError(`Expected instance of ${type.name}, got ${this.#value.constructor.name}`);\n    }\n    return this.#value;\n  }\n\n  /**\n   * Check if the node is an instance of the given class.\n   * @param type - The type to check.\n   * @returns Whether the node is an instance of the given type.\n   */\n  isInstanceof<T extends object>(type: Constructor<T>): this is this & T {\n    return this.#value instanceof type;\n  }\n}\n\nexport interface Constructor<T> {\n    new (...args: any[]): T;\n}\n\nexport interface YTNodeConstructor<T extends YTNode = YTNode> {\n    new(data: any): T;\n    readonly type: string;\n}\n\n/**\n * Represents a parsed response in an unknown state. Either a YTNode or a YTNode[] or null.\n */\nexport class SuperParsedResult<T extends YTNode = YTNode> {\n  readonly #result;\n\n  constructor(result: T | ObservedArray<T> | null) {\n    this.#result = result;\n  }\n\n  get is_null() {\n    return this.#result === null;\n  }\n  get is_array() {\n    return !this.is_null && Array.isArray(this.#result);\n  }\n  get is_node() {\n    return !this.is_array;\n  }\n\n  array() {\n    if (!this.is_array) {\n      throw new TypeError('Expected an array, got a node');\n    }\n    return this.#result as ObservedArray<T>;\n  }\n\n  item() {\n    if (!this.is_node) {\n      throw new TypeError('Expected a node, got an array');\n    }\n    return this.#result as T;\n  }\n}\n\n/**\n * An extended array type that includes additional utility methods for filtering and manipulating YTNode objects.\n */\nexport type ObservedArray<T extends YTNode = YTNode> = Array<T> & {\n  /**\n   * Returns the first object that matches the specified rule object.\n   * @param rule - An object containing properties to match against\n   * @param del_item - Optional flag to remove the matched item from the array\n   * @returns The first matching object or undefined if no match is found\n   */\n  get: (rule: object, del_item?: boolean) => T | undefined;\n\n  /**\n   * Returns all objects that match the specified rule object.\n   * @param rule - An object containing properties to match against\n   * @param del_items - Optional flag to remove all matched items from the array\n   * @returns An array of all matching objects\n   */\n  getAll: (rule: object, del_items?: boolean) => T[];\n\n  /**\n   * Returns the first object that satisfies the provided condition function.\n   * @param condition - A predicate function that tests each element\n   * @returns The first element that satisfies the condition or undefined if none found\n   */\n  matchCondition: (condition: (node: T) => boolean) => T | undefined;\n\n  /**\n   * Removes the item at the specified index.\n   * @param index - The index of the item to remove\n   * @returns The modified array after removal\n   */\n  remove: (index: number) => T[];\n\n  /**\n   * Filters the array to only include items of the specified YTNode types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to filter by\n   * @returns A new ObservedArray containing only items of the specified types\n   */\n  filterType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;\n\n  /**\n   * Returns the first item in the array that matches any of the specified YTNode types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to match against\n   * @returns The first matching item or undefined if none found\n   */\n  firstOfType<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): InstanceType<K[number]> | undefined;\n\n  /**\n   * Returns the first item in the array.\n   * @returns The first item in the array\n   */\n  first: () => T;\n\n  /**\n   * Similar to `filter` but with strict type checking. Filters the array to include only items of the specified types.\n   * @template R - Type extending YTNode\n   * @template K - Array of types (YTNodes)\n   * @param types - Rest parameter of YTNode constructor types to filter by\n   * @returns A new ObservedArray containing only items of the specified types\n   * @throws {ParsingError} If an item is not of the specified type\n   */\n  as<R extends YTNode, K extends YTNodeConstructor<R>[]>(...types: K): ObservedArray<InstanceType<K[number]>>;\n};\n\n/**\n * Creates an observed array that provides additional utility methods for array manipulation and filtering.\n * @template T - Type extending YTNode\n * @param obj - Array to be observed\n */\nexport function observe<T extends YTNode>(obj: Array<T>): ObservedArray<T> {\n  return new Proxy(obj, {\n    get(target, prop) {\n      if (prop == 'get') {\n        return (rule: object, del_item?: boolean) => (\n          target.find((obj, index) => {\n            const match = deepCompare(rule, obj);\n            if (match && del_item) {\n              target.splice(index, 1);\n            }\n            return match;\n          })\n        );\n      }\n\n      if (prop == isObserved) {\n        return true;\n      }\n\n      if (prop == 'getAll') {\n        return (rule: object, del_items: boolean) => (\n          target.filter((obj, index) => {\n            const match = deepCompare(rule, obj);\n            if (match && del_items) {\n              target.splice(index, 1);\n            }\n            return match;\n          })\n        );\n      }\n\n      if (prop == 'matchCondition') {\n        return (condition: (node: T) => boolean) => (\n          target.find((obj) => {\n            return condition(obj);\n          })\n        );\n      }\n\n      if (prop == 'filterType') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return observe(target.filter((node: YTNode) => {\n            return !!node.is(...types);\n          }));\n        };\n      }\n\n      if (prop == 'firstOfType') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return target.find((node: YTNode) => {\n            return !!node.is(...types);\n          });\n        };\n      }\n\n      if (prop == 'first') {\n        return () => target[0];\n      }\n\n      if (prop == 'as') {\n        return (...types: YTNodeConstructor<YTNode>[]) => {\n          return observe(target.map((node: YTNode) => {\n            if (node.is(...types))\n              return node;\n            throw new ParsingError(`Expected node of any type ${types.map((type) => type.type).join(', ')}, got ${(node as YTNode).type}`);\n          }));\n        };\n      }\n\n      if (prop == 'remove') {\n        return (index: number): any => target.splice(index, 1);\n      }\n\n      return Reflect.get(target, prop);\n    }\n  }) as ObservedArray<T>;\n}\n\nexport class Memo extends Map<string, YTNode[]> {\n  getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(types: K): ObservedArray<InstanceType<K[number]>>;\n  getType<T extends YTNode, K extends YTNodeConstructor<T>[]>(...types: K): ObservedArray<InstanceType<K[number]>>\n  getType(...types: YTNodeConstructor<YTNode>[] | YTNodeConstructor<YTNode>[][]) {\n    types = types.flat();\n    return observe(types.flatMap((type) => (this.get(type.type) || []) as YTNode[]));\n  }\n}", "const YTJS_TAG = 'YOUTUBEJS';\n\nexport const Level = {\n  NONE: 0,\n  ERROR: 1,\n  WARNING: 2,\n  INFO: 3,\n  DEBUG: 4\n};\n\nconst log_map = {\n  [Level.ERROR]: (...args: any[]) => console.error(...args),\n  [Level.WARNING]: (...args: any[]) => console.warn(...args),\n  [Level.INFO]: (...args: any[]) => console.info(...args),\n  [Level.DEBUG]: (...args: any[]) => console.debug(...args)\n};\n\nlet log_level = [ Level.WARNING ];\nconst one_time_warnings_issued = new Set<string>();\n\nfunction doLog(level: number, tag?: string, args?: any[]) {\n  if (!log_map[level] || !log_level.includes(level))\n    return;\n\n  const tags = [ `[${YTJS_TAG}]` ];\n\n  if (tag)\n    tags.push(`[${tag}]`);\n\n  log_map[level](`${tags.join('')}:`, ...(args || []));\n}\n\nexport const warnOnce = (id: string, ...args: any[]) => {\n  if (one_time_warnings_issued.has(id))\n    return;\n  \n  doLog(Level.WARNING, id, args);\n  one_time_warnings_issued.add(id);\n};\n\nexport const warn = (tag?: string, ...args: any[]) => doLog(Level.WARNING, tag, args);\nexport const error = (tag?: string, ...args: any[]) => doLog(Level.ERROR, tag, args);\nexport const info = (tag?: string, ...args: any[]) => doLog(Level.INFO, tag, args);\nexport const debug = (tag?: string, ...args: any[]) => doLog(Level.DEBUG, tag, args);\n\nexport function setLevel(...args: number[]) {\n  log_level = args;\n}\n", "// This file was auto generated, do not edit.\n// See ./scripts/build-parser-map.js\n\nexport { default as AccessibilityContext } from './classes/misc/AccessibilityContext.js';\nexport { default as AccessibilityData } from './classes/misc/AccessibilityData.js';\nexport { default as Author } from './classes/misc/Author.js';\nexport { default as ChildElement } from './classes/misc/ChildElement.js';\nexport { default as CommandContext } from './classes/misc/CommandContext.js';\nexport { default as EmojiRun } from './classes/misc/EmojiRun.js';\nexport { default as Format } from './classes/misc/Format.js';\nexport { default as RendererContext } from './classes/misc/RendererContext.js';\nexport { default as SubscriptionButton } from './classes/misc/SubscriptionButton.js';\nexport { default as Text } from './classes/misc/Text.js';\nexport { default as TextRun } from './classes/misc/TextRun.js';\nexport { default as Thumbnail } from './classes/misc/Thumbnail.js';\nexport { default as VideoDetails } from './classes/misc/VideoDetails.js';\n", "import type { RawNode } from '../../types/index.js';\n\nexport default class AccessibilityContext {\n  public label: string;\n\n  constructor(data: RawNode) {\n    this.label = data.label;\n  }\n} ", "import type { RawNode } from '../../types/index.js';\n\nexport interface AccessibilitySupportedDatas {\n  accessibility_data: AccessibilityData;\n}\n\nexport interface AccessibilityId {\n  accessibility_id_type?:\n    | 'UNKNOWN'\n    | 'MENU_ADD_TO_WATCH_LATER'\n    | 'MENU_REMOVE_FROM_WATCH_LATER'\n    | 'MENU_ADD_TO_PLAYLIST'\n    | 'MENU_REMOVE_FROM_PLAYLIST'\n    | 'MENU_SHARE_VIDEO'\n    | 'MENU_SHARE_PLAYLIST'\n    | 'MENU_OFFLINE_VIDEO'\n    | 'MENU_OFFLINE_PLAYLIST'\n    | 'MENU_DELETE_VIDEO'\n    | 'MENU_DELETE_PLAYLIST'\n    | 'MENU_EDIT_VIDEO_METADATA'\n    | 'MENU_HIDE'\n    | 'MENU_REMOVE_FROM_HISTORY'\n    | 'MENU_LIKE'\n    | 'MENU_INFO'\n    | 'MENU_ADD_TO_REMOTE_QUEUE'\n    | 'MENU_REMOVE_FROM_REMOTE_QUEUE'\n    | 'MENU_CREATE_PLAYLIST'\n    | 'MENU_SETTINGS'\n    | 'MENU_PRIVACY'\n    | 'MENU_FEEDBACK'\n    | 'MENU_HELP'\n    | 'MENU_DELETE_CHANNEL_POST'\n    | 'MENU_PLAYLIST_JOIN_COLLABORATION'\n    | 'MENU_EDIT_PLAYLIST'\n    | 'MENU_OFFLINE_REMOVE'\n    | 'MENU_OFFLINE_PAUSE'\n    | 'MENU_OFFLINE_RESUME'\n    | 'MENU_UNSUBSCRIBE'\n    | 'MENU_GET_ALL_UPDATES'\n    | 'MENU_DISMISS'\n    | 'MENU_CANCEL_UPLOAD'\n    | 'MENU_TAKE_PHOTO'\n    | 'MENU_CHOOSE_PHOTO'\n    | 'MENU_CHOOSE_FROM_CHANNEL_ART_GALLERY'\n    | 'MENU_FILTER_VIDEOS_ONLY'\n    | 'MENU_FILTER_VIDEOS_AND_POSTS'\n    | 'MENU_WATCH_ON_TV'\n    | 'MENU_INSERT_IN_REMOTE_QUEUE'\n    | 'MENU_ADD_UPCOMING_EVENT_REMINDER'\n    | 'MENU_REMOVE_UPCOMING_EVENT_REMINDER'\n    | 'MENU_TOGGLE_DENSITY_MODE'\n    | 'MENU_OFFLINE_UPSELL'\n    | 'MENU_MORE_LIKE_THIS'\n    | 'MENU_CREATE_VIDEO'\n    | 'MENU_CREATE_LIVE_STREAM'\n    | 'MENU_CREATE_REEL_ITEM'\n    | 'MENU_CREATE_POST'\n    | 'MENU_LESS_LIKE_THIS'\n    | 'MENU_REEL_OVERFLOW'\n    | 'MENU_DELETE_REEL'\n    | 'MENU_EDIT_REEL'\n    | 'MENU_REMOVE_FROM_QUEUE'\n    | 'MENU_REEL_SHELF_OVERFLOW'\n    | 'MENU_REEL_SHELF_DISMISS'\n    | 'MENU_SHARE_ARTIST'\n    | 'MENU_ABOUT_RECOMMENDATION'\n    | 'MENU_REPORT'\n    | 'EXPLORE_DESTINATION_TRENDING'\n    | 'EXPLORE_DESTINATION_MUSIC'\n    | 'EXPLORE_DESTINATION_GAMING'\n    | 'EXPLORE_DESTINATION_NEWS'\n    | 'EXPLORE_DESTINATION_MOVIES'\n    | 'EXPLORE_DESTINATION_FASHION'\n    | 'EXPLORE_DESTINATION_LEARNING'\n    | 'EXPLORE_DESTINATION_STAY_HOME'\n    | 'MENU_ABOUT_GAMING_RECOMMENDATAION'\n    | 'EXPLORE_DESTINATION_LIVE'\n    | 'MENU_QUALITY'\n    | 'MENU_CAPTIONS'\n    | 'MENU_PLAYBACK_SPEED'\n    | 'MENU_SHARE_PLAYLIST_UNAVAILABLE'\n    | 'MENU_INFO_CARD'\n    | 'EXPLORE_DESTINATION_SPORTS'\n    | 'MENU_SINGLE_LOOP'\n    | 'MENU_HIDE_VIDEO'\n    | 'MENU_CLEAR_QUEUE'\n    | 'EXPLORE_DESTINATION_SHOPPING'\n    | 'MENU_PLAY_NEXT_IN_QUEUE'\n    | 'MENU_PLAY_LAST_IN_QUEUE'\n    | 'MENU_GO_TO_CHANNEL'\n    | 'EXPLORE_DESTINATION_PODCASTS'\n    | 'MEDIA_GENERATOR_PROMPT_INPUT'\n    | 'MEDIA_GENERATOR_STYLE_SHELF'\n    | 'MEDIA_GENERATOR_STYLE_ITEM'\n    | 'MEDIA_GENERATOR_CREATE_BUTTON'\n    | 'MEDIA_GENERATOR_T2V_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_T2I_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_T2M_ENTRYPOINT'\n    | 'MEDIA_GENERATOR_BACK_BUTTON'\n    | 'MEDIA_GENERATOR_HEADER'\n    | 'MEDIA_GENERATOR_LOADING_PROGRESS'\n    | 'MEDIA_GENERATOR_CANCEL_BUTTON'\n    | 'MEDIA_GENERATOR_IMAGE_PREVIEW'\n    | 'MEDIA_GENERATOR_VIDEO_PREVIEW'\n    | 'MEDIA_GENERATOR_DONE_BUTTON'\n    | 'MEDIA_GENERATOR_IMAGE_SELECTION'\n    | 'MEDIA_GENERATOR_SOUND_METADATA'\n    | 'MEDIA_GENERATOR_AUDIO_SELECT_BUTTON'\n    | 'MEDIA_GENERATOR_T2I2V_ENTRYPOINT'\n    | 'MENU_SAVE_QUEUE_TO_PLAYLIST'\n    | 'MEDIA_GENERATOR_ANIMATE_BUTTON'\n    | 'MEDIA_GENERATOR_SEGMENT_IMPORT_ENTRYPOINT';\n}\n\nexport default class AccessibilityData {\n  public accessibility_identifier?: string;\n  public identifier?: AccessibilityId;\n  public label?: string;\n  \n  constructor(data: RawNode) {\n    if ('accessibilityIdentifier' in data) {\n      this.accessibility_identifier = data.accessibilityIdentifier;\n    }\n    \n    if ('identifier' in data) {\n      this.identifier = {\n        accessibility_id_type: data.identifier.accessibilityIdType\n      };\n    }\n    \n    if ('label' in data) {\n      this.label = data.label;\n    }\n  }\n}", "\nexport const URLS = {\n  YT_BASE: 'https://www.youtube.com',\n  YT_MUSIC_BASE: 'https://music.youtube.com',\n  YT_SUGGESTIONS: 'https://suggestqueries-clients6.youtube.com',\n  YT_UPLOAD: 'https://upload.youtube.com/',\n  API: {\n    BASE: 'https://youtubei.googleapis.com',\n    PRODUCTION_1: 'https://www.youtube.com/youtubei/',\n    PRODUCTION_2: 'https://youtubei.googleapis.com/youtubei/',\n    STAGING: 'https://green-youtubei.sandbox.googleapis.com/youtubei/',\n    RELEASE: 'https://release-youtubei.sandbox.googleapis.com/youtubei/',\n    TEST: 'https://test-youtubei.sandbox.googleapis.com/youtubei/',\n    CAMI: 'http://cami-youtubei.sandbox.googleapis.com/youtubei/',\n    UYTFE: 'https://uytfe.sandbox.google.com/youtubei/'\n  },\n  GOOGLE_SEARCH_BASE: 'https://www.google.com/'\n} as const;\nexport const OAUTH = {\n  REGEX: {\n    TV_SCRIPT: new RegExp('<script\\\\s+id=\"base-js\"\\\\s+src=\"([^\"]+)\"[^>]*><\\\\/script>'),\n    CLIENT_IDENTITY: new RegExp('clientId:\"(?<client_id>[^\"]+)\",[^\"]*?:\"(?<client_secret>[^\"]+)\"')\n  }\n} as const;\nexport const CLIENTS = {\n  IOS: {\n    NAME: 'iOS',\n    VERSION: '20.11.6',\n    USER_AGENT: 'com.google.ios.youtube/20.11.6 (iPhone10,4; U; CPU iOS 16_7_7 like Mac OS X)',\n    DEVICE_MODEL: 'iPhone10,4',\n    OS_NAME: 'iOS',\n    OS_VERSION: '16.7.7.20H330'\n  },\n  WEB: {\n    NAME: 'WEB',\n    VERSION: '2.20250222.10.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco',\n    SUGG_EXP_ID: 'ytzpb5_e2,ytpo.bo.lqp.elu=1,ytpo.bo.lqp.ecsc=1,ytpo.bo.lqp.mcsc=3,ytpo.bo.lqp.mec=1,ytpo.bo.lqp.rw=0.8,ytpo.bo.lqp.fw=0.2,ytpo.bo.lqp.szp=1,ytpo.bo.lqp.mz=3,ytpo.bo.lqp.al=en_us,ytpo.bo.lqp.zrm=1,ytpo.bo.lqp.er=1,ytpo.bo.ro.erl=1,ytpo.bo.ro.mlus=3,ytpo.bo.ro.erls=3,ytpo.bo.qfo.mlus=3,ytzprp.ppp.e=1,ytzprp.ppp.st=772,ytzprp.ppp.p=5'\n  },\n  MWEB: {\n    NAME: 'MWEB',\n    VERSION: '2.20250224.01.00',\n    API_VERSION: 'v1'\n  },\n  WEB_KIDS: {\n    NAME: 'WEB_KIDS',\n    VERSION: '2.20250221.11.00'\n  },\n  YTMUSIC: {\n    NAME: 'WEB_REMIX',\n    VERSION: '1.20250219.01.00'\n  },\n  ANDROID: {\n    NAME: 'ANDROID',\n    VERSION: '19.35.36',\n    SDK_VERSION: 33,\n    USER_AGENT: 'com.google.android.youtube/19.35.36(Linux; U; Android 13; en_US; SM-S908E Build/TP1A.220624.014) gzip'\n  },\n  YTSTUDIO_ANDROID: {\n    NAME: 'ANDROID_CREATOR',\n    VERSION: '22.43.101'\n  },\n  YTMUSIC_ANDROID: {\n    NAME: 'ANDROID_MUSIC',\n    VERSION: '5.34.51'\n  },\n  TV: {\n    NAME: 'TVHTML5',\n    VERSION: '7.20250219.14.00',\n    USER_AGENT: 'Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version'\n  },\n  TV_SIMPLY: {\n    NAME: 'TVHTML5_SIMPLY',\n    VERSION: '1.0'\n  },\n  TV_EMBEDDED: {\n    NAME: 'TVHTML5_SIMPLY_EMBEDDED_PLAYER',\n    VERSION: '2.0'\n  },\n  WEB_EMBEDDED: {\n    NAME: 'WEB_EMBEDDED_PLAYER',\n    VERSION: '1.20250219.01.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco'\n  },\n  WEB_CREATOR: {\n    NAME: 'WEB_CREATOR',\n    VERSION: '1.20241203.01.00',\n    API_KEY: 'AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8',\n    API_VERSION: 'v1',\n    STATIC_VISITOR_ID: '6zpwvWUNAco'\n  }\n} as const;\n/**\n * The keys correspond to the `NAME` fields in {@linkcode CLIENTS} constant\n */\nexport const CLIENT_NAME_IDS = {\n  iOS: '5',\n  WEB: '1',\n  MWEB: '2',\n  WEB_KIDS: '76',\n  WEB_REMIX: '67',\n  ANDROID: '3',\n  ANDROID_CREATOR: '14',\n  ANDROID_MUSIC: '21',\n  TVHTML5: '7',\n  TVHTML5_SIMPLY: '74',\n  TVHTML5_SIMPLY_EMBEDDED_PLAYER: '85',\n  WEB_EMBEDDED_PLAYER: '56',\n  WEB_CREATOR: '62'\n} as const;\nexport const STREAM_HEADERS = {\n  'accept': '*/*',\n  'origin': 'https://www.youtube.com',\n  'referer': 'https://www.youtube.com',\n  'DNT': '?1'\n} as const;\nexport const INNERTUBE_HEADERS_BASE = {\n  'accept': '*/*',\n  'accept-encoding': 'gzip, deflate',\n  'content-type': 'application/json'\n} as const;\n\nexport const SUPPORTED_CLIENTS = [ 'IOS', 'WEB', 'MWEB', 'YTKIDS', 'YTMUSIC', 'ANDROID', 'YTSTUDIO_ANDROID', 'YTMUSIC_ANDROID', 'TV', 'TV_SIMPLY', 'TV_EMBEDDED', 'WEB_EMBEDDED', 'WEB_CREATOR' ];\n", "import * as YTNodes from './nodes.js';\nimport { InnertubeError, ParsingError, Platform } from '../utils/Utils.js';\nimport type { ObservedArray, YTNode, YTNodeConstructor } from './helpers.js';\nimport { Memo, observe, SuperParsedResult } from './helpers.js';\nimport type { KeyInfo } from './generator.js';\nimport { camelToSnake, generateRuntimeClass, generateTypescriptClass } from './generator.js';\nimport { Log } from '../utils/index.js';\n\nimport {\n  Continuation,\n  ContinuationCommand,\n  GridContinuation,\n  ItemSectionContinuation,\n  LiveChatContinuation,\n  MusicPlaylistShelfContinuation,\n  MusicShelfContinuation,\n  NavigateAction,\n  PlaylistPanelContinuation,\n  ReloadContinuationItemsCommand,\n  SectionListContinuation,\n  ShowMiniplayerCommand\n} from './continuations.js';\n\nimport AudioOnlyPlayability from './classes/AudioOnlyPlayability.js';\nimport CardCollection from './classes/CardCollection.js';\nimport Endscreen from './classes/Endscreen.js';\nimport PlayerAnnotationsExpanded from './classes/PlayerAnnotationsExpanded.js';\nimport PlayerCaptionsTracklist from './classes/PlayerCaptionsTracklist.js';\nimport PlayerLiveStoryboardSpec from './classes/PlayerLiveStoryboardSpec.js';\nimport PlayerStoryboardSpec from './classes/PlayerStoryboardSpec.js';\nimport Alert from './classes/Alert.js';\nimport AlertWithButton from './classes/AlertWithButton.js';\nimport EngagementPanelSectionList from './classes/EngagementPanelSectionList.js';\nimport MusicMultiSelectMenuItem from './classes/menus/MusicMultiSelectMenuItem.js';\nimport MacroMarkersListEntity from './classes/MacroMarkersListEntity.js';\nimport Format from './classes/misc/Format.js';\nimport VideoDetails from './classes/misc/VideoDetails.js';\nimport NavigationEndpoint from './classes/NavigationEndpoint.js';\nimport CommentView from './classes/comments/CommentView.js';\nimport MusicThumbnail from './classes/MusicThumbnail.js';\nimport OpenPopupAction from './classes/actions/OpenPopupAction.js';\nimport AppendContinuationItemsAction from './classes/actions/AppendContinuationItemsAction.js';\nimport type { IParsedResponse, IRawResponse, RawData, RawNode } from './types/index.js';\n\nconst TAG = 'Parser';\n\nexport type ParserError = {\n  classname: string,\n} & ({\n  error_type: 'typecheck',\n  classdata: RawNode,\n  expected: string | string[]\n} | {\n  error_type: 'parse',\n  classdata: RawNode,\n  error: unknown\n} | {\n  error_type: 'mutation_data_missing',\n  classname: string\n} | {\n  error_type: 'mutation_data_invalid',\n  total: number,\n  failed: number,\n  titles: string[]\n} | {\n  error_type: 'class_not_found',\n  key_info: KeyInfo,\n} | {\n  error_type: 'class_changed',\n  key_info: KeyInfo,\n  changed_keys: KeyInfo\n});\n\nexport type ParserErrorHandler = (error: ParserError) => void;\n\nconst IGNORED_LIST = new Set([\n  'AdSlot',\n  'DisplayAd',\n  'SearchPyv',\n  'MealbarPromo',\n  'PrimetimePromo',\n  'PromotedSparklesWeb',\n  'CompactPromotedVideo',\n  'BrandVideoShelf',\n  'BrandVideoSingleton',\n  'StatementBanner',\n  'GuideSigninPromo',\n  'AdsEngagementPanelContent',\n  'MiniGameCardView'\n]);\n\nconst RUNTIME_NODES = new Map<string, YTNodeConstructor>(Object.entries(YTNodes));\n\nconst DYNAMIC_NODES = new Map<string, YTNodeConstructor>();\n\nlet MEMO: Memo | null = null;\n\nlet ERROR_HANDLER: ParserErrorHandler = ({ classname, ...context }: ParserError) => {\n  switch (context.error_type) {\n    case 'parse':\n      if (context.error instanceof Error) {\n        Log.warn(TAG,\n          new InnertubeError(\n            `Something went wrong at ${classname}!\\n` +\n            `This is a bug, please report it at ${Platform.shim.info.bugs_url}`, {\n              stack: context.error.stack,\n              classdata: JSON.stringify(context.classdata, null, 2)\n            }\n          )\n        );\n      }\n      break;\n    case 'typecheck':\n      Log.warn(TAG,\n        new ParsingError(\n          `Type mismatch, got ${classname} expected ${Array.isArray(context.expected) ? context.expected.join(' | ') : context.expected}.`,\n          context.classdata\n        )\n      );\n      break;\n    case 'mutation_data_missing':\n      Log.warn(TAG,\n        new InnertubeError(\n          `Mutation data required for processing ${classname}, but none found.\\n` +\n          `This is a bug, please report it at ${Platform.shim.info.bugs_url}`\n        )\n      );\n      break;\n    case 'mutation_data_invalid':\n      Log.warn(TAG,\n        new InnertubeError(\n          `Mutation data missing or invalid for ${context.failed} out of ${context.total} MusicMultiSelectMenuItems. ` +\n          `The titles of the failed items are: ${context.titles.join(', ')}.\\n` +\n          `This is a bug, please report it at ${Platform.shim.info.bugs_url}`\n        )\n      );\n      break;\n    case 'class_not_found':\n      Log.warn(TAG,\n        new InnertubeError(\n          `${classname} not found!\\n` +\n          `This is a bug, want to help us fix it? Follow the instructions at ${Platform.shim.info.repo_url}/blob/main/docs/updating-the-parser.md or report it at ${Platform.shim.info.bugs_url}!\\n` +\n          `Introspected and JIT generated this class in the meantime:\\n${generateTypescriptClass(classname, context.key_info)}`\n        )\n      );\n      break;\n    case 'class_changed':\n      Log.warn(TAG,\n        `${classname} changed!\\n` +\n        `The following keys where altered: ${context.changed_keys.map(([ key ]) => camelToSnake(key)).join(', ')}\\n` +\n        `The class has changed to:\\n${generateTypescriptClass(classname, context.key_info)}`\n      );\n      break;\n    default:\n      Log.warn(TAG,\n        'Unreachable code reached at ParserErrorHandler'\n      );\n      break;\n  }\n};\n\nexport function setParserErrorHandler(handler: ParserErrorHandler) {\n  ERROR_HANDLER = handler;\n}\n\nfunction _clearMemo() {\n  MEMO = null;\n}\n\nfunction _createMemo() {\n  MEMO = new Memo();\n}\n\nfunction _addToMemo(classname: string, result: YTNode) {\n  if (!MEMO)\n    return;\n\n  const list = MEMO.get(classname);\n  if (!list)\n    return MEMO.set(classname, [ result ]);\n\n  list.push(result);\n}\n\nfunction _getMemo() {\n  if (!MEMO)\n    throw new Error('Parser#getMemo() called before Parser#createMemo()');\n  return MEMO;\n}\n\nexport function shouldIgnore(classname: string) {\n  return IGNORED_LIST.has(classname);\n}\n\nexport function sanitizeClassName(input: string) {\n  return (input.charAt(0).toUpperCase() + input.slice(1))\n    .replace(/Renderer|Model/g, '')\n    .replace(/Radio/g, 'Mix').trim();\n}\n\nexport function getParserByName(classname: string) {\n  const ParserConstructor = RUNTIME_NODES.get(classname);\n\n  if (!ParserConstructor) {\n    const error = new Error(`Module not found: ${classname}`);\n    (error as any).code = 'MODULE_NOT_FOUND';\n    throw error;\n  }\n\n  return ParserConstructor;\n}\n\nexport function hasParser(classname: string) {\n  return RUNTIME_NODES.has(classname);\n}\n\nexport function addRuntimeParser(classname: string, ParserConstructor: YTNodeConstructor) {\n  RUNTIME_NODES.set(classname, ParserConstructor);\n  DYNAMIC_NODES.set(classname, ParserConstructor);\n}\n\nexport function getDynamicParsers() {\n  return Object.fromEntries(DYNAMIC_NODES);\n}\n\n/**\n * Parses a given InnerTube response.\n * @param data - Raw data.\n */\nexport function parseResponse<T extends IParsedResponse = IParsedResponse>(data: IRawResponse): T {\n  const parsed_data = {} as T;\n\n  _createMemo();\n  const contents = parse(data.contents);\n  const contents_memo = _getMemo();\n  if (contents) {\n    parsed_data.contents = contents;\n    parsed_data.contents_memo = contents_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_actions = data.onResponseReceivedActions ? parseRR(data.onResponseReceivedActions) : null;\n  const on_response_received_actions_memo = _getMemo();\n  if (on_response_received_actions) {\n    parsed_data.on_response_received_actions = on_response_received_actions;\n    parsed_data.on_response_received_actions_memo = on_response_received_actions_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_endpoints = data.onResponseReceivedEndpoints ? parseRR(data.onResponseReceivedEndpoints) : null;\n  const on_response_received_endpoints_memo = _getMemo();\n  if (on_response_received_endpoints) {\n    parsed_data.on_response_received_endpoints = on_response_received_endpoints;\n    parsed_data.on_response_received_endpoints_memo = on_response_received_endpoints_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const on_response_received_commands = data.onResponseReceivedCommands ? parseRR(data.onResponseReceivedCommands) : null;\n  const on_response_received_commands_memo = _getMemo();\n  if (on_response_received_commands) {\n    parsed_data.on_response_received_commands = on_response_received_commands;\n    parsed_data.on_response_received_commands_memo = on_response_received_commands_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const continuation_contents = data.continuationContents ? parseLC(data.continuationContents) : null;\n  const continuation_contents_memo = _getMemo();\n  if (continuation_contents) {\n    parsed_data.continuation_contents = continuation_contents;\n    parsed_data.continuation_contents_memo = continuation_contents_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const actions = data.actions ? parseActions(data.actions) : null;\n  const actions_memo = _getMemo();\n  if (actions) {\n    parsed_data.actions = actions;\n    parsed_data.actions_memo = actions_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const live_chat_item_context_menu_supported_renderers = data.liveChatItemContextMenuSupportedRenderers ? parseItem(data.liveChatItemContextMenuSupportedRenderers) : null;\n  const live_chat_item_context_menu_supported_renderers_memo = _getMemo();\n  if (live_chat_item_context_menu_supported_renderers) {\n    parsed_data.live_chat_item_context_menu_supported_renderers = live_chat_item_context_menu_supported_renderers;\n    parsed_data.live_chat_item_context_menu_supported_renderers_memo = live_chat_item_context_menu_supported_renderers_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const header = data.header ? parse(data.header) : null;\n  const header_memo = _getMemo();\n  if (header) {\n    parsed_data.header = header;\n    parsed_data.header_memo = header_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const sidebar = data.sidebar ? parseItem(data.sidebar) : null;\n  const sidebar_memo = _getMemo();\n  if (sidebar) {\n    parsed_data.sidebar = sidebar;\n    parsed_data.sidebar_memo = sidebar_memo;\n  }\n  _clearMemo();\n\n  _createMemo();\n  const items = parse(data.items);\n  if (items) {\n    parsed_data.items = items;\n    parsed_data.items_memo = _getMemo();\n  }\n  _clearMemo();\n\n  applyMutations(contents_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);\n\n  if (on_response_received_endpoints_memo) {\n    applyCommentsMutations(on_response_received_endpoints_memo, data.frameworkUpdates?.entityBatchUpdate?.mutations);\n  }\n\n  const continuation = data.continuation ? parseC(data.continuation) : null;\n  if (continuation) {\n    parsed_data.continuation = continuation;\n  }\n\n  const continuation_endpoint = data.continuationEndpoint ? parseLC(data.continuationEndpoint) : null;\n  if (continuation_endpoint) {\n    parsed_data.continuation_endpoint = continuation_endpoint;\n  }\n\n  const metadata = parse(data.metadata);\n  if (metadata) {\n    parsed_data.metadata = metadata;\n  }\n\n  const microformat = parseItem(data.microformat);\n  if (microformat) {\n    parsed_data.microformat = microformat;\n  }\n\n  const overlay = parseItem(data.overlay);\n  if (overlay) {\n    parsed_data.overlay = overlay;\n  }\n\n  const alerts = parseArray(data.alerts, [ Alert, AlertWithButton ]);\n  if (alerts.length) {\n    parsed_data.alerts = alerts;\n  }\n\n  const refinements = data.refinements;\n  if (refinements) {\n    parsed_data.refinements = refinements;\n  }\n\n  const estimated_results = data.estimatedResults ? parseInt(data.estimatedResults) : null;\n  if (estimated_results) {\n    parsed_data.estimated_results = estimated_results;\n  }\n\n  const player_overlays = parse(data.playerOverlays);\n  if (player_overlays) {\n    parsed_data.player_overlays = player_overlays;\n  }\n\n  const background = parseItem(data.background, MusicThumbnail);\n  if (background) {\n    parsed_data.background = background;\n  }\n\n  const playback_tracking = data.playbackTracking ? {\n    videostats_watchtime_url: data.playbackTracking.videostatsWatchtimeUrl.baseUrl,\n    videostats_playback_url: data.playbackTracking.videostatsPlaybackUrl.baseUrl\n  } : null;\n\n  if (playback_tracking) {\n    parsed_data.playback_tracking = playback_tracking;\n  }\n\n  const playability_status = data.playabilityStatus ? {\n    status: data.playabilityStatus.status,\n    reason: data.playabilityStatus.reason || '',\n    embeddable: !!data.playabilityStatus.playableInEmbed || false,\n    audio_only_playability: parseItem(data.playabilityStatus.audioOnlyPlayability, AudioOnlyPlayability),\n    error_screen: parseItem(data.playabilityStatus.errorScreen)\n  } : null;\n\n  if (playability_status) {\n    parsed_data.playability_status = playability_status;\n  }\n\n  if (data.streamingData) {\n    // Currently each response with streaming data only has two n param values\n    // One for the adaptive formats and another for the combined formats\n    // As they are the same for a response, we only need to decipher them once\n    // For all further deciphering calls on formats from that response, we can use the cached output, given the same input n param\n    const this_response_nsig_cache = new Map<string, string>();\n\n    parsed_data.streaming_data = {\n      expires: new Date(Date.now() + parseInt(data.streamingData.expiresInSeconds) * 1000),\n      formats: parseFormats(data.streamingData.formats, this_response_nsig_cache),\n      adaptive_formats: parseFormats(data.streamingData.adaptiveFormats, this_response_nsig_cache),\n      dash_manifest_url: data.streamingData.dashManifestUrl,\n      hls_manifest_url: data.streamingData.hlsManifestUrl,\n      server_abr_streaming_url: data.streamingData.serverAbrStreamingUrl\n    };\n  }\n\n  if (data.playerConfig) {\n    parsed_data.player_config = {\n      audio_config: {\n        loudness_db: data.playerConfig.audioConfig?.loudnessDb,\n        perceptual_loudness_db: data.playerConfig.audioConfig?.perceptualLoudnessDb,\n        enable_per_format_loudness: data.playerConfig.audioConfig?.enablePerFormatLoudness\n      },\n      stream_selection_config: {\n        max_bitrate: data.playerConfig.streamSelectionConfig?.maxBitrate || '0'\n      },\n      media_common_config: {\n        dynamic_readahead_config: {\n          max_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.maxReadAheadMediaTimeMs || 0,\n          min_read_ahead_media_time_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.minReadAheadMediaTimeMs || 0,\n          read_ahead_growth_rate_ms: data.playerConfig.mediaCommonConfig?.dynamicReadaheadConfig?.readAheadGrowthRateMs || 0\n        },\n        media_ustreamer_request_config: {\n          video_playback_ustreamer_config: data.playerConfig.mediaCommonConfig?.mediaUstreamerRequestConfig?.videoPlaybackUstreamerConfig\n        }\n      }\n    };\n  }\n\n  const current_video_endpoint = data.currentVideoEndpoint ? new NavigationEndpoint(data.currentVideoEndpoint) : null;\n  if (current_video_endpoint) {\n    parsed_data.current_video_endpoint = current_video_endpoint;\n  }\n\n  const endpoint = data.endpoint ? new NavigationEndpoint(data.endpoint) : null;\n  if (endpoint) {\n    parsed_data.endpoint = endpoint;\n  }\n\n  const captions = parseItem(data.captions, PlayerCaptionsTracklist);\n  if (captions) {\n    parsed_data.captions = captions;\n  }\n\n  const video_details = data.videoDetails ? new VideoDetails(data.videoDetails) : null;\n  if (video_details) {\n    parsed_data.video_details = video_details;\n  }\n\n  const annotations = parseArray(data.annotations, PlayerAnnotationsExpanded);\n  if (annotations.length) {\n    parsed_data.annotations = annotations;\n  }\n\n  const storyboards = parseItem(data.storyboards, [ PlayerStoryboardSpec, PlayerLiveStoryboardSpec ]);\n  if (storyboards) {\n    parsed_data.storyboards = storyboards;\n  }\n\n  const endscreen = parseItem(data.endscreen, Endscreen);\n  if (endscreen) {\n    parsed_data.endscreen = endscreen;\n  }\n\n  const cards = parseItem(data.cards, CardCollection);\n  if (cards) {\n    parsed_data.cards = cards;\n  }\n\n  const engagement_panels = parseArray(data.engagementPanels, EngagementPanelSectionList);\n  if (engagement_panels.length) {\n    parsed_data.engagement_panels = engagement_panels;\n  }\n  \n  if (data.bgChallenge) {\n    const interpreter_url = {\n      private_do_not_access_or_else_trusted_resource_url_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue,\n      private_do_not_access_or_else_safe_script_wrapped_value: data.bgChallenge.interpreterUrl.privateDoNotAccessOrElseSafeScriptWrappedValue\n    };\n    \n    parsed_data.bg_challenge = {\n      interpreter_url,\n      interpreter_hash: data.bgChallenge.interpreterHash,\n      program: data.bgChallenge.program,\n      global_name: data.bgChallenge.globalName,\n      client_experiments_state_blob: data.bgChallenge.clientExperimentsStateBlob\n    };\n  }\n  \n  if (data.challenge) {\n    parsed_data.challenge = data.challenge;\n  }\n\n  if (data.playerResponse) {\n    parsed_data.player_response = parseResponse(data.playerResponse);\n  }\n\n  if (data.watchNextResponse) {\n    parsed_data.watch_next_response = parseResponse(data.watchNextResponse);\n  }\n\n  if (data.cpnInfo) {\n    parsed_data.cpn_info = {\n      cpn: data.cpnInfo.cpn,\n      cpn_source: data.cpnInfo.cpnSource\n    };\n  }\n\n  if (data.entries) {\n    parsed_data.entries = data.entries.map((entry) => new NavigationEndpoint(entry));\n  }\n  \n  if (data.targetId) {\n    parsed_data.target_id = data.targetId;\n  }\n\n  return parsed_data;\n}\n\n/**\n * Parses an item.\n * @param data - The data to parse.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parseItem<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawNode | undefined, validTypes: K): InstanceType<K[number]> | null;\nexport function parseItem<T extends YTNode>(data: RawNode | undefined, validTypes: YTNodeConstructor<T>): T | null;\nexport function parseItem(data?: RawNode): YTNode;\nexport function parseItem(data?: RawNode, validTypes?: YTNodeConstructor | YTNodeConstructor[]) {\n  if (!data) return null;\n\n  const keys = Object.keys(data);\n\n  if (!keys.length)\n    return null;\n\n  const classname = sanitizeClassName(keys[0]);\n\n  if (!shouldIgnore(classname)) {\n    try {\n      const has_target_class = hasParser(classname);\n\n      const TargetClass = has_target_class ?\n        getParserByName(classname) :\n        generateRuntimeClass(classname, data[keys[0]], ERROR_HANDLER);\n\n      if (validTypes) {\n        if (Array.isArray(validTypes)) {\n          if (!validTypes.some((type) => type.type === TargetClass.type)) {\n            ERROR_HANDLER({\n              classdata: data[keys[0]],\n              classname,\n              error_type: 'typecheck',\n              expected: validTypes.map((type) => type.type)\n            });\n            return null;\n          }\n        } else if (TargetClass.type !== validTypes.type) {\n          ERROR_HANDLER({\n            classdata: data[keys[0]],\n            classname,\n            error_type: 'typecheck',\n            expected: validTypes.type\n          });\n          return null;\n        }\n      }\n\n      const result = new TargetClass(data[keys[0]]);\n      _addToMemo(classname, result);\n\n      return result;\n    } catch (err) {\n      ERROR_HANDLER({\n        classname,\n        classdata: data[keys[0]],\n        error: err,\n        error_type: 'parse'\n      });\n      return null;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Parses an array of items.\n * @param data - The data to parse.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parseArray<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawNode[] | undefined, validTypes: K): ObservedArray<InstanceType<K[number]>>;\nexport function parseArray<T extends YTNode = YTNode>(data: RawNode[] | undefined, validType: YTNodeConstructor<T>): ObservedArray<T>;\nexport function parseArray(data: RawNode[] | undefined): ObservedArray<YTNode>;\nexport function parseArray(data?: RawNode[], validTypes?: YTNodeConstructor | YTNodeConstructor[]) {\n  if (Array.isArray(data)) {\n    const results: YTNode[] = [];\n\n    for (const item of data) {\n      const result = parseItem(item, validTypes as YTNodeConstructor);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    return observe(results);\n  } else if (!data) {\n    return observe([] as YTNode[]);\n  }\n  throw new ParsingError('Expected array but got a single item');\n}\n\n/**\n * Parses an item or an array of items.\n * @param data - The data to parse.\n * @param requireArray - Whether the data should be parsed as an array.\n * @param validTypes - YTNode types that are allowed to be parsed.\n */\nexport function parse<T extends YTNode, K extends YTNodeConstructor<T>[]>(data: RawData, requireArray: true, validTypes?: K): ObservedArray<InstanceType<K[number]>> | null;\nexport function parse<T extends YTNode, K extends YTNodeConstructor<T>>(data: RawData, requireArray: true, validTypes?: K): ObservedArray<InstanceType<K>> | null;\nexport function parse<T extends YTNode = YTNode>(data?: RawData, requireArray?: false | undefined, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]): SuperParsedResult<T>;\nexport function parse<T extends YTNode = YTNode>(data?: RawData, requireArray?: boolean, validTypes?: YTNodeConstructor<T> | YTNodeConstructor<T>[]) {\n  if (!data) return null;\n\n  if (Array.isArray(data)) {\n    const results: T[] = [];\n\n    for (const item of data) {\n      const result = parseItem(item, validTypes as YTNodeConstructor<T>);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    const res = observe(results);\n\n    return requireArray ? res : new SuperParsedResult(res);\n  } else if (requireArray) {\n    throw new ParsingError('Expected array but got a single item');\n  }\n\n  return new SuperParsedResult(parseItem(data, validTypes as YTNodeConstructor<T>));\n}\n\nconst command_regexp = /Command$/;\nconst endpoint_regexp = /Endpoint$/;\nconst action_regexp = /Action$/;\n\n/**\n * Parses an InnerTube command and returns a YTNode instance if applicable.\n * @param data - The raw node data to parse\n * @returns A YTNode instance if parsing is successful, undefined otherwise\n */\nexport function parseCommand(data: RawNode): YTNode | undefined {\n  let keys: string[] = [];\n\n  try {\n    keys = Object.keys(data);\n  } catch { /** NO-OP */ }\n\n  for (const key of keys) {\n    const value = data[key];\n    if (command_regexp.test(key) || endpoint_regexp.test(key) || action_regexp.test(key)) {\n      const classname = sanitizeClassName(key);\n\n      if (shouldIgnore(classname))\n        return undefined;\n\n      try {\n        const has_target_class = hasParser(classname);\n        if (has_target_class)\n          return new (getParserByName(classname))(value);\n      } catch (error) {\n        ERROR_HANDLER({\n          error,\n          classname,\n          classdata: value,\n          error_type: 'parse'\n        });\n      }\n    }\n  }\n}\n\n/**\n * Parses an array of InnerTube command nodes.\n * @param commands - Array of raw command nodes to parse\n * @returns An observed array of parsed YTNodes\n */\nexport function parseCommands(commands?: RawNode[]): ObservedArray<YTNode> {\n  if (Array.isArray(commands)) {\n    const results: YTNode[] = [];\n\n    for (const item of commands) {\n      const result = parseCommand(item);\n      if (result) {\n        results.push(result);\n      }\n    }\n\n    return observe(results);\n  } else if (!commands) return observe([]);\n  throw new ParsingError('Expected array but got a single item');\n}\n\nexport function parseC(data: RawNode) {\n  if (data.timedContinuationData)\n    return new Continuation({ continuation: data.timedContinuationData, type: 'timed' });\n  return null;\n}\n\nexport function parseLC(data: RawNode) {\n  if (data.itemSectionContinuation)\n    return new ItemSectionContinuation(data.itemSectionContinuation);\n  if (data.sectionListContinuation)\n    return new SectionListContinuation(data.sectionListContinuation);\n  if (data.liveChatContinuation)\n    return new LiveChatContinuation(data.liveChatContinuation);\n  if (data.musicPlaylistShelfContinuation)\n    return new MusicPlaylistShelfContinuation(data.musicPlaylistShelfContinuation);\n  if (data.musicShelfContinuation)\n    return new MusicShelfContinuation(data.musicShelfContinuation);\n  if (data.gridContinuation)\n    return new GridContinuation(data.gridContinuation);\n  if (data.playlistPanelContinuation)\n    return new PlaylistPanelContinuation(data.playlistPanelContinuation);\n  if (data.continuationCommand)\n    return new ContinuationCommand(data.continuationCommand);\n\n  return null;\n}\n\nexport function parseRR(actions: RawNode[]) {\n  return observe(actions.map((action: any) => {\n    if (action.navigateAction)\n      return new NavigateAction(action.navigateAction);\n    else if (action.showMiniplayerCommand)\n      return new ShowMiniplayerCommand(action.showMiniplayerCommand);\n    else if (action.reloadContinuationItemsCommand)\n      return new ReloadContinuationItemsCommand(action.reloadContinuationItemsCommand);\n    else if (action.appendContinuationItemsAction)\n      return new AppendContinuationItemsAction(action.appendContinuationItemsAction);\n    else if (action.openPopupAction)\n      return new OpenPopupAction(action.openPopupAction);\n  }).filter((item) => item) as (AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand)[]);\n}\n\nexport function parseActions(data: RawData) {\n  if (Array.isArray(data)) {\n    return parse(data.map((action) => {\n      delete action.clickTrackingParams;\n      return action;\n    }));\n  }\n  return new SuperParsedResult(parseItem(data));\n}\n\nexport function parseFormats(formats: RawNode[], this_response_nsig_cache: Map<string, string>): Format[] {\n  return formats?.map((format) => new Format(format, this_response_nsig_cache)) || [];\n}\n\nexport function applyMutations(memo: Memo, mutations: RawNode[]) {\n  // Apply mutations to MusicMultiSelectMenuItems\n  const music_multi_select_menu_items = memo.getType(MusicMultiSelectMenuItem);\n\n  if (music_multi_select_menu_items.length > 0 && !mutations) {\n    ERROR_HANDLER({\n      error_type: 'mutation_data_missing',\n      classname: 'MusicMultiSelectMenuItem'\n    });\n  } else {\n    const missing_or_invalid_mutations = [];\n\n    for (const menu_item of music_multi_select_menu_items) {\n      const mutation = mutations\n        .find((mutation) => mutation.payload?.musicFormBooleanChoice?.id === menu_item.form_item_entity_key);\n\n      const choice = mutation?.payload.musicFormBooleanChoice;\n\n      if (choice?.selected !== undefined && choice?.opaqueToken) {\n        menu_item.selected = choice.selected;\n      } else {\n        missing_or_invalid_mutations.push(`'${menu_item.title}'`);\n      }\n    }\n    if (missing_or_invalid_mutations.length > 0) {\n      ERROR_HANDLER({\n        error_type: 'mutation_data_invalid',\n        classname: 'MusicMultiSelectMenuItem',\n        total: music_multi_select_menu_items.length,\n        failed: missing_or_invalid_mutations.length,\n        titles: missing_or_invalid_mutations\n      });\n    }\n  }\n\n  // Apply mutations to MacroMarkersListEntity\n  if (mutations) {\n    const heat_map_mutations = mutations.filter((mutation) =>\n      mutation.payload?.macroMarkersListEntity &&\n      mutation.payload.macroMarkersListEntity.markersList?.markerType === 'MARKER_TYPE_HEATMAP'\n    );\n\n    for (const mutation of heat_map_mutations) {\n      const macro_markers_entity = new MacroMarkersListEntity(mutation.payload.macroMarkersListEntity);\n      const list = memo.get('MacroMarkersListEntity');\n      if (!list) {\n        memo.set('MacroMarkersListEntity', [ macro_markers_entity ]);\n      } else {\n        list.push(macro_markers_entity);\n      }\n    }\n  }\n}\n\nexport function applyCommentsMutations(memo: Memo, mutations: RawNode[]) {\n  const comment_view_items = memo.getType(CommentView);\n\n  if (comment_view_items.length > 0) {\n    if (!mutations) {\n      ERROR_HANDLER({\n        error_type: 'mutation_data_missing',\n        classname: 'CommentView'\n      });\n    }\n\n    for (const comment_view of comment_view_items) {\n      const comment_mutation = mutations\n        .find((mutation) => mutation.payload?.commentEntityPayload?.key === comment_view.keys.comment)\n        ?.payload?.commentEntityPayload;\n\n      const toolbar_state_mutation = mutations\n        .find((mutation) => mutation.payload?.engagementToolbarStateEntityPayload?.key === comment_view.keys.toolbar_state)\n        ?.payload?.engagementToolbarStateEntityPayload;\n\n      const engagement_toolbar = mutations.find((mutation) => mutation.entityKey === comment_view.keys.toolbar_surface)\n        ?.payload?.engagementToolbarSurfaceEntityPayload;\n\n      const comment_surface_mutation = mutations\n        .find((mutation) => mutation.payload?.commentSurfaceEntityPayload?.key === comment_view.keys.comment_surface)\n        ?.payload?.commentSurfaceEntityPayload;\n\n      comment_view.applyMutations(comment_mutation, toolbar_state_mutation, engagement_toolbar, comment_surface_mutation);\n    }\n  }\n}\n", "// This file was auto generated, do not edit.\n// See ./scripts/build-parser-map.js\n\nexport { default as AboutChannel } from './classes/AboutChannel.js';\nexport { default as AboutChannelView } from './classes/AboutChannelView.js';\nexport { default as AccountChannel } from './classes/AccountChannel.js';\nexport { default as AccountItem } from './classes/AccountItem.js';\nexport { default as AccountItemSection } from './classes/AccountItemSection.js';\nexport { default as AccountItemSectionHeader } from './classes/AccountItemSectionHeader.js';\nexport { default as AccountSectionList } from './classes/AccountSectionList.js';\nexport { default as AppendContinuationItemsAction } from './classes/actions/AppendContinuationItemsAction.js';\nexport { default as ChangeEngagementPanelVisibilityAction } from './classes/actions/ChangeEngagementPanelVisibilityAction.js';\nexport { default as GetMultiPageMenuAction } from './classes/actions/GetMultiPageMenuAction.js';\nexport { default as OpenPopupAction } from './classes/actions/OpenPopupAction.js';\nexport { default as SendFeedbackAction } from './classes/actions/SendFeedbackAction.js';\nexport { default as SignalAction } from './classes/actions/SignalAction.js';\nexport { default as UpdateChannelSwitcherPageAction } from './classes/actions/UpdateChannelSwitcherPageAction.js';\nexport { default as UpdateEngagementPanelAction } from './classes/actions/UpdateEngagementPanelAction.js';\nexport { default as UpdateSubscribeButtonAction } from './classes/actions/UpdateSubscribeButtonAction.js';\nexport { default as ActiveAccountHeader } from './classes/ActiveAccountHeader.js';\nexport { default as AddToPlaylist } from './classes/AddToPlaylist.js';\nexport { default as Alert } from './classes/Alert.js';\nexport { default as AlertWithButton } from './classes/AlertWithButton.js';\nexport { default as AnimatedThumbnailOverlayView } from './classes/AnimatedThumbnailOverlayView.js';\nexport { default as AttributionView } from './classes/AttributionView.js';\nexport { default as AudioOnlyPlayability } from './classes/AudioOnlyPlayability.js';\nexport { default as AutomixPreviewVideo } from './classes/AutomixPreviewVideo.js';\nexport { default as AvatarStackView } from './classes/AvatarStackView.js';\nexport { default as AvatarView } from './classes/AvatarView.js';\nexport { default as BackgroundPromo } from './classes/BackgroundPromo.js';\nexport { default as BackstageImage } from './classes/BackstageImage.js';\nexport { default as BackstagePost } from './classes/BackstagePost.js';\nexport { default as BackstagePostThread } from './classes/BackstagePostThread.js';\nexport { default as BadgeView } from './classes/BadgeView.js';\nexport { default as BrowseFeedActions } from './classes/BrowseFeedActions.js';\nexport { default as BrowserMediaSession } from './classes/BrowserMediaSession.js';\nexport { default as Button } from './classes/Button.js';\nexport { default as ButtonCardView } from './classes/ButtonCardView.js';\nexport { default as ButtonView } from './classes/ButtonView.js';\nexport { default as C4TabbedHeader } from './classes/C4TabbedHeader.js';\nexport { default as CallToActionButton } from './classes/CallToActionButton.js';\nexport { default as Card } from './classes/Card.js';\nexport { default as CardCollection } from './classes/CardCollection.js';\nexport { default as CarouselHeader } from './classes/CarouselHeader.js';\nexport { default as CarouselItem } from './classes/CarouselItem.js';\nexport { default as CarouselItemView } from './classes/CarouselItemView.js';\nexport { default as CarouselLockup } from './classes/CarouselLockup.js';\nexport { default as CarouselTitleView } from './classes/CarouselTitleView.js';\nexport { default as Channel } from './classes/Channel.js';\nexport { default as ChannelAboutFullMetadata } from './classes/ChannelAboutFullMetadata.js';\nexport { default as ChannelAgeGate } from './classes/ChannelAgeGate.js';\nexport { default as ChannelExternalLinkView } from './classes/ChannelExternalLinkView.js';\nexport { default as ChannelFeaturedContent } from './classes/ChannelFeaturedContent.js';\nexport { default as ChannelHeaderLinks } from './classes/ChannelHeaderLinks.js';\nexport { default as ChannelHeaderLinksView } from './classes/ChannelHeaderLinksView.js';\nexport { default as ChannelMetadata } from './classes/ChannelMetadata.js';\nexport { default as ChannelMobileHeader } from './classes/ChannelMobileHeader.js';\nexport { default as ChannelOptions } from './classes/ChannelOptions.js';\nexport { default as ChannelOwnerEmptyState } from './classes/ChannelOwnerEmptyState.js';\nexport { default as ChannelSubMenu } from './classes/ChannelSubMenu.js';\nexport { default as ChannelSwitcherHeader } from './classes/ChannelSwitcherHeader.js';\nexport { default as ChannelSwitcherPage } from './classes/ChannelSwitcherPage.js';\nexport { default as ChannelTagline } from './classes/ChannelTagline.js';\nexport { default as ChannelThumbnailWithLink } from './classes/ChannelThumbnailWithLink.js';\nexport { default as ChannelVideoPlayer } from './classes/ChannelVideoPlayer.js';\nexport { default as Chapter } from './classes/Chapter.js';\nexport { default as ChildVideo } from './classes/ChildVideo.js';\nexport { default as ChipBarView } from './classes/ChipBarView.js';\nexport { default as ChipCloud } from './classes/ChipCloud.js';\nexport { default as ChipCloudChip } from './classes/ChipCloudChip.js';\nexport { default as ChipView } from './classes/ChipView.js';\nexport { default as ClientSideToggleMenuItem } from './classes/ClientSideToggleMenuItem.js';\nexport { default as ClipAdState } from './classes/ClipAdState.js';\nexport { default as ClipCreation } from './classes/ClipCreation.js';\nexport { default as ClipCreationScrubber } from './classes/ClipCreationScrubber.js';\nexport { default as ClipCreationTextInput } from './classes/ClipCreationTextInput.js';\nexport { default as ClipSection } from './classes/ClipSection.js';\nexport { default as CollaboratorInfoCardContent } from './classes/CollaboratorInfoCardContent.js';\nexport { default as CollageHeroImage } from './classes/CollageHeroImage.js';\nexport { default as CollectionThumbnailView } from './classes/CollectionThumbnailView.js';\nexport { default as AddToPlaylistCommand } from './classes/commands/AddToPlaylistCommand.js';\nexport { default as CommandExecutorCommand } from './classes/commands/CommandExecutorCommand.js';\nexport { default as ContinuationCommand } from './classes/commands/ContinuationCommand.js';\nexport { default as GetKidsBlocklistPickerCommand } from './classes/commands/GetKidsBlocklistPickerCommand.js';\nexport { default as RunAttestationCommand } from './classes/commands/RunAttestationCommand.js';\nexport { default as ShowDialogCommand } from './classes/commands/ShowDialogCommand.js';\nexport { default as UpdateEngagementPanelContentCommand } from './classes/commands/UpdateEngagementPanelContentCommand.js';\nexport { default as AuthorCommentBadge } from './classes/comments/AuthorCommentBadge.js';\nexport { default as CommentActionButtons } from './classes/comments/CommentActionButtons.js';\nexport { default as CommentDialog } from './classes/comments/CommentDialog.js';\nexport { default as CommentReplies } from './classes/comments/CommentReplies.js';\nexport { default as CommentReplyDialog } from './classes/comments/CommentReplyDialog.js';\nexport { default as CommentsEntryPointHeader } from './classes/comments/CommentsEntryPointHeader.js';\nexport { default as CommentsEntryPointTeaser } from './classes/comments/CommentsEntryPointTeaser.js';\nexport { default as CommentsHeader } from './classes/comments/CommentsHeader.js';\nexport { default as CommentSimplebox } from './classes/comments/CommentSimplebox.js';\nexport { default as CommentsSimplebox } from './classes/comments/CommentsSimplebox.js';\nexport { default as CommentThread } from './classes/comments/CommentThread.js';\nexport { default as CommentView } from './classes/comments/CommentView.js';\nexport { default as CreatorHeart } from './classes/comments/CreatorHeart.js';\nexport { default as EmojiPicker } from './classes/comments/EmojiPicker.js';\nexport { default as PdgCommentChip } from './classes/comments/PdgCommentChip.js';\nexport { default as SponsorCommentBadge } from './classes/comments/SponsorCommentBadge.js';\nexport { default as VoiceReplyContainerView } from './classes/comments/VoiceReplyContainerView.js';\nexport { default as CompactChannel } from './classes/CompactChannel.js';\nexport { default as CompactLink } from './classes/CompactLink.js';\nexport { default as CompactMix } from './classes/CompactMix.js';\nexport { default as CompactMovie } from './classes/CompactMovie.js';\nexport { default as CompactPlaylist } from './classes/CompactPlaylist.js';\nexport { default as CompactStation } from './classes/CompactStation.js';\nexport { default as CompactVideo } from './classes/CompactVideo.js';\nexport { default as CompositeVideoPrimaryInfo } from './classes/CompositeVideoPrimaryInfo.js';\nexport { default as ConfirmDialog } from './classes/ConfirmDialog.js';\nexport { default as ContentMetadataView } from './classes/ContentMetadataView.js';\nexport { default as ContentPreviewImageView } from './classes/ContentPreviewImageView.js';\nexport { default as ContinuationItem } from './classes/ContinuationItem.js';\nexport { default as ConversationBar } from './classes/ConversationBar.js';\nexport { default as CopyLink } from './classes/CopyLink.js';\nexport { default as CreatePlaylistDialog } from './classes/CreatePlaylistDialog.js';\nexport { default as CreatePlaylistDialogFormView } from './classes/CreatePlaylistDialogFormView.js';\nexport { default as DecoratedAvatarView } from './classes/DecoratedAvatarView.js';\nexport { default as DecoratedPlayerBar } from './classes/DecoratedPlayerBar.js';\nexport { default as DefaultPromoPanel } from './classes/DefaultPromoPanel.js';\nexport { default as DescriptionPreviewView } from './classes/DescriptionPreviewView.js';\nexport { default as DialogHeaderView } from './classes/DialogHeaderView.js';\nexport { default as DialogView } from './classes/DialogView.js';\nexport { default as DidYouMean } from './classes/DidYouMean.js';\nexport { default as DislikeButtonView } from './classes/DislikeButtonView.js';\nexport { default as DismissableDialog } from './classes/DismissableDialog.js';\nexport { default as DismissableDialogContentSection } from './classes/DismissableDialogContentSection.js';\nexport { default as DownloadButton } from './classes/DownloadButton.js';\nexport { default as Dropdown } from './classes/Dropdown.js';\nexport { default as DropdownItem } from './classes/DropdownItem.js';\nexport { default as DropdownView } from './classes/DropdownView.js';\nexport { default as DynamicTextView } from './classes/DynamicTextView.js';\nexport { default as Element } from './classes/Element.js';\nexport { default as EmergencyOnebox } from './classes/EmergencyOnebox.js';\nexport { default as EmojiPickerCategory } from './classes/EmojiPickerCategory.js';\nexport { default as EmojiPickerCategoryButton } from './classes/EmojiPickerCategoryButton.js';\nexport { default as EmojiPickerUpsellCategory } from './classes/EmojiPickerUpsellCategory.js';\nexport { default as AddToPlaylistEndpoint } from './classes/endpoints/AddToPlaylistEndpoint.js';\nexport { default as AddToPlaylistServiceEndpoint } from './classes/endpoints/AddToPlaylistServiceEndpoint.js';\nexport { default as BrowseEndpoint } from './classes/endpoints/BrowseEndpoint.js';\nexport { default as CreateCommentEndpoint } from './classes/endpoints/CreateCommentEndpoint.js';\nexport { default as CreatePlaylistServiceEndpoint } from './classes/endpoints/CreatePlaylistServiceEndpoint.js';\nexport { default as DeletePlaylistEndpoint } from './classes/endpoints/DeletePlaylistEndpoint.js';\nexport { default as FeedbackEndpoint } from './classes/endpoints/FeedbackEndpoint.js';\nexport { default as GetAccountsListInnertubeEndpoint } from './classes/endpoints/GetAccountsListInnertubeEndpoint.js';\nexport { default as HideEngagementPanelEndpoint } from './classes/endpoints/HideEngagementPanelEndpoint.js';\nexport { default as LikeEndpoint } from './classes/endpoints/LikeEndpoint.js';\nexport { default as LiveChatItemContextMenuEndpoint } from './classes/endpoints/LiveChatItemContextMenuEndpoint.js';\nexport { default as ModifyChannelNotificationPreferenceEndpoint } from './classes/endpoints/ModifyChannelNotificationPreferenceEndpoint.js';\nexport { default as PerformCommentActionEndpoint } from './classes/endpoints/PerformCommentActionEndpoint.js';\nexport { default as PlaylistEditEndpoint } from './classes/endpoints/PlaylistEditEndpoint.js';\nexport { default as PrefetchWatchCommand } from './classes/endpoints/PrefetchWatchCommand.js';\nexport { default as ReelWatchEndpoint } from './classes/endpoints/ReelWatchEndpoint.js';\nexport { default as SearchEndpoint } from './classes/endpoints/SearchEndpoint.js';\nexport { default as ShareEndpoint } from './classes/endpoints/ShareEndpoint.js';\nexport { default as ShareEntityEndpoint } from './classes/endpoints/ShareEntityEndpoint.js';\nexport { default as ShareEntityServiceEndpoint } from './classes/endpoints/ShareEntityServiceEndpoint.js';\nexport { default as ShowEngagementPanelEndpoint } from './classes/endpoints/ShowEngagementPanelEndpoint.js';\nexport { default as SignalServiceEndpoint } from './classes/endpoints/SignalServiceEndpoint.js';\nexport { default as SubscribeEndpoint } from './classes/endpoints/SubscribeEndpoint.js';\nexport { default as UnsubscribeEndpoint } from './classes/endpoints/UnsubscribeEndpoint.js';\nexport { default as WatchEndpoint } from './classes/endpoints/WatchEndpoint.js';\nexport { default as WatchNextEndpoint } from './classes/endpoints/WatchNextEndpoint.js';\nexport { default as Endscreen } from './classes/Endscreen.js';\nexport { default as EndscreenElement } from './classes/EndscreenElement.js';\nexport { default as EndScreenPlaylist } from './classes/EndScreenPlaylist.js';\nexport { default as EndScreenVideo } from './classes/EndScreenVideo.js';\nexport { default as EngagementPanelSectionList } from './classes/EngagementPanelSectionList.js';\nexport { default as EngagementPanelTitleHeader } from './classes/EngagementPanelTitleHeader.js';\nexport { default as EomSettingsDisclaimer } from './classes/EomSettingsDisclaimer.js';\nexport { default as ExpandableMetadata } from './classes/ExpandableMetadata.js';\nexport { default as ExpandableTab } from './classes/ExpandableTab.js';\nexport { default as ExpandableVideoDescriptionBody } from './classes/ExpandableVideoDescriptionBody.js';\nexport { default as ExpandedShelfContents } from './classes/ExpandedShelfContents.js';\nexport { default as Factoid } from './classes/Factoid.js';\nexport { default as FancyDismissibleDialog } from './classes/FancyDismissibleDialog.js';\nexport { default as FeedFilterChipBar } from './classes/FeedFilterChipBar.js';\nexport { default as FeedNudge } from './classes/FeedNudge.js';\nexport { default as FeedTabbedHeader } from './classes/FeedTabbedHeader.js';\nexport { default as FlexibleActionsView } from './classes/FlexibleActionsView.js';\nexport { default as FormFooterView } from './classes/FormFooterView.js';\nexport { default as GameCard } from './classes/GameCard.js';\nexport { default as GameDetails } from './classes/GameDetails.js';\nexport { default as Grid } from './classes/Grid.js';\nexport { default as GridChannel } from './classes/GridChannel.js';\nexport { default as GridHeader } from './classes/GridHeader.js';\nexport { default as GridMix } from './classes/GridMix.js';\nexport { default as GridMovie } from './classes/GridMovie.js';\nexport { default as GridPlaylist } from './classes/GridPlaylist.js';\nexport { default as GridShelfView } from './classes/GridShelfView.js';\nexport { default as GridShow } from './classes/GridShow.js';\nexport { default as GridVideo } from './classes/GridVideo.js';\nexport { default as GuideCollapsibleEntry } from './classes/GuideCollapsibleEntry.js';\nexport { default as GuideCollapsibleSectionEntry } from './classes/GuideCollapsibleSectionEntry.js';\nexport { default as GuideDownloadsEntry } from './classes/GuideDownloadsEntry.js';\nexport { default as GuideEntry } from './classes/GuideEntry.js';\nexport { default as GuideSection } from './classes/GuideSection.js';\nexport { default as GuideSubscriptionsSection } from './classes/GuideSubscriptionsSection.js';\nexport { default as HashtagHeader } from './classes/HashtagHeader.js';\nexport { default as HashtagTile } from './classes/HashtagTile.js';\nexport { default as Heatmap } from './classes/Heatmap.js';\nexport { default as HeatMarker } from './classes/HeatMarker.js';\nexport { default as HeroPlaylistThumbnail } from './classes/HeroPlaylistThumbnail.js';\nexport { default as HighlightsCarousel } from './classes/HighlightsCarousel.js';\nexport { default as HistorySuggestion } from './classes/HistorySuggestion.js';\nexport { default as HorizontalCardList } from './classes/HorizontalCardList.js';\nexport { default as HorizontalList } from './classes/HorizontalList.js';\nexport { default as HorizontalMovieList } from './classes/HorizontalMovieList.js';\nexport { default as HowThisWasMadeSectionView } from './classes/HowThisWasMadeSectionView.js';\nexport { default as HypePointsFactoid } from './classes/HypePointsFactoid.js';\nexport { default as IconLink } from './classes/IconLink.js';\nexport { default as ImageBannerView } from './classes/ImageBannerView.js';\nexport { default as IncludingResultsFor } from './classes/IncludingResultsFor.js';\nexport { default as InfoPanelContainer } from './classes/InfoPanelContainer.js';\nexport { default as InfoPanelContent } from './classes/InfoPanelContent.js';\nexport { default as InfoRow } from './classes/InfoRow.js';\nexport { default as InteractiveTabbedHeader } from './classes/InteractiveTabbedHeader.js';\nexport { default as ItemSection } from './classes/ItemSection.js';\nexport { default as ItemSectionHeader } from './classes/ItemSectionHeader.js';\nexport { default as ItemSectionTab } from './classes/ItemSectionTab.js';\nexport { default as ItemSectionTabbedHeader } from './classes/ItemSectionTabbedHeader.js';\nexport { default as LikeButton } from './classes/LikeButton.js';\nexport { default as LikeButtonView } from './classes/LikeButtonView.js';\nexport { default as LiveChat } from './classes/LiveChat.js';\nexport { default as AddBannerToLiveChatCommand } from './classes/livechat/AddBannerToLiveChatCommand.js';\nexport { default as AddChatItemAction } from './classes/livechat/AddChatItemAction.js';\nexport { default as AddLiveChatTickerItemAction } from './classes/livechat/AddLiveChatTickerItemAction.js';\nexport { default as DimChatItemAction } from './classes/livechat/DimChatItemAction.js';\nexport { default as BumperUserEduContentView } from './classes/livechat/items/BumperUserEduContentView.js';\nexport { default as CreatorHeartView } from './classes/livechat/items/CreatorHeartView.js';\nexport { default as LiveChatAutoModMessage } from './classes/livechat/items/LiveChatAutoModMessage.js';\nexport { default as LiveChatBanner } from './classes/livechat/items/LiveChatBanner.js';\nexport { default as LiveChatBannerChatSummary } from './classes/livechat/items/LiveChatBannerChatSummary.js';\nexport { default as LiveChatBannerHeader } from './classes/livechat/items/LiveChatBannerHeader.js';\nexport { default as LiveChatBannerPoll } from './classes/livechat/items/LiveChatBannerPoll.js';\nexport { default as LiveChatBannerRedirect } from './classes/livechat/items/LiveChatBannerRedirect.js';\nexport { default as LiveChatItemBumperView } from './classes/livechat/items/LiveChatItemBumperView.js';\nexport { default as LiveChatMembershipItem } from './classes/livechat/items/LiveChatMembershipItem.js';\nexport { default as LiveChatModeChangeMessage } from './classes/livechat/items/LiveChatModeChangeMessage.js';\nexport { default as LiveChatPaidMessage } from './classes/livechat/items/LiveChatPaidMessage.js';\nexport { default as LiveChatPaidSticker } from './classes/livechat/items/LiveChatPaidSticker.js';\nexport { default as LiveChatPlaceholderItem } from './classes/livechat/items/LiveChatPlaceholderItem.js';\nexport { default as LiveChatProductItem } from './classes/livechat/items/LiveChatProductItem.js';\nexport { default as LiveChatRestrictedParticipation } from './classes/livechat/items/LiveChatRestrictedParticipation.js';\nexport { default as LiveChatSponsorshipsGiftPurchaseAnnouncement } from './classes/livechat/items/LiveChatSponsorshipsGiftPurchaseAnnouncement.js';\nexport { default as LiveChatSponsorshipsGiftRedemptionAnnouncement } from './classes/livechat/items/LiveChatSponsorshipsGiftRedemptionAnnouncement.js';\nexport { default as LiveChatSponsorshipsHeader } from './classes/livechat/items/LiveChatSponsorshipsHeader.js';\nexport { default as LiveChatTextMessage } from './classes/livechat/items/LiveChatTextMessage.js';\nexport { default as LiveChatTickerPaidMessageItem } from './classes/livechat/items/LiveChatTickerPaidMessageItem.js';\nexport { default as LiveChatTickerPaidStickerItem } from './classes/livechat/items/LiveChatTickerPaidStickerItem.js';\nexport { default as LiveChatTickerSponsorItem } from './classes/livechat/items/LiveChatTickerSponsorItem.js';\nexport { default as LiveChatViewerEngagementMessage } from './classes/livechat/items/LiveChatViewerEngagementMessage.js';\nexport { default as PdgReplyButtonView } from './classes/livechat/items/PdgReplyButtonView.js';\nexport { default as PollHeader } from './classes/livechat/items/PollHeader.js';\nexport { default as LiveChatActionPanel } from './classes/livechat/LiveChatActionPanel.js';\nexport { default as MarkChatItemAsDeletedAction } from './classes/livechat/MarkChatItemAsDeletedAction.js';\nexport { default as MarkChatItemsByAuthorAsDeletedAction } from './classes/livechat/MarkChatItemsByAuthorAsDeletedAction.js';\nexport { default as RemoveBannerForLiveChatCommand } from './classes/livechat/RemoveBannerForLiveChatCommand.js';\nexport { default as RemoveChatItemAction } from './classes/livechat/RemoveChatItemAction.js';\nexport { default as RemoveChatItemByAuthorAction } from './classes/livechat/RemoveChatItemByAuthorAction.js';\nexport { default as ReplaceChatItemAction } from './classes/livechat/ReplaceChatItemAction.js';\nexport { default as ReplaceLiveChatAction } from './classes/livechat/ReplaceLiveChatAction.js';\nexport { default as ReplayChatItemAction } from './classes/livechat/ReplayChatItemAction.js';\nexport { default as ShowLiveChatActionPanelAction } from './classes/livechat/ShowLiveChatActionPanelAction.js';\nexport { default as ShowLiveChatDialogAction } from './classes/livechat/ShowLiveChatDialogAction.js';\nexport { default as ShowLiveChatTooltipCommand } from './classes/livechat/ShowLiveChatTooltipCommand.js';\nexport { default as UpdateDateTextAction } from './classes/livechat/UpdateDateTextAction.js';\nexport { default as UpdateDescriptionAction } from './classes/livechat/UpdateDescriptionAction.js';\nexport { default as UpdateLiveChatPollAction } from './classes/livechat/UpdateLiveChatPollAction.js';\nexport { default as UpdateTitleAction } from './classes/livechat/UpdateTitleAction.js';\nexport { default as UpdateToggleButtonTextAction } from './classes/livechat/UpdateToggleButtonTextAction.js';\nexport { default as UpdateViewershipAction } from './classes/livechat/UpdateViewershipAction.js';\nexport { default as LiveChatAuthorBadge } from './classes/LiveChatAuthorBadge.js';\nexport { default as LiveChatDialog } from './classes/LiveChatDialog.js';\nexport { default as LiveChatHeader } from './classes/LiveChatHeader.js';\nexport { default as LiveChatItemList } from './classes/LiveChatItemList.js';\nexport { default as LiveChatMessageInput } from './classes/LiveChatMessageInput.js';\nexport { default as LiveChatParticipant } from './classes/LiveChatParticipant.js';\nexport { default as LiveChatParticipantsList } from './classes/LiveChatParticipantsList.js';\nexport { default as LockupMetadataView } from './classes/LockupMetadataView.js';\nexport { default as LockupView } from './classes/LockupView.js';\nexport { default as MacroMarkersInfoItem } from './classes/MacroMarkersInfoItem.js';\nexport { default as MacroMarkersList } from './classes/MacroMarkersList.js';\nexport { default as MacroMarkersListEntity } from './classes/MacroMarkersListEntity.js';\nexport { default as MacroMarkersListItem } from './classes/MacroMarkersListItem.js';\nexport { default as Menu } from './classes/menus/Menu.js';\nexport { default as MenuFlexibleItem } from './classes/menus/MenuFlexibleItem.js';\nexport { default as MenuNavigationItem } from './classes/menus/MenuNavigationItem.js';\nexport { default as MenuPopup } from './classes/menus/MenuPopup.js';\nexport { default as MenuServiceItem } from './classes/menus/MenuServiceItem.js';\nexport { default as MenuServiceItemDownload } from './classes/menus/MenuServiceItemDownload.js';\nexport { default as MultiPageMenu } from './classes/menus/MultiPageMenu.js';\nexport { default as MultiPageMenuNotificationSection } from './classes/menus/MultiPageMenuNotificationSection.js';\nexport { default as MusicMenuItemDivider } from './classes/menus/MusicMenuItemDivider.js';\nexport { default as MusicMultiSelectMenu } from './classes/menus/MusicMultiSelectMenu.js';\nexport { default as MusicMultiSelectMenuItem } from './classes/menus/MusicMultiSelectMenuItem.js';\nexport { default as SimpleMenuHeader } from './classes/menus/SimpleMenuHeader.js';\nexport { default as MenuTitle } from './classes/MenuTitle.js';\nexport { default as MerchandiseItem } from './classes/MerchandiseItem.js';\nexport { default as MerchandiseShelf } from './classes/MerchandiseShelf.js';\nexport { default as Message } from './classes/Message.js';\nexport { default as MetadataBadge } from './classes/MetadataBadge.js';\nexport { default as MetadataRow } from './classes/MetadataRow.js';\nexport { default as MetadataRowContainer } from './classes/MetadataRowContainer.js';\nexport { default as MetadataRowHeader } from './classes/MetadataRowHeader.js';\nexport { default as MetadataScreen } from './classes/MetadataScreen.js';\nexport { default as MicroformatData } from './classes/MicroformatData.js';\nexport { default as Mix } from './classes/Mix.js';\nexport { default as ModalWithTitleAndButton } from './classes/ModalWithTitleAndButton.js';\nexport { default as Movie } from './classes/Movie.js';\nexport { default as MovingThumbnail } from './classes/MovingThumbnail.js';\nexport { default as MultiMarkersPlayerBar } from './classes/MultiMarkersPlayerBar.js';\nexport { default as MusicCardShelf } from './classes/MusicCardShelf.js';\nexport { default as MusicCardShelfHeaderBasic } from './classes/MusicCardShelfHeaderBasic.js';\nexport { default as MusicCarouselShelf } from './classes/MusicCarouselShelf.js';\nexport { default as MusicCarouselShelfBasicHeader } from './classes/MusicCarouselShelfBasicHeader.js';\nexport { default as MusicDescriptionShelf } from './classes/MusicDescriptionShelf.js';\nexport { default as MusicDetailHeader } from './classes/MusicDetailHeader.js';\nexport { default as MusicDownloadStateBadge } from './classes/MusicDownloadStateBadge.js';\nexport { default as MusicEditablePlaylistDetailHeader } from './classes/MusicEditablePlaylistDetailHeader.js';\nexport { default as MusicElementHeader } from './classes/MusicElementHeader.js';\nexport { default as MusicHeader } from './classes/MusicHeader.js';\nexport { default as MusicImmersiveHeader } from './classes/MusicImmersiveHeader.js';\nexport { default as MusicInlineBadge } from './classes/MusicInlineBadge.js';\nexport { default as MusicItemThumbnailOverlay } from './classes/MusicItemThumbnailOverlay.js';\nexport { default as MusicLargeCardItemCarousel } from './classes/MusicLargeCardItemCarousel.js';\nexport { default as MusicMultiRowListItem } from './classes/MusicMultiRowListItem.js';\nexport { default as MusicNavigationButton } from './classes/MusicNavigationButton.js';\nexport { default as MusicPlayButton } from './classes/MusicPlayButton.js';\nexport { default as MusicPlaylistEditHeader } from './classes/MusicPlaylistEditHeader.js';\nexport { default as MusicPlaylistShelf } from './classes/MusicPlaylistShelf.js';\nexport { default as MusicQueue } from './classes/MusicQueue.js';\nexport { default as MusicResponsiveHeader } from './classes/MusicResponsiveHeader.js';\nexport { default as MusicResponsiveListItem } from './classes/MusicResponsiveListItem.js';\nexport { default as MusicResponsiveListItemFixedColumn } from './classes/MusicResponsiveListItemFixedColumn.js';\nexport { default as MusicResponsiveListItemFlexColumn } from './classes/MusicResponsiveListItemFlexColumn.js';\nexport { default as MusicShelf } from './classes/MusicShelf.js';\nexport { default as MusicSideAlignedItem } from './classes/MusicSideAlignedItem.js';\nexport { default as MusicSortFilterButton } from './classes/MusicSortFilterButton.js';\nexport { default as MusicTastebuilderShelf } from './classes/MusicTastebuilderShelf.js';\nexport { default as MusicTastebuilderShelfThumbnail } from './classes/MusicTastebuilderShelfThumbnail.js';\nexport { default as MusicThumbnail } from './classes/MusicThumbnail.js';\nexport { default as MusicTwoRowItem } from './classes/MusicTwoRowItem.js';\nexport { default as MusicVisualHeader } from './classes/MusicVisualHeader.js';\nexport { default as MobileTopbar } from './classes/mweb/MobileTopbar.js';\nexport { default as MultiPageMenuSection } from './classes/mweb/MultiPageMenuSection.js';\nexport { default as PivotBar } from './classes/mweb/PivotBar.js';\nexport { default as PivotBarItem } from './classes/mweb/PivotBarItem.js';\nexport { default as TopbarMenuButton } from './classes/mweb/TopbarMenuButton.js';\nexport { default as NavigationEndpoint } from './classes/NavigationEndpoint.js';\nexport { default as Notification } from './classes/Notification.js';\nexport { default as NotificationAction } from './classes/NotificationAction.js';\nexport { default as OpenOnePickAddVideoModalCommand } from './classes/OpenOnePickAddVideoModalCommand.js';\nexport { default as PageHeader } from './classes/PageHeader.js';\nexport { default as PageHeaderView } from './classes/PageHeaderView.js';\nexport { default as PageIntroduction } from './classes/PageIntroduction.js';\nexport { default as PanelFooterView } from './classes/PanelFooterView.js';\nexport { default as PivotButton } from './classes/PivotButton.js';\nexport { default as PlayerAnnotationsExpanded } from './classes/PlayerAnnotationsExpanded.js';\nexport { default as PlayerCaptionsTracklist } from './classes/PlayerCaptionsTracklist.js';\nexport { default as PlayerControlsOverlay } from './classes/PlayerControlsOverlay.js';\nexport { default as PlayerErrorMessage } from './classes/PlayerErrorMessage.js';\nexport { default as PlayerLegacyDesktopYpcOffer } from './classes/PlayerLegacyDesktopYpcOffer.js';\nexport { default as PlayerLegacyDesktopYpcTrailer } from './classes/PlayerLegacyDesktopYpcTrailer.js';\nexport { default as PlayerLiveStoryboardSpec } from './classes/PlayerLiveStoryboardSpec.js';\nexport { default as PlayerMicroformat } from './classes/PlayerMicroformat.js';\nexport { default as PlayerOverflow } from './classes/PlayerOverflow.js';\nexport { default as PlayerOverlay } from './classes/PlayerOverlay.js';\nexport { default as PlayerOverlayAutoplay } from './classes/PlayerOverlayAutoplay.js';\nexport { default as PlayerOverlayVideoDetails } from './classes/PlayerOverlayVideoDetails.js';\nexport { default as PlayerStoryboardSpec } from './classes/PlayerStoryboardSpec.js';\nexport { default as Playlist } from './classes/Playlist.js';\nexport { default as PlaylistAddToOption } from './classes/PlaylistAddToOption.js';\nexport { default as PlaylistCustomThumbnail } from './classes/PlaylistCustomThumbnail.js';\nexport { default as PlaylistHeader } from './classes/PlaylistHeader.js';\nexport { default as PlaylistInfoCardContent } from './classes/PlaylistInfoCardContent.js';\nexport { default as PlaylistMetadata } from './classes/PlaylistMetadata.js';\nexport { default as PlaylistPanel } from './classes/PlaylistPanel.js';\nexport { default as PlaylistPanelVideo } from './classes/PlaylistPanelVideo.js';\nexport { default as PlaylistPanelVideoWrapper } from './classes/PlaylistPanelVideoWrapper.js';\nexport { default as PlaylistSidebar } from './classes/PlaylistSidebar.js';\nexport { default as PlaylistSidebarPrimaryInfo } from './classes/PlaylistSidebarPrimaryInfo.js';\nexport { default as PlaylistSidebarSecondaryInfo } from './classes/PlaylistSidebarSecondaryInfo.js';\nexport { default as PlaylistThumbnailOverlay } from './classes/PlaylistThumbnailOverlay.js';\nexport { default as PlaylistVideo } from './classes/PlaylistVideo.js';\nexport { default as PlaylistVideoList } from './classes/PlaylistVideoList.js';\nexport { default as PlaylistVideoThumbnail } from './classes/PlaylistVideoThumbnail.js';\nexport { default as Poll } from './classes/Poll.js';\nexport { default as Post } from './classes/Post.js';\nexport { default as PostMultiImage } from './classes/PostMultiImage.js';\nexport { default as PremiereTrailerBadge } from './classes/PremiereTrailerBadge.js';\nexport { default as ProductList } from './classes/ProductList.js';\nexport { default as ProductListHeader } from './classes/ProductListHeader.js';\nexport { default as ProductListItem } from './classes/ProductListItem.js';\nexport { default as ProfileColumn } from './classes/ProfileColumn.js';\nexport { default as ProfileColumnStats } from './classes/ProfileColumnStats.js';\nexport { default as ProfileColumnStatsEntry } from './classes/ProfileColumnStatsEntry.js';\nexport { default as ProfileColumnUserInfo } from './classes/ProfileColumnUserInfo.js';\nexport { default as Quiz } from './classes/Quiz.js';\nexport { default as RecognitionShelf } from './classes/RecognitionShelf.js';\nexport { default as ReelItem } from './classes/ReelItem.js';\nexport { default as ReelPlayerHeader } from './classes/ReelPlayerHeader.js';\nexport { default as ReelPlayerOverlay } from './classes/ReelPlayerOverlay.js';\nexport { default as ReelShelf } from './classes/ReelShelf.js';\nexport { default as RelatedChipCloud } from './classes/RelatedChipCloud.js';\nexport { default as RichGrid } from './classes/RichGrid.js';\nexport { default as RichItem } from './classes/RichItem.js';\nexport { default as RichListHeader } from './classes/RichListHeader.js';\nexport { default as RichMetadata } from './classes/RichMetadata.js';\nexport { default as RichMetadataRow } from './classes/RichMetadataRow.js';\nexport { default as RichSection } from './classes/RichSection.js';\nexport { default as RichShelf } from './classes/RichShelf.js';\nexport { default as SearchBox } from './classes/SearchBox.js';\nexport { default as SearchFilter } from './classes/SearchFilter.js';\nexport { default as SearchFilterGroup } from './classes/SearchFilterGroup.js';\nexport { default as SearchFilterOptionsDialog } from './classes/SearchFilterOptionsDialog.js';\nexport { default as SearchHeader } from './classes/SearchHeader.js';\nexport { default as SearchRefinementCard } from './classes/SearchRefinementCard.js';\nexport { default as SearchSubMenu } from './classes/SearchSubMenu.js';\nexport { default as SearchSuggestion } from './classes/SearchSuggestion.js';\nexport { default as SearchSuggestionsSection } from './classes/SearchSuggestionsSection.js';\nexport { default as SecondarySearchContainer } from './classes/SecondarySearchContainer.js';\nexport { default as SectionHeaderView } from './classes/SectionHeaderView.js';\nexport { default as SectionList } from './classes/SectionList.js';\nexport { default as SegmentedLikeDislikeButton } from './classes/SegmentedLikeDislikeButton.js';\nexport { default as SegmentedLikeDislikeButtonView } from './classes/SegmentedLikeDislikeButtonView.js';\nexport { default as SettingBoolean } from './classes/SettingBoolean.js';\nexport { default as SettingsCheckbox } from './classes/SettingsCheckbox.js';\nexport { default as SettingsOptions } from './classes/SettingsOptions.js';\nexport { default as SettingsSidebar } from './classes/SettingsSidebar.js';\nexport { default as SettingsSwitch } from './classes/SettingsSwitch.js';\nexport { default as SharedPost } from './classes/SharedPost.js';\nexport { default as SharePanelHeader } from './classes/SharePanelHeader.js';\nexport { default as SharePanelTitleV15 } from './classes/SharePanelTitleV15.js';\nexport { default as ShareTarget } from './classes/ShareTarget.js';\nexport { default as Shelf } from './classes/Shelf.js';\nexport { default as ShortsLockupView } from './classes/ShortsLockupView.js';\nexport { default as ShowCustomThumbnail } from './classes/ShowCustomThumbnail.js';\nexport { default as ShowingResultsFor } from './classes/ShowingResultsFor.js';\nexport { default as SimpleCardContent } from './classes/SimpleCardContent.js';\nexport { default as SimpleCardTeaser } from './classes/SimpleCardTeaser.js';\nexport { default as SimpleTextSection } from './classes/SimpleTextSection.js';\nexport { default as SingleActionEmergencySupport } from './classes/SingleActionEmergencySupport.js';\nexport { default as SingleColumnBrowseResults } from './classes/SingleColumnBrowseResults.js';\nexport { default as SingleColumnMusicWatchNextResults } from './classes/SingleColumnMusicWatchNextResults.js';\nexport { default as SingleHeroImage } from './classes/SingleHeroImage.js';\nexport { default as SlimOwner } from './classes/SlimOwner.js';\nexport { default as SlimVideoMetadata } from './classes/SlimVideoMetadata.js';\nexport { default as SortFilterHeader } from './classes/SortFilterHeader.js';\nexport { default as SortFilterSubMenu } from './classes/SortFilterSubMenu.js';\nexport { default as StartAt } from './classes/StartAt.js';\nexport { default as StructuredDescriptionContent } from './classes/StructuredDescriptionContent.js';\nexport { default as StructuredDescriptionPlaylistLockup } from './classes/StructuredDescriptionPlaylistLockup.js';\nexport { default as SubFeedOption } from './classes/SubFeedOption.js';\nexport { default as SubFeedSelector } from './classes/SubFeedSelector.js';\nexport { default as SubscribeButton } from './classes/SubscribeButton.js';\nexport { default as SubscriptionNotificationToggleButton } from './classes/SubscriptionNotificationToggleButton.js';\nexport { default as Tab } from './classes/Tab.js';\nexport { default as Tabbed } from './classes/Tabbed.js';\nexport { default as TabbedSearchResults } from './classes/TabbedSearchResults.js';\nexport { default as TextCarouselItemView } from './classes/TextCarouselItemView.js';\nexport { default as TextFieldView } from './classes/TextFieldView.js';\nexport { default as TextHeader } from './classes/TextHeader.js';\nexport { default as ThirdPartyShareTargetSection } from './classes/ThirdPartyShareTargetSection.js';\nexport { default as ThumbnailBadgeView } from './classes/ThumbnailBadgeView.js';\nexport { default as ThumbnailBottomOverlayView } from './classes/ThumbnailBottomOverlayView.js';\nexport { default as ThumbnailHoverOverlayToggleActionsView } from './classes/ThumbnailHoverOverlayToggleActionsView.js';\nexport { default as ThumbnailHoverOverlayView } from './classes/ThumbnailHoverOverlayView.js';\nexport { default as ThumbnailLandscapePortrait } from './classes/ThumbnailLandscapePortrait.js';\nexport { default as ThumbnailOverlayBadgeView } from './classes/ThumbnailOverlayBadgeView.js';\nexport { default as ThumbnailOverlayBottomPanel } from './classes/ThumbnailOverlayBottomPanel.js';\nexport { default as ThumbnailOverlayEndorsement } from './classes/ThumbnailOverlayEndorsement.js';\nexport { default as ThumbnailOverlayHoverText } from './classes/ThumbnailOverlayHoverText.js';\nexport { default as ThumbnailOverlayInlineUnplayable } from './classes/ThumbnailOverlayInlineUnplayable.js';\nexport { default as ThumbnailOverlayLoadingPreview } from './classes/ThumbnailOverlayLoadingPreview.js';\nexport { default as ThumbnailOverlayNowPlaying } from './classes/ThumbnailOverlayNowPlaying.js';\nexport { default as ThumbnailOverlayPinking } from './classes/ThumbnailOverlayPinking.js';\nexport { default as ThumbnailOverlayPlaybackStatus } from './classes/ThumbnailOverlayPlaybackStatus.js';\nexport { default as ThumbnailOverlayProgressBarView } from './classes/ThumbnailOverlayProgressBarView.js';\nexport { default as ThumbnailOverlayResumePlayback } from './classes/ThumbnailOverlayResumePlayback.js';\nexport { default as ThumbnailOverlaySidePanel } from './classes/ThumbnailOverlaySidePanel.js';\nexport { default as ThumbnailOverlayTimeStatus } from './classes/ThumbnailOverlayTimeStatus.js';\nexport { default as ThumbnailOverlayToggleButton } from './classes/ThumbnailOverlayToggleButton.js';\nexport { default as ThumbnailView } from './classes/ThumbnailView.js';\nexport { default as TimedMarkerDecoration } from './classes/TimedMarkerDecoration.js';\nexport { default as TitleAndButtonListHeader } from './classes/TitleAndButtonListHeader.js';\nexport { default as ToggleButton } from './classes/ToggleButton.js';\nexport { default as ToggleButtonView } from './classes/ToggleButtonView.js';\nexport { default as ToggleFormField } from './classes/ToggleFormField.js';\nexport { default as ToggleMenuServiceItem } from './classes/ToggleMenuServiceItem.js';\nexport { default as Tooltip } from './classes/Tooltip.js';\nexport { default as TopicChannelDetails } from './classes/TopicChannelDetails.js';\nexport { default as Transcript } from './classes/Transcript.js';\nexport { default as TranscriptFooter } from './classes/TranscriptFooter.js';\nexport { default as TranscriptSearchBox } from './classes/TranscriptSearchBox.js';\nexport { default as TranscriptSearchPanel } from './classes/TranscriptSearchPanel.js';\nexport { default as TranscriptSectionHeader } from './classes/TranscriptSectionHeader.js';\nexport { default as TranscriptSegment } from './classes/TranscriptSegment.js';\nexport { default as TranscriptSegmentList } from './classes/TranscriptSegmentList.js';\nexport { default as TwoColumnBrowseResults } from './classes/TwoColumnBrowseResults.js';\nexport { default as TwoColumnSearchResults } from './classes/TwoColumnSearchResults.js';\nexport { default as TwoColumnWatchNextResults } from './classes/TwoColumnWatchNextResults.js';\nexport { default as UnifiedSharePanel } from './classes/UnifiedSharePanel.js';\nexport { default as UniversalWatchCard } from './classes/UniversalWatchCard.js';\nexport { default as UploadTimeFactoid } from './classes/UploadTimeFactoid.js';\nexport { default as UpsellDialog } from './classes/UpsellDialog.js';\nexport { default as VerticalList } from './classes/VerticalList.js';\nexport { default as VerticalWatchCardList } from './classes/VerticalWatchCardList.js';\nexport { default as Video } from './classes/Video.js';\nexport { default as VideoAttributesSectionView } from './classes/VideoAttributesSectionView.js';\nexport { default as VideoAttributeView } from './classes/VideoAttributeView.js';\nexport { default as VideoCard } from './classes/VideoCard.js';\nexport { default as VideoDescriptionCourseSection } from './classes/VideoDescriptionCourseSection.js';\nexport { default as VideoDescriptionHeader } from './classes/VideoDescriptionHeader.js';\nexport { default as VideoDescriptionInfocardsSection } from './classes/VideoDescriptionInfocardsSection.js';\nexport { default as VideoDescriptionMusicSection } from './classes/VideoDescriptionMusicSection.js';\nexport { default as VideoDescriptionTranscriptSection } from './classes/VideoDescriptionTranscriptSection.js';\nexport { default as VideoInfoCardContent } from './classes/VideoInfoCardContent.js';\nexport { default as VideoMetadataCarouselView } from './classes/VideoMetadataCarouselView.js';\nexport { default as VideoOwner } from './classes/VideoOwner.js';\nexport { default as VideoPrimaryInfo } from './classes/VideoPrimaryInfo.js';\nexport { default as VideoSecondaryInfo } from './classes/VideoSecondaryInfo.js';\nexport { default as VideoViewCount } from './classes/VideoViewCount.js';\nexport { default as ViewCountFactoid } from './classes/ViewCountFactoid.js';\nexport { default as WatchCardCompactVideo } from './classes/WatchCardCompactVideo.js';\nexport { default as WatchCardHeroVideo } from './classes/WatchCardHeroVideo.js';\nexport { default as WatchCardRichHeader } from './classes/WatchCardRichHeader.js';\nexport { default as WatchCardSectionSequence } from './classes/WatchCardSectionSequence.js';\nexport { default as WatchNextEndScreen } from './classes/WatchNextEndScreen.js';\nexport { default as WatchNextTabbedResults } from './classes/WatchNextTabbedResults.js';\nexport { default as YpcTrailer } from './classes/YpcTrailer.js';\nexport { default as AnchoredSection } from './classes/ytkids/AnchoredSection.js';\nexport { default as KidsBlocklistPicker } from './classes/ytkids/KidsBlocklistPicker.js';\nexport { default as KidsBlocklistPickerItem } from './classes/ytkids/KidsBlocklistPickerItem.js';\nexport { default as KidsCategoriesHeader } from './classes/ytkids/KidsCategoriesHeader.js';\nexport { default as KidsCategoryTab } from './classes/ytkids/KidsCategoryTab.js';\nexport { default as KidsHomeScreen } from './classes/ytkids/KidsHomeScreen.js';\n", "import type { ICache } from '../types/Cache.js';\nimport { Platform } from './Utils.js';\n\nexport default class UniversalCache implements ICache {\n  #cache: ICache;\n  constructor(persistent: boolean, persistent_directory?: string) {\n    this.#cache = new Platform.shim.Cache(persistent, persistent_directory);\n  }\n  get cache_dir() {\n    return this.#cache.cache_dir;\n  }\n  get(key: string) {\n    return this.#cache.get(key);\n  }\n  set(key: string, value: ArrayBuffer) {\n    return this.#cache.set(key, value);\n  }\n  remove(key: string) {\n    return this.#cache.remove(key);\n  }\n}", "import { Platform } from './Utils.js';\n\nexport default class EventEmitterLike extends EventTarget {\n  #legacy_listeners = new Map<(...args: any[]) => void, EventListener>();\n\n  constructor() {\n    super();\n  }\n\n  emit(type: string, ...args: any[]) {\n    const event = new Platform.shim.CustomEvent(type, { detail: args });\n    this.dispatchEvent(event);\n  }\n\n  on(type: string, listener: (...args: any[]) => void) {\n    const wrapper: EventListener = (ev) => {\n      if (ev instanceof Platform.shim.CustomEvent) {\n        listener(...ev.detail);\n      } else {\n        listener(ev);\n      }\n    };\n    this.#legacy_listeners.set(listener, wrapper);\n    this.addEventListener(type, wrapper);\n  }\n\n  once(type: string, listener: (...args: any[]) => void) {\n    const wrapper: EventListener = (ev) => {\n      if (ev instanceof Platform.shim.CustomEvent) {\n        listener(...ev.detail);\n      } else {\n        listener(ev);\n      }\n      this.off(type, listener);\n    };\n    this.#legacy_listeners.set(listener, wrapper);\n    this.addEventListener(type, wrapper);\n  }\n\n  off(type: string, listener: (...args: any[]) => void) {\n    const wrapper = this.#legacy_listeners.get(listener);\n    if (wrapper) {\n      this.removeEventListener(type, wrapper);\n      this.#legacy_listeners.delete(listener);\n    }\n  }\n}", "import * as Constants from './Constants.js';\nimport { InnertubeError, Platform, streamToIterable } from './Utils.js';\n\nimport type Player from '../core/Player.js';\nimport type Actions from '../core/Actions.js';\nimport type Format from '../parser/classes/misc/Format.js';\nimport type { IPlayabilityStatus, IStreamingData } from '../parser/index.js';\nimport type { DownloadOptions, FormatOptions } from '../types/index.js';\n\nexport async function download(\n  options: DownloadOptions,\n  actions: Actions,\n  playability_status?: IPlayabilityStatus,\n  streaming_data?: IStreamingData,\n  player?: Player,\n  cpn?: string\n): Promise<ReadableStream<Uint8Array>> {\n  if (playability_status?.status === 'UNPLAYABLE')\n    throw new InnertubeError('Video is unplayable', { error_type: 'UNPLAYABLE' });\n  if (playability_status?.status === 'LOGIN_REQUIRED')\n    throw new InnertubeError('Video is login required', { error_type: 'LOGIN_REQUIRED' });\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available.', { error_type: 'NO_STREAMING_DATA' });\n\n  const opts: DownloadOptions = {\n    quality: '360p',\n    type: 'video+audio',\n    format: 'mp4',\n    range: undefined,\n    ...options\n  };\n\n  const format = chooseFormat(opts, streaming_data);\n  const format_url = format.decipher(player);\n\n  // If we're not downloading the video in chunks, we just use fetch once.\n  if (opts.type === 'video+audio' && !options.range) {\n    const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}`, {\n      method: 'GET',\n      headers: Constants.STREAM_HEADERS,\n      redirect: 'follow'\n    });\n\n    // Throw if the response is not 2xx\n    if (!response.ok)\n      throw new InnertubeError('The server responded with a non 2xx status code', { error_type: 'FETCH_FAILED', response });\n\n    const body = response.body;\n\n    if (!body)\n      throw new InnertubeError('Could not get ReadableStream from fetch Response.', { error_type: 'FETCH_FAILED', response });\n\n    return body;\n  }\n\n  // We need to download in chunks.\n\n  const chunk_size = 1048576 * 10; // 10MB\n\n  let chunk_start = (options.range ? options.range.start : 0);\n  let chunk_end = (options.range ? options.range.end : chunk_size);\n  let must_end = false;\n\n  let cancel: AbortController;\n\n  return new Platform.shim.ReadableStream<Uint8Array>({\n    start() {\n    },\n    pull: async (controller) => {\n      if (must_end) {\n        controller.close();\n        return;\n      }\n\n      if ((chunk_end >= (format.content_length ? format.content_length : 0)) || options.range) {\n        must_end = true;\n      }\n\n      return new Promise(async (resolve, reject) => {\n        try {\n          cancel = new AbortController();\n\n          const response = await actions.session.http.fetch_function(`${format_url}&cpn=${cpn}&range=${chunk_start}-${chunk_end || ''}`, {\n            method: 'GET',\n            headers: {\n              ...Constants.STREAM_HEADERS\n              // XXX: use YouTube's range parameter instead of a Range header.\n              // Range: `bytes=${chunk_start}-${chunk_end}`\n            },\n            signal: cancel.signal\n          });\n\n          // Throw if the response is not 2xx\n          if (!response.ok)\n            throw new InnertubeError('The server responded with a non 2xx status code', {\n              error_type: 'FETCH_FAILED',\n              response\n            });\n\n          const body = response.body;\n\n          if (!body)\n            throw new InnertubeError('Could not get ReadableStream from fetch Response.', {\n              error_type: 'FETCH_FAILED',\n              response\n            });\n\n          for await (const chunk of streamToIterable(body)) {\n            controller.enqueue(chunk);\n          }\n\n          chunk_start = chunk_end + 1;\n          chunk_end += chunk_size;\n\n          resolve();\n\n        } catch (e: any) {\n          reject(e);\n        }\n      });\n    },\n    async cancel(reason) {\n      cancel.abort(reason);\n    }\n  }, {\n    highWaterMark: 1, // TODO: better value?\n    size(chunk) {\n      return chunk.byteLength;\n    }\n  });\n}\n\n/**\n * Selects the format that best matches the given options.\n * @param options - Options\n * @param streaming_data - Streaming data\n */\nexport function chooseFormat(options: FormatOptions, streaming_data?: IStreamingData): Format {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  const formats = [\n    ...(streaming_data.formats || []),\n    ...(streaming_data.adaptive_formats || [])\n  ];\n  \n  if (options.itag) {\n    const candidates = formats.filter((format) => format.itag === options.itag);\n    if (!candidates.length)\n      throw new InnertubeError('No matching formats found', { options });\n    \n    return candidates[0];\n  }\n\n  const requires_audio = options.type ? options.type.includes('audio') : true;\n  const requires_video = options.type ? options.type.includes('video') : true;\n  const language = options.language || 'original';\n  const quality = options.quality || 'best';\n\n  let best_width = -1;\n\n  const is_best = [ 'best', 'bestefficiency' ].includes(quality);\n  const use_most_efficient = quality !== 'best';\n\n  let candidates = formats.filter((format) => {\n    if (requires_audio && !format.has_audio)\n      return false;\n    if (requires_video && !format.has_video)\n      return false;\n    if (options.codec && !format.mime_type.includes(options.codec))\n      return false;\n    if (options.format !== 'any' && !format.mime_type.includes(options.format || 'mp4'))\n      return false;\n    if (!is_best && format.quality_label !== quality)\n      return false;\n    if (format.width && (best_width < format.width))\n      best_width = format.width;\n    return true;\n  });\n\n  if (!candidates.length)\n    throw new InnertubeError('No matching formats found', { options });\n\n  if (is_best && requires_video)\n    candidates = candidates.filter((format) => format.width === best_width);\n\n  if (requires_audio && !requires_video) {\n    const audio_only = candidates.filter((format) => {\n      if (language !== 'original') {\n        return !format.has_video && !format.has_text && format.language === language;\n      }\n      return !format.has_video && !format.has_text && format.is_original;\n\n    });\n    if (audio_only.length > 0) {\n      candidates = audio_only;\n    }\n  }\n\n  if (use_most_efficient) {\n    // Sort by bitrate (lower is better)\n    candidates.sort((a, b) => a.bitrate - b.bitrate);\n  } else {\n    // Sort by bitrate (higher is better)\n    candidates.sort((a, b) => b.bitrate - a.bitrate);\n  }\n\n  return candidates[0];\n}\n\nexport { toDash } from './DashManifest.js';\n", "/* eslint-disable @typescript-eslint/no-namespace */\ndeclare global {\n  namespace JSX {\n    interface IntrinsicElements {\n      [key: string]: DashProps;\n    }\n  }\n}\n\nexport type DashChild = (DashNode | (DashNode | Promise<DashNode | DashNode[]>) | Promise<DashNode | DashNode[]>);\nexport interface DashProps {\n    [key: string]: unknown,\n    children?: DashChild[]\n}\n\nexport interface DashNode {\n    type: string,\n    props: DashProps,\n}\n\nconst XML_CHARACTER_MAP = {\n  '&': '&amp;',\n  '\"': '&quot;',\n  '\\'': '&apos;',\n  '<': '&lt;',\n  '>': '&gt;'\n} as const;\n\nfunction escapeXMLString(str: string) {\n  return str.replace(/([&\"<>'])/g, (_, item: keyof typeof XML_CHARACTER_MAP) => {\n    return XML_CHARACTER_MAP[item];\n  });\n}\n\nfunction normalizeTag(tag: string) {\n  return tag.charAt(0).toUpperCase() + tag.slice(1);\n}\n\nexport function createElement(\n  tagNameOrFunction: string | ((props: DashProps) => DashNode | Promise<DashNode>),\n  props: { [key: string] : unknown } | null | undefined,\n  ...children: DashChild[]\n): DashNode | Promise<DashNode> {\n  const normalizedChildren = children.flat();\n\n  if (typeof tagNameOrFunction === 'function') {\n    return tagNameOrFunction({ ...props, children: normalizedChildren });\n  }\n\n  return {\n    type: normalizeTag(tagNameOrFunction),\n    props: {\n      ...props,\n      children: normalizedChildren\n    }\n  };\n}\n\nexport async function renderElementToString(element: DashNode | string): Promise<string> {\n  if (typeof element === 'string')\n    return escapeXMLString(element);\n\n  let dom = `<${element.type}`;\n\n  if (element.props) {\n    for (const key of Object.keys(element.props)) {\n      if (key !== 'children' && element.props[key] !== undefined) {\n        dom += ` ${key}=\"${escapeXMLString(`${element.props[key]}`)}\"`;\n      }\n    }\n  }\n\n  if (element.props.children) {\n    const children = await Promise.all((await Promise.all(element.props.children.flat())).flat().filter((child) => !!child).map((child) => renderElementToString(child)));\n    if (children.length > 0) {\n      dom += `>${children.join('')}</${element.type}>`;\n      return dom;\n    }\n  }\n\n  return `${dom}/>`;\n}\n\nexport async function renderToString(root: DashNode | Promise<DashNode>) {\n  const dom = await renderElementToString(await root);\n\n  return `<?xml version=\"1.0\" encoding=\"utf-8\"?>${dom}`;\n}\n\nexport function Fragment(props: DashProps) {\n  return props.children;\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface StoryboardData {\n  type: 'vod'\n  template_url: string;\n  thumbnail_width: number;\n  thumbnail_height: number;\n  thumbnail_count: number;\n  interval: number;\n  columns: number;\n  rows: number;\n  storyboard_count: number;\n}\n\nexport default class PlayerStoryboardSpec extends YTNode {\n  static type = 'PlayerStoryboardSpec';\n\n  boards: StoryboardData[];\n\n  constructor(data: RawNode) {\n    super();\n\n    const parts = data.spec.split('|');\n    const url = new URL(parts.shift());\n\n    this.boards = parts.map((part: any, i: any) => {\n      const [ thumbnail_width, thumbnail_height, thumbnail_count, columns, rows, interval, name, sigh ] = part.split('#');\n\n      url.searchParams.set('sigh', sigh);\n\n      const storyboard_count = Math.ceil(parseInt(thumbnail_count, 10) / (parseInt(columns, 10) * parseInt(rows, 10)));\n\n      return {\n        type: 'vod',\n        template_url: url.toString().replace('$L', i).replace('$N', name),\n        thumbnail_width: parseInt(thumbnail_width, 10),\n        thumbnail_height: parseInt(thumbnail_height, 10),\n        thumbnail_count: parseInt(thumbnail_count, 10),\n        interval: parseInt(interval, 10),\n        columns: parseInt(columns, 10),\n        rows: parseInt(rows, 10),\n        storyboard_count\n      };\n    });\n  }\n}", "import type { StoryboardData } from '../parser/classes/PlayerStoryboardSpec.js';\nimport PlayerStoryboardSpec from '../parser/classes/PlayerStoryboardSpec.js';\nimport { getStringBetweenStrings, InnertubeError, Platform } from './Utils.js';\nimport * as Constants from './Constants.js';\nimport * as Log from './Log.js';\n\nimport type Actions from '../core/Actions.js';\nimport type Player from '../core/Player.js';\nimport type { LiveStoryboardData } from '../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type { IStreamingData } from '../parser/index.js';\nimport type { Format } from '../parser/misc.js';\nimport type { PlayerLiveStoryboardSpec } from '../parser/nodes.js';\nimport type { FormatFilter, URLTransformer } from '../types/index.js';\nimport type { StreamingInfoOptions } from '../types/StreamingInfoOptions.js';\nimport type { CaptionTrackData } from '../parser/classes/PlayerCaptionsTracklist.js';\n\nconst TAG_ = 'StreamingInfo';\n\nexport interface StreamingInfo {\n  getDuration(): Promise<number>;\n  audio_sets: AudioSet[];\n  video_sets: VideoSet[];\n  image_sets: ImageSet[];\n  text_sets: TextSet[];\n}\n\nexport interface AudioSet {\n  mime_type: string;\n  language?: string;\n  codecs?: string;\n  audio_sample_rate?: number;\n  track_name?: string;\n  track_roles?: ('main' | 'dub' | 'description' | 'enhanced-audio-intelligibility' | 'alternate')[];\n  channels?: number;\n  drm_families?: string[];\n  drm_track_type?: string;\n  representations: AudioRepresentation[];\n}\n\nexport interface Range {\n  start: number;\n  end: number;\n}\n\nexport type SegmentInfo = {\n  is_oft: false,\n  is_post_live_dvr: false\n  base_url: string;\n  index_range: Range;\n  init_range: Range;\n} | {\n  is_oft: true,\n  is_post_live_dvr: false\n  getSegmentTemplate(): Promise<SegmentTemplate>\n} | {\n  is_oft: false,\n  is_post_live_dvr: true,\n  getSegmentTemplate(): Promise<SegmentTemplate>\n}\n\nexport interface Segment {\n  duration: number,\n  repeat_count?: number\n}\n\nexport interface SegmentTemplate {\n  init_url?: string,\n  media_url: string,\n  timeline: Segment[]\n}\n\nexport interface AudioRepresentation {\n  uid: string;\n  bitrate: number;\n  codecs?: string;\n  audio_sample_rate?: number;\n  channels?: number;\n  segment_info: SegmentInfo;\n}\n\nexport interface VideoSet {\n  mime_type: string;\n  color_info: ColorInfo;\n  codecs?: string;\n  fps?: number;\n  drm_families?: string[];\n  drm_track_type?: string;\n  representations: VideoRepresentation[]\n}\n\nexport interface VideoRepresentation {\n  uid: string;\n  bitrate: number;\n  width?: number;\n  height?: number;\n  fps?: number;\n  codecs?: string;\n  segment_info: SegmentInfo;\n}\n\nexport interface ColorInfo {\n  primaries?: '1' | '9',\n  transfer_characteristics?: '1' | '14' | '16' | '18',\n  matrix_coefficients?: '1' | '14'\n}\n\nexport interface ImageSet {\n  probable_mime_type: string;\n  /**\n   * Sometimes YouTube returns webp instead of jpg despite the file extension being jpg\n   * So we need to update the mime type to reflect the actual mime type of the response\n   */\n  getMimeType(): Promise<string>;\n  representations: ImageRepresentation[]\n}\n\nexport interface ImageRepresentation {\n  uid: string;\n  getBitrate(): Promise<number>;\n  sheet_width: number;\n  sheet_height: number;\n  thumbnail_width: number;\n  thumbnail_height: number;\n  rows: number;\n  columns: number;\n  template_url: string;\n  template_duration: number;\n  getURL(n: number): string;\n}\n\nexport interface TextSet {\n  mime_type: string;\n  language: string;\n  track_name: string;\n  track_roles: ('caption' | 'dub')[];\n  representation: TextRepresentation;\n}\n\nexport interface TextRepresentation {\n  uid: string;\n  base_url: string;\n}\n\ninterface PostLiveDvrInfo {\n  duration: number,\n  segment_count: number\n}\n\ninterface SharedPostLiveDvrInfo {\n  item?: PostLiveDvrInfo\n}\n\ninterface DrcLabels {\n  label_original: string;\n  label_drc: string;\n  label_drc_multiple: (audio_track_display_name: string) => string;\n}\n\nfunction getFormatGroupings(formats: Format[], is_post_live_dvr: boolean) {\n  const group_info = new Map<string, Format[]>();\n\n  const has_multiple_audio_tracks = formats.some((fmt) => !!fmt.audio_track);\n\n  for (const format of formats) {\n    if ((!format.index_range || !format.init_range) && !format.is_type_otf && !is_post_live_dvr) {\n      continue;\n    }\n    const mime_type = format.mime_type.split(';')[0];\n\n    // Codec without any profile or level information\n    const just_codec = getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"')?.split('.')[0];\n\n    // HDR videos have both SDR and HDR vp9 formats, so we want to stick them in different groups\n    const color_info = format.color_info ? Object.values(format.color_info).join('-') : '';\n\n    const audio_track_id = format.audio_track?.id || '';\n\n    const drc = format.is_drc ? 'drc' : '';\n\n    const group_id = `${mime_type}-${just_codec}-${color_info}-${audio_track_id}-${drc}`;\n\n    if (!group_info.has(group_id)) {\n      group_info.set(group_id, []);\n    }\n    group_info.get(group_id)?.push(format);\n  }\n\n  return {\n    groups: Array.from(group_info.values()),\n    has_multiple_audio_tracks\n  };\n}\n\nfunction hoistCodecsIfPossible(formats: Format[], hoisted: string[]) {\n  if (\n    formats.length > 1 &&\n    new Set(formats.map((format) => getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"'))).size === 1\n  ) {\n    hoisted.push('codecs');\n    return getStringBetweenStrings(formats[0].mime_type, 'codecs=\"', '\"');\n  }\n}\n\nfunction hoistNumberAttributeIfPossible(\n  formats: Format[],\n  property: 'audio_sample_rate' | 'fps',\n  hoisted: string[]\n) {\n  if (formats.length > 1 && new Set(formats.map((format) => format.fps)).size === 1) {\n    hoisted.push(property);\n    return Number(formats[0][property]);\n  }\n}\n\nfunction hoistAudioChannelsIfPossible(formats: Format[], hoisted: string[]) {\n  if (formats.length > 1 && new Set(formats.map((format) => format.audio_channels || 2)).size === 1) {\n    hoisted.push('AudioChannelConfiguration');\n    return formats[0].audio_channels;\n  }\n}\n\nasync function getOTFSegmentTemplate(url: string, actions: Actions): Promise<SegmentTemplate> {\n  // Fetch the first segment as it contains the segment durations which we need to generate the manifest\n  const response = await actions.session.http.fetch_function(`${url}&rn=0&sq=0`, {\n    method: 'GET',\n    headers: Constants.STREAM_HEADERS,\n    redirect: 'follow'\n  });\n\n  // Example OTF video: https://www.youtube.com/watch?v=DJ8GQUNUXGM\n\n  // There might have been redirects, if there were we want to write the resolved URL to the manifest\n  // So that the player doesn't have to follow the redirects every time it requests a segment\n  const resolved_url = response.url.replace('&rn=0', '').replace('&sq=0', '');\n\n  // In this function we only need the segment durations and how often the durations are repeated\n  // The segment count could be useful for other stuff though\n  // The response body contains a lot of junk but the useful stuff looks like this:\n  // Segment-Count: 922\\r\\n' +\n  //   'Segment-Durations-Ms: 5120(r=920),3600,\\r\\n'\n  const response_text = await response.text();\n\n  const segment_duration_strings = getStringBetweenStrings(response_text, 'Segment-Durations-Ms:', '\\r\\n')?.split(',');\n\n  if (!segment_duration_strings) {\n    throw new InnertubeError('Failed to extract the segment durations from this OTF stream', { url });\n  }\n\n  const segment_durations = [];\n  for (const segment_duration_string of segment_duration_strings) {\n    const trimmed_segment_duration = segment_duration_string.trim();\n    if (trimmed_segment_duration.length === 0) {\n      continue;\n    }\n\n    let repeat_count;\n\n    const repeat_count_string = getStringBetweenStrings(trimmed_segment_duration, '(r=', ')');\n    if (repeat_count_string) {\n      repeat_count = parseInt(repeat_count_string);\n    }\n\n    segment_durations.push({\n      duration: parseInt(trimmed_segment_duration),\n      repeat_count\n    });\n  }\n\n  return {\n    init_url: `${resolved_url}&sq=0`,\n    media_url: `${resolved_url}&sq=$Number$`,\n    timeline: segment_durations\n  };\n}\n\nasync function getPostLiveDvrInfo(transformed_url: string, actions: Actions): Promise<PostLiveDvrInfo> {\n  const response = await actions.session.http.fetch_function(`${transformed_url}&rn=0&sq=0`, {\n    method: 'HEAD',\n    headers: Constants.STREAM_HEADERS,\n    redirect: 'follow'\n  });\n\n  const duration_ms = parseInt(response.headers.get('X-Head-Time-Millis') || '');\n  const segment_count = parseInt(response.headers.get('X-Head-Seqnum') || '');\n\n  if (isNaN(duration_ms) || isNaN(segment_count)) {\n    throw new InnertubeError('Failed to extract the duration or segment count for this Post Live DVR video');\n  }\n\n  return {\n    duration: duration_ms / 1000,\n    segment_count\n  };\n}\n\nasync function getPostLiveDvrDuration(\n  shared_post_live_dvr_info: SharedPostLiveDvrInfo,\n  format: Format,\n  url_transformer: URLTransformer,\n  actions: Actions,\n  player?: Player,\n  cpn?: string\n) {\n  if (!shared_post_live_dvr_info.item) {\n    const url = new URL(format.decipher(player));\n    url.searchParams.set('cpn', cpn || '');\n\n    const transformed_url = url_transformer(url).toString();\n\n    shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);\n  }\n\n  return shared_post_live_dvr_info.item.duration;\n}\n\nfunction getSegmentInfo(\n  format: Format,\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  let transformed_url = '';\n  \n  if (is_sabr) {\n    const formatKey = `${format.itag || ''}:${format.xtags || ''}`;\n    transformed_url = `sabr://${format.has_video ? 'video' : 'audio'}?key=${formatKey}`;\n  } else {\n    const url = new URL(format.decipher(player));\n    url.searchParams.set('cpn', cpn || '');\n    transformed_url = url_transformer(url).toString();\n  }\n  \n  if (format.is_type_otf) {\n    if (!actions)\n      throw new InnertubeError('Unable to get segment durations for this OTF stream without an Actions instance', { format });\n\n    const info: SegmentInfo = {\n      is_oft: true,\n      is_post_live_dvr: false,\n      getSegmentTemplate() {\n        return getOTFSegmentTemplate(transformed_url, actions);\n      }\n    };\n\n    return info;\n  }\n\n  if (shared_post_live_dvr_info) {\n    if (!actions) {\n      throw new InnertubeError('Unable to get segment count for this Post Live DVR video without an Actions instance', { format });\n    }\n\n    const target_duration_dec = format.target_duration_dec;\n\n    if (typeof target_duration_dec !== 'number') {\n      throw new InnertubeError('Format is missing target_duration_dec', { format });\n    }\n\n    const info: SegmentInfo = {\n      is_oft: false,\n      is_post_live_dvr: true,\n      async getSegmentTemplate(): Promise<SegmentTemplate> {\n        if (!shared_post_live_dvr_info.item) {\n          shared_post_live_dvr_info.item = await getPostLiveDvrInfo(transformed_url, actions);\n        }\n\n        return {\n          media_url: `${transformed_url}&sq=$Number$`,\n          timeline: [\n            {\n              duration: target_duration_dec * 1000,\n              repeat_count: shared_post_live_dvr_info.item.segment_count\n            }\n          ]\n        };\n      }\n    };\n\n    return info;\n  }\n\n  if (!format.index_range || !format.init_range)\n    throw new InnertubeError('Index and init ranges not available', { format });\n\n  const info: SegmentInfo = {\n    is_oft: false,\n    is_post_live_dvr: false,\n    base_url: transformed_url,\n    index_range: format.index_range,\n    init_range: format.init_range\n  };\n\n  return info;\n}\n\nfunction getAudioRepresentation(\n  format: Format,\n  hoisted: string[],\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const uid_parts = [ format.itag.toString() ];\n\n  if (format.audio_track) {\n    uid_parts.push(format.audio_track.id);\n  }\n\n  if (format.is_drc) {\n    uid_parts.push('drc');\n  }\n\n  const rep: AudioRepresentation = {\n    uid: uid_parts.join('-'),\n    bitrate: format.bitrate,\n    codecs: !hoisted.includes('codecs') ? getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"') : undefined,\n    audio_sample_rate: !hoisted.includes('audio_sample_rate') ? format.audio_sample_rate : undefined,\n    channels: !hoisted.includes('AudioChannelConfiguration') ? format.audio_channels || 2 : undefined,\n    segment_info: getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)\n  };\n\n  return rep;\n}\n\nfunction getTrackRoles(format: Format, has_drc_streams: boolean) {\n  if (!format.audio_track && !has_drc_streams) {\n    return;\n  }\n\n  const roles: ('main' | 'dub' | 'description' | 'enhanced-audio-intelligibility' | 'alternate')[] = [\n    format.is_original ? 'main' : 'alternate'\n  ];\n\n  if (format.is_dubbed || format.is_auto_dubbed)\n    roles.push('dub');\n\n  if (format.is_descriptive)\n    roles.push('description');\n\n  if (format.is_drc)\n    roles.push('enhanced-audio-intelligibility');\n\n  return roles;\n}\n\nfunction getAudioSet(\n  formats: Format[],\n  url_transformer: URLTransformer,\n  actions?: Actions,\n  player?: Player,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  drc_labels?: DrcLabels,\n  is_sabr?: boolean\n) {\n  const first_format = formats[0];\n  const { audio_track } = first_format;\n  const hoisted: string[] = [];\n\n  const has_drc_streams = !!drc_labels;\n\n  let track_name;\n\n  if (audio_track) {\n    if (has_drc_streams && first_format.is_drc) {\n      track_name = drc_labels.label_drc_multiple(audio_track.display_name);\n    } else {\n      track_name = audio_track.display_name;\n    }\n  } else if (has_drc_streams) {\n    track_name = first_format.is_drc ? drc_labels.label_drc : drc_labels.label_original;\n  }\n\n  const set: AudioSet = {\n    mime_type: first_format.mime_type.split(';')[0],\n    language: first_format.language ?? undefined,\n    codecs: hoistCodecsIfPossible(formats, hoisted),\n    audio_sample_rate: hoistNumberAttributeIfPossible(formats, 'audio_sample_rate', hoisted),\n    track_name,\n    track_roles: getTrackRoles(first_format, has_drc_streams),\n    channels: hoistAudioChannelsIfPossible(formats, hoisted),\n    drm_families: first_format.drm_families,\n    drm_track_type: first_format.drm_track_type,\n    representations: formats.map((format) => getAudioRepresentation(format, hoisted, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr))\n  };\n\n  return set;\n}\n\nconst COLOR_PRIMARIES: Record<string, ColorInfo['primaries']> = {\n  BT709: '1',\n  BT2020: '9'\n};\n\nconst COLOR_TRANSFER_CHARACTERISTICS: Record<string, ColorInfo['transfer_characteristics']> = {\n  BT709: '1',\n  BT2020_10: '14',\n  SMPTEST2084: '16',\n  ARIB_STD_B67: '18'\n};\n\n// This list is incomplete, as the player.js doesn't currently have any code for matrix coefficients,\n// So it doesn't have a list like with the other two, so this is just based on what we've seen in responses\nconst COLOR_MATRIX_COEFFICIENTS: Record<string, ColorInfo['matrix_coefficients']> = {\n  BT709: '1',\n  BT2020_NCL: '14'\n};\n\nfunction getColorInfo(format: Format) {\n  // Section 5.5 Video source metadata signalling https://dashif.org/docs/IOP-Guidelines/DASH-IF-IOP-Part7-v5.0.0.pdf\n  // Section 8 Video code points https://www.itu.int/rec/T-REC-H.273-202107-I/en\n  // The player.js file was also helpful\n\n  const color_info = format.color_info;\n  let primaries;\n  let transfer_characteristics;\n  let matrix_coefficients;\n\n  if (color_info) {\n    if (color_info.primaries) {\n      primaries = COLOR_PRIMARIES[color_info.primaries];\n    }\n\n    if (color_info.transfer_characteristics) {\n      transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS[color_info.transfer_characteristics];\n    }\n\n    if (color_info.matrix_coefficients) {\n      matrix_coefficients = COLOR_MATRIX_COEFFICIENTS[color_info.matrix_coefficients];\n\n      if (!matrix_coefficients) {\n        const url = new URL(format.url as string);\n\n        const anonymisedFormat = JSON.parse(JSON.stringify(format));\n        anonymisedFormat.url = 'REDACTED';\n        anonymisedFormat.signature_cipher = 'REDACTED';\n        anonymisedFormat.cipher = 'REDACTED';\n\n        Log.warn(TAG_, `Unknown matrix coefficients \"${color_info.matrix_coefficients}\". The DASH manifest is still usable without this.\\n`\n          + `Please report it at ${Platform.shim.info.bugs_url} so we can add support for it.\\n`\n          + `InnerTube client: ${url.searchParams.get('c')}\\nformat:`, anonymisedFormat);\n      }\n    }\n  } else if (getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"')?.startsWith('avc1')) {\n    // YouTube's h264 streams always seem to be SDR, so this is a pretty safe bet.\n    transfer_characteristics = COLOR_TRANSFER_CHARACTERISTICS.BT709;\n  }\n\n  const info: ColorInfo = {\n    primaries,\n    transfer_characteristics,\n    matrix_coefficients\n  };\n\n  return info;\n}\n\nfunction getVideoRepresentation(\n  format: Format,\n  url_transformer: URLTransformer,\n  hoisted: string[],\n  player?: Player,\n  actions?: Actions,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const rep: VideoRepresentation = {\n    uid: format.itag.toString(),\n    bitrate: format.bitrate,\n    width: format.width,\n    height: format.height,\n    codecs: !hoisted.includes('codecs') ? getStringBetweenStrings(format.mime_type, 'codecs=\"', '\"') : undefined,\n    fps: !hoisted.includes('fps') ? format.fps : undefined,\n    segment_info: getSegmentInfo(format, url_transformer, actions, player, cpn, shared_post_live_dvr_info, is_sabr)\n  };\n\n  return rep;\n}\n\nfunction getVideoSet(\n  formats: Format[],\n  url_transformer: URLTransformer,\n  player?: Player,\n  actions?: Actions,\n  cpn?: string,\n  shared_post_live_dvr_info?: SharedPostLiveDvrInfo,\n  is_sabr?: boolean\n) {\n  const first_format = formats[0];\n  const color_info = getColorInfo(first_format);\n  const hoisted: string[] = [];\n\n  const set: VideoSet = {\n    mime_type: first_format.mime_type.split(';')[0],\n    color_info,\n    codecs: hoistCodecsIfPossible(formats, hoisted),\n    fps: hoistNumberAttributeIfPossible(formats, 'fps', hoisted),\n    drm_families: first_format.drm_families,\n    drm_track_type: first_format.drm_track_type,\n    representations: formats.map((format) => getVideoRepresentation(format, url_transformer, hoisted, player, actions, cpn, shared_post_live_dvr_info, is_sabr))\n  };\n\n  return set;\n}\n\nfunction getStoryboardInfo(\n  storyboards: PlayerStoryboardSpec | PlayerLiveStoryboardSpec\n) {\n  // Can't seem to combine the types in the Map, so create an alias here\n  type AnyStoryboardData = StoryboardData | LiveStoryboardData\n\n  const mime_info = new Map<string, AnyStoryboardData[]>();\n\n  const boards = storyboards.is(PlayerStoryboardSpec) ? storyboards.boards : [ storyboards.board ];\n\n  for (const storyboard of boards) {\n    const extension = new URL(storyboard.template_url).pathname.split('.').pop();\n\n    const mime_type = `image/${extension === 'jpg' ? 'jpeg' : extension}`;\n\n    if (!mime_info.has(mime_type)) {\n      mime_info.set(mime_type, []);\n    }\n    mime_info.get(mime_type)?.push(storyboard);\n  }\n\n  return mime_info;\n}\n\ninterface SharedStoryboardResponse {\n  response?: Promise<Response>\n}\n\nasync function getStoryboardMimeType(\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  transform_url: URLTransformer,\n  probable_mime_type: string,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n\n  const req_url = transform_url(new URL(url.replace('$M', '0')));\n\n  const res_promise = shared_response.response ? shared_response.response : actions.session.http.fetch_function(req_url, {\n    method: 'HEAD',\n    headers: Constants.STREAM_HEADERS\n  });\n\n  shared_response.response = res_promise;\n\n  const res = await res_promise;\n\n  return res.headers.get('Content-Type') || probable_mime_type;\n}\n\nasync function getStoryboardBitrate(\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n\n  const response_promises: Promise<Response>[] = [];\n\n  // Set a limit so we don't take forever for long videos\n  const request_limit = Math.min(board.type === 'vod' ? board.storyboard_count : 5, 10);\n  for (let i = 0; i < request_limit; i++) {\n    const req_url = new URL(url.replace('$M', i.toString()));\n\n    const response_promise =\n      i === 0 && shared_response.response ?\n        shared_response.response :\n        actions.session.http.fetch_function(req_url, {\n          method: 'HEAD',\n          headers: Constants.STREAM_HEADERS\n        });\n\n    if (i === 0)\n      shared_response.response = response_promise;\n\n    response_promises.push(response_promise);\n  }\n\n  // Run the requests in parallel to avoid causing too much delay\n  const responses = await Promise.all(response_promises);\n\n  const content_lengths = [];\n\n  for (const response of responses) {\n    content_lengths.push(parseInt(response.headers.get('Content-Length') || '0'));\n  }\n\n  // This is a rough estimate, so it probably won't reflect that actual peak bitrate\n  // Hopefully it's close enough, because figuring out the actual peak bitrate would require downloading and analysing all storyboard tiles\n  return Math.ceil((Math.max(...content_lengths) / (board.rows * board.columns)) * 8);\n}\n\nfunction getImageRepresentation(\n  duration: number,\n  actions: Actions,\n  board: StoryboardData | LiveStoryboardData,\n  transform_url: URLTransformer,\n  shared_response: SharedStoryboardResponse\n) {\n  const url = board.template_url;\n  const template_url = new URL(url.replace('$M', '$Number$'));\n\n  let template_duration;\n\n  if (board.type === 'vod') {\n    // Here duration is the duration of the video\n    template_duration = duration / board.storyboard_count;\n  } else {\n    // Here duration is the duration of one of the video/audio segments,\n    // As there is one tile per segment, we need to multiply it by the number of tiles\n    template_duration = duration * board.columns * board.rows;\n  }\n\n  const rep: ImageRepresentation = {\n    uid: `thumbnails_${board.thumbnail_width}x${board.thumbnail_height}`,\n    getBitrate() {\n      return getStoryboardBitrate(actions, board, shared_response);\n    },\n    sheet_width: board.thumbnail_width * board.columns,\n    sheet_height: board.thumbnail_height * board.rows,\n    thumbnail_height: board.thumbnail_height,\n    thumbnail_width: board.thumbnail_width,\n    rows: board.rows,\n    columns: board.columns,\n    template_duration: Math.round(template_duration),\n    template_url: transform_url(template_url).toString(),\n    getURL(n) {\n      return template_url.toString().replace('$Number$', n.toString());\n    }\n  };\n\n  return rep;\n}\n\nfunction getImageSets(\n  duration: number,\n  actions: Actions,\n  storyboards: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  transform_url: URLTransformer\n) {\n  const mime_info = getStoryboardInfo(storyboards);\n\n  const shared_response: SharedStoryboardResponse = {};\n\n  return Array.from(mime_info.entries()).map<ImageSet>(([ type, boards ]) => ({\n    probable_mime_type: type,\n    getMimeType() {\n      return getStoryboardMimeType(actions, boards[0], transform_url, type, shared_response);\n    },\n    representations: boards.map((board) => getImageRepresentation(duration, actions, board, transform_url, shared_response))\n  }));\n}\n\nfunction getTextSets(\n  caption_tracks: CaptionTrackData[],\n  format: 'vtt' | 'ttml',\n  transform_url: URLTransformer\n): TextSet[] {\n  const mime_type = format === 'vtt' ? 'text/vtt' : 'application/ttml+xml';\n\n  return caption_tracks.map((caption_track) => {\n    const url = new URL(caption_track.base_url);\n    url.searchParams.set('fmt', format);\n\n    const track_roles: ('caption' | 'dub')[] = [ 'caption' ];\n\n    if (url.searchParams.has('tlang')) {\n      track_roles.push('dub');\n    }\n\n    return {\n      mime_type,\n      language: caption_track.language_code,\n      track_name: caption_track.name.toString(),\n      track_roles,\n      representation: {\n        uid: `text-${caption_track.vss_id}`,\n        base_url: transform_url(url).toString()\n      }\n    };\n  });\n}\n\nexport function getStreamingInfo(\n  streaming_data?: IStreamingData,\n  is_post_live_dvr = false,\n  url_transformer: URLTransformer = (url) => url,\n  format_filter?: FormatFilter,\n  cpn?: string,\n  player?: Player,\n  actions?: Actions,\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  caption_tracks?: CaptionTrackData[],\n  options?: StreamingInfoOptions\n) {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  const formats = format_filter ?\n    streaming_data.adaptive_formats.filter((fmt) => !format_filter(fmt)) :\n    streaming_data.adaptive_formats;\n\n  let getDuration;\n  let shared_post_live_dvr_info: SharedPostLiveDvrInfo | undefined;\n\n  if (is_post_live_dvr) {\n    shared_post_live_dvr_info = {};\n\n    if (!actions) {\n      throw new InnertubeError('Unable to get duration or segment count for this Post Live DVR video without an Actions instance');\n    }\n\n    getDuration = () => {\n      // Should never happen, as we set it just a few lines above, but this stops TypeScript complaining\n      if (!shared_post_live_dvr_info) {\n        return Promise.resolve(0);\n      }\n\n      return getPostLiveDvrDuration(shared_post_live_dvr_info, formats[0], url_transformer, actions, player, cpn);\n    };\n  } else {\n    const duration = formats[0].approx_duration_ms / 1000;\n\n    getDuration = () => Promise.resolve(duration);\n  }\n\n  const {\n    groups,\n    has_multiple_audio_tracks\n  } = getFormatGroupings(formats, is_post_live_dvr);\n\n  const {\n    video_groups,\n    audio_groups\n  } = groups.reduce((acc, formats) => {\n    if (formats[0].has_audio) {\n      // Some videos with multiple audio tracks, have a broken one, that doesn't have any audio track information\n      // It seems to be the same as default audio track but broken\n      // We want to ignore it, as it messes up audio track selection in players and YouTube ignores it too\n      // At the time of writing, this video has a broken audio track: https://youtu.be/UJeSWbR6W04\n      if (has_multiple_audio_tracks && !formats[0].audio_track)\n        return acc;\n\n      acc.audio_groups.push(formats);\n      return acc;\n    }\n\n    acc.video_groups.push(formats);\n\n    return acc;\n  }, {\n    video_groups: [] as Format[][],\n    audio_groups: [] as Format[][]\n  });\n\n  let drc_labels: DrcLabels | undefined;\n\n  if (audio_groups.flat().some((format) => format.is_drc)) {\n    drc_labels = {\n      label_original: options?.label_original || 'Original',\n      label_drc: options?.label_drc || 'Stable Volume',\n      label_drc_multiple: options?.label_drc_multiple || ((display_name) => `${display_name} (Stable Volume)`)\n    };\n  }\n\n  const audio_sets = audio_groups.map((formats) => getAudioSet(formats, url_transformer, actions, player, cpn, shared_post_live_dvr_info, drc_labels, options?.is_sabr));\n\n  const video_sets = video_groups.map((formats) => getVideoSet(formats, url_transformer, player, actions, cpn, shared_post_live_dvr_info, options?.is_sabr));\n\n  let image_sets: ImageSet[] = [];\n\n  // XXX: We need to make requests to get the image sizes, so we'll skip the storyboards if we don't have an Actions instance\n  if (storyboards && actions) {\n    let duration;\n\n    if (storyboards.is(PlayerStoryboardSpec)) {\n      duration = formats[0].approx_duration_ms / 1000;\n    } else {\n      const target_duration_dec = formats[0].target_duration_dec;\n      if (target_duration_dec === undefined)\n        throw new InnertubeError('Format is missing target_duration_dec', { format: formats[0] });\n      duration = target_duration_dec;\n    }\n\n    image_sets = getImageSets(duration, actions, storyboards, url_transformer);\n  }\n\n  let text_sets: TextSet[] = [];\n\n  if (caption_tracks && options?.captions_format) {\n    if ((options.captions_format as string) !== 'vtt' && (options.captions_format as string) !== 'ttml') {\n      throw new InnertubeError('Invalid captions format', options.captions_format);\n    }\n    text_sets = getTextSets(caption_tracks, options.captions_format, url_transformer);\n  }\n\n  const info : StreamingInfo = {\n    getDuration,\n    audio_sets,\n    video_sets,\n    image_sets,\n    text_sets\n  };\n\n  return info;\n}\n", "/** @jsxFactory DashUtils.createElement */\n/** @jsxFragmentFactory DashUtils.Fragment */\nimport * as DashUtils from './DashUtils.js';\nimport { getStreamingInfo } from './StreamingInfo.js';\nimport { InnertubeError } from './Utils.js';\n\nimport type Actions from '../core/Actions.js';\nimport type Player from '../core/Player.js';\nimport type { IStreamingData } from '../parser/index.js';\nimport type { PlayerStoryboardSpec } from '../parser/nodes.js';\nimport type { SegmentInfo as FSegmentInfo } from './StreamingInfo.js';\nimport type { FormatFilter, URLTransformer } from '../types/index.js';\nimport type PlayerLiveStoryboardSpec from '../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type { StreamingInfoOptions } from '../types/StreamingInfoOptions.js';\nimport type { CaptionTrackData } from '../parser/classes/PlayerCaptionsTracklist.js';\n\ninterface DashManifestProps {\n  streamingData: IStreamingData;\n  isPostLiveDvr: boolean;\n  transformURL?: URLTransformer;\n  rejectFormat?: FormatFilter;\n  options?: StreamingInfoOptions,\n  cpn?: string;\n  player?: Player;\n  actions?: Actions;\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec;\n  captionTracks?: CaptionTrackData[];\n}\n\nasync function OTFPostLiveDvrSegmentInfo({ info }: { info: FSegmentInfo }) {\n  if (!info.is_oft && !info.is_post_live_dvr) return null;\n\n  const template = await info.getSegmentTemplate();\n\n  return <segmentTemplate\n    startNumber={template.init_url ? '1' : '0'}\n    timescale=\"1000\"\n    initialization={template.init_url}\n    media={template.media_url}\n  >\n    <segmentTimeline>\n      {\n        template.timeline.map((segment_duration) => (\n          <s\n            d={segment_duration.duration}\n            r={segment_duration.repeat_count}\n          />\n        ))\n      }\n    </segmentTimeline>\n  </segmentTemplate>;\n}\n\nfunction SegmentInfo({ info }: { info: FSegmentInfo }) {\n  if (info.is_oft || info.is_post_live_dvr) {\n    return <OTFPostLiveDvrSegmentInfo info={info} />;\n  }\n  return <>\n    <baseURL>\n      {info.base_url}\n    </baseURL>\n    <segmentBase indexRange={`${info.index_range.start}-${info.index_range.end}`}>\n      <initialization range={`${info.init_range.start}-${info.init_range.end}`} />\n    </segmentBase>\n  </>;\n}\n\nfunction getDrmSystemId(drm_family?: string): string | null {\n  switch (drm_family) {\n    case 'WIDEVINE':\n      return 'edef8ba9-79d6-4ace-a3c8-27dcd51d21ed';\n    case 'PLAYREADY':\n      return '9a04f079-9840-4286-ab92-e65be0885f95'; \n    default:\n      return null;\n  }\n}\n\nasync function DashManifest({\n  streamingData,\n  isPostLiveDvr,\n  transformURL,\n  rejectFormat,\n  cpn,\n  player,\n  actions,\n  storyboards,\n  captionTracks,\n  options\n}: DashManifestProps) {\n  const {\n    getDuration,\n    audio_sets,\n    video_sets,\n    image_sets,\n    text_sets\n  } = getStreamingInfo(streamingData, isPostLiveDvr, transformURL, rejectFormat, cpn, player, actions, storyboards, captionTracks, options);\n\n  // XXX: DASH spec: https://standards.iso.org/ittf/PubliclyAvailableStandards/c083314_ISO_IEC%2023009-1_2022(en).zip\n\n  return <mPD\n    xmlns=\"urn:mpeg:dash:schema:mpd:2011\"\n    minBufferTime=\"PT1.500S\"\n    profiles=\"urn:mpeg:dash:profile:isoff-main:2011\"\n    type=\"static\"\n    mediaPresentationDuration={`PT${await getDuration()}S`}\n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd\"\n  >\n    <period>\n      {\n        audio_sets.map((set, index) => (\n          <adaptationSet\n            id={index}\n            mimeType={set.mime_type}\n            startWithSAP=\"1\"\n            subsegmentAlignment=\"true\"\n            lang={set.language}\n            codecs={set.codecs}\n            audioSamplingRate={set.audio_sample_rate}\n            contentType=\"audio\"\n          >\n            {\n              set.drm_families && set.drm_families.map((drm_family) => (\n                <contentProtection schemeIdUri={`urn:uuid:${getDrmSystemId(drm_family)}`}/>\n              ))\n            }\n            {\n              set.track_roles && set.track_roles.map((role) => (\n                <role\n                  schemeIdUri=\"urn:mpeg:dash:role:2011\"\n                  value={role}\n                />\n              ))\n            }\n            {\n              set.track_name &&\n              <label id={index}>\n                {set.track_name}\n              </label>\n            }\n            {\n              set.channels &&\n              <audioChannelConfiguration\n                schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\"\n                value={set.channels}\n              />\n            }\n            {\n              set.representations.map((rep) => (\n                <representation\n                  id={rep.uid}\n                  bandwidth={rep.bitrate}\n                  codecs={rep.codecs}\n                  audioSamplingRate={rep.audio_sample_rate}\n                >\n                  {\n                    rep.channels &&\n                    <audioChannelConfiguration\n                      schemeIdUri=\"urn:mpeg:dash:23003:3:audio_channel_configuration:2011\"\n                      value={rep.channels}\n                    />\n                  }\n                  <SegmentInfo info={rep.segment_info} />\n                </representation>\n              ))\n            }\n          </adaptationSet>\n        ))\n      }\n      {\n        video_sets.map((set, index) => (\n          <adaptationSet\n            id={index + audio_sets.length}\n            mimeType={set.mime_type}\n            startWithSAP=\"1\"\n            subsegmentAlignment=\"true\"\n            codecs={set.codecs}\n            maxPlayoutRate=\"1\"\n            frameRate={set.fps}\n            contentType=\"video\"\n          >\n            {\n              set.drm_families && set.drm_families.map((drm_family) => (\n                <contentProtection schemeIdUri={`urn:uuid:${getDrmSystemId(drm_family)}`}/>\n              ))\n            }\n            {\n              set.color_info.primaries &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:ColourPrimaries\"\n                value={set.color_info.primaries}\n              />\n            }\n            {\n              set.color_info.transfer_characteristics &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:TransferCharacteristics\"\n                value={set.color_info.transfer_characteristics}\n              />\n            }\n            {\n              set.color_info.matrix_coefficients &&\n              <supplementalProperty\n                schemeIdUri=\"urn:mpeg:mpegB:cicp:MatrixCoefficients\"\n                value={set.color_info.matrix_coefficients}\n              />\n            }\n            {\n              set.representations.map((rep) => (\n                <representation\n                  id={rep.uid}\n                  bandwidth={rep.bitrate}\n                  width={rep.width}\n                  height={rep.height}\n                  codecs={rep.codecs}\n                  frameRate={rep.fps}\n                >\n                  <SegmentInfo info={rep.segment_info} />\n                </representation>\n              ))\n            }\n          </adaptationSet>\n        ))\n      }\n      {\n        image_sets.map(async (set, index) => {\n          return <adaptationSet\n            id={index + audio_sets.length + video_sets.length}\n            mimeType={await set.getMimeType()}\n            contentType=\"image\"\n          >\n            {\n              set.representations.map(async (rep) => (\n                <representation\n                  id={`thumbnails_${rep.thumbnail_width}x${rep.thumbnail_height}`}\n                  bandwidth={await rep.getBitrate()}\n                  width={rep.sheet_width}\n                  height={rep.sheet_height}\n                >\n                  <essentialProperty\n                    schemeIdUri=\"http://dashif.org/thumbnail_tile\"\n                    value={`${rep.columns}x${rep.rows}`}\n                  />\n                  <segmentTemplate\n                    media={rep.template_url}\n                    duration={rep.template_duration}\n                    startNumber=\"0\"\n                  />\n                </representation>\n              ))\n            }\n          </adaptationSet>;\n        })\n      }\n      {\n        text_sets.map((set, index) => {\n          return <adaptationSet\n            id={index + audio_sets.length + video_sets.length + image_sets.length}\n            mimeType={set.mime_type}\n            lang={set.language}\n            contentType=\"text\"\n          >\n            {\n              set.track_roles.map((role) => (\n                <role\n                  schemeIdUri=\"urn:mpeg:dash:role:2011\"\n                  value={role}\n                />\n              ))\n            }\n            <label id={index + audio_sets.length}>\n              {set.track_name}\n            </label>\n            <representation\n              id={set.representation.uid}\n              bandwidth=\"0\"\n            >\n              <baseURL>\n                {set.representation.base_url}\n              </baseURL>\n            </representation>\n          </adaptationSet>;\n        })\n      }\n    </period>\n  </mPD>;\n}\n\nexport function toDash(\n  streaming_data?: IStreamingData,\n  is_post_live_dvr = false,\n  url_transformer: URLTransformer = (url) => url,\n  format_filter?: FormatFilter,\n  cpn?: string,\n  player?: Player,\n  actions?: Actions,\n  storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec,\n  caption_tracks?: CaptionTrackData[],\n  options?: StreamingInfoOptions\n) {\n  if (!streaming_data)\n    throw new InnertubeError('Streaming data not available');\n\n  return DashUtils.renderToString(\n    <DashManifest\n      streamingData={streaming_data}\n      isPostLiveDvr={is_post_live_dvr}\n      transformURL={url_transformer}\n      options={options}\n      rejectFormat={format_filter}\n      cpn={cpn}\n      player={player}\n      actions={actions}\n      storyboards={storyboards}\n      captionTracks={caption_tracks}\n    />\n  );\n}", "import * as Constants from './Constants.js';\n\nimport {\n  Platform,\n  generateSidAuth,\n  InnertubeError,\n  getCookie\n} from './Utils.js';\n\nimport type { Context, Session } from '../core/index.js';\nimport type { FetchFunction } from '../types/index.js';\n\nexport interface HTTPClientInit {\n  baseURL?: string;\n}\n\ninterface ProcessedJsonPayload {\n  newBody: string;\n  isWebKids: boolean;\n  clientVersion?: string;\n  clientNameId?: string;\n  adjustedClientName: string;\n}\n\nexport default class HTTPClient {\n  #session: Session;\n  readonly #cookie?: string;\n  readonly #fetch: FetchFunction;\n\n  constructor(session: Session, cookie?: string, fetch?: FetchFunction) {\n    this.#session = session;\n    this.#cookie = cookie;\n    this.#fetch = fetch || Platform.shim.fetch;\n  }\n\n  get fetch_function(): FetchFunction {\n    return this.#fetch;\n  }\n\n  async fetch(\n    input: URL | Request | string,\n    init?: RequestInit & HTTPClientInit\n  ): Promise<Response> {\n    const session = this.#session;\n\n    const innertube_url = Constants.URLS.API.PRODUCTION_1 + session.api_version;\n    const baseURL = init?.baseURL || innertube_url;\n\n    const request_url = typeof input === 'string'\n      ? new URL(`${baseURL}${baseURL.endsWith('/') || input.startsWith('/') ? '' : '/'}${input}`)\n      : input instanceof URL ? input : new URL(input.url, baseURL);\n\n    const headers =\n      init?.headers ||\n      (input instanceof Platform.shim.Request ? input.headers : new Platform.shim.Headers()) ||\n      new Platform.shim.Headers();\n\n    const body = init?.body || (input instanceof Platform.shim.Request ? input.body : undefined);\n\n    const request_headers = new Platform.shim.Headers(headers);\n\n    this.#setupCommonHeaders(request_headers, session, request_url);\n\n    request_url.searchParams.set('prettyPrint', 'false');\n    request_url.searchParams.set('alt', 'json');\n\n    const content_type = request_headers.get('Content-Type');\n\n    let request_body = body;\n    let is_web_kids = false;\n\n    const is_innertube_req =\n      baseURL === innertube_url ||\n      baseURL === Constants.URLS.YT_UPLOAD;\n\n    // Copy context into payload when possible\n    if (content_type === 'application/json' && is_innertube_req && (typeof body === 'string')) {\n      const {\n        newBody,\n        isWebKids: processedIsWebKids,\n        clientVersion: processedClientVersion,\n        clientNameId: processedClientNameId,\n        adjustedClientName\n      } = this.#processJsonPayload(body, session);\n\n      request_body = newBody;\n      is_web_kids = processedIsWebKids;\n\n      if (processedClientVersion) {\n        request_headers.set('X-Youtube-Client-Version', processedClientVersion);\n      }\n      if (processedClientNameId) {\n        request_headers.set('X-Youtube-Client-Name', processedClientNameId);\n      }\n\n      if (adjustedClientName === Constants.CLIENTS.ANDROID.NAME || adjustedClientName === Constants.CLIENTS.YTMUSIC_ANDROID.NAME) {\n        request_headers.set('User-Agent', Constants.CLIENTS.ANDROID.USER_AGENT);\n        request_headers.set('X-GOOG-API-FORMAT-VERSION', '2');\n      } else if (adjustedClientName === Constants.CLIENTS.IOS.NAME) {\n        request_headers.set('User-Agent', Constants.CLIENTS.IOS.USER_AGENT);\n      }\n    } else if (content_type === 'application/x-protobuf') {\n      // Assume it is always an Android request.\n      if (Platform.shim.server) {\n        request_headers.set('User-Agent', Constants.CLIENTS.ANDROID.USER_AGENT);\n        request_headers.set('X-GOOG-API-FORMAT-VERSION', '2');\n        request_headers.delete('X-Youtube-Client-Version');\n      }\n    }\n\n    // Authenticate (NOTE: YouTube Kids does not support regular bearer tokens)\n    if (session.logged_in && is_innertube_req && !is_web_kids) {\n      const oauth = session.oauth;\n\n      if (oauth.oauth2_tokens) {\n        if (oauth.shouldRefreshToken()) {\n          await oauth.refreshAccessToken();\n        }\n\n        request_headers.set('Authorization', `Bearer ${oauth.oauth2_tokens.access_token}`);\n      }\n\n      const cookie = this.#cookie;\n\n      if (cookie) {\n        const sapisid = getCookie(cookie, 'SAPISID');\n\n        if (sapisid) {\n          request_headers.set('Authorization', await generateSidAuth(sapisid));\n          request_headers.set('X-Goog-Authuser', session.account_index.toString());\n          if (session.context.user.onBehalfOfUser)\n            request_headers.set('X-Goog-PageId', session.context.user.onBehalfOfUser);\n        }\n\n        request_headers.set('Cookie', cookie);\n      }\n    }\n\n    const request = new Platform.shim.Request(request_url, input instanceof Platform.shim.Request ? input : init);\n\n    const response = await this.#fetch(request, {\n      body: request_body,\n      headers: request_headers,\n      redirect: input instanceof Platform.shim.Request ? input.redirect : init?.redirect || 'follow',\n      ...(Platform.shim.runtime !== 'cf-worker' ? { credentials: 'include' } : {})\n    });\n\n    // Check if 2xx\n    if (response.ok) {\n      return response;\n    }\n\n    throw new InnertubeError(`Request to ${response.url} failed with status code ${response.status}`, await response.text());\n  }\n\n  #processJsonPayload(json_body: string, session: Session): ProcessedJsonPayload {\n    const parsed_payload = JSON.parse(json_body);\n\n    // Deep copy since we're going to be modifying it.\n    const adjusted_context = JSON.parse(JSON.stringify(session.context)) as Context;\n    this.#adjustContext(adjusted_context, parsed_payload.client);\n\n    const new_payload = {\n      ...parsed_payload,\n      context: adjusted_context\n    };\n\n    const clientVersion = new_payload.context.client.clientVersion;\n    const clientNameFromAdjustedContext = new_payload.context.client.clientName as keyof typeof Constants.CLIENT_NAME_IDS;\n    const clientNameId = Constants.CLIENT_NAME_IDS[clientNameFromAdjustedContext];\n\n    delete new_payload.client;\n\n    const isWebKids = new_payload.context.client.clientName === Constants.CLIENTS.WEB_KIDS.NAME;\n\n    return {\n      newBody: JSON.stringify(new_payload),\n      isWebKids,\n      clientVersion,\n      clientNameId,\n      adjustedClientName: new_payload.context.client.clientName\n    };\n  }\n\n  #setupCommonHeaders(request_headers: Headers, session: Session, request_url: URL): void {\n    request_headers.set('Accept', '*/*');\n    request_headers.set('Accept-Language', '*');\n    request_headers.set('X-Goog-Visitor-Id', session.context.client.visitorData || '');\n    request_headers.set('X-Youtube-Client-Version', session.context.client.clientVersion || '');\n\n    const client_name_id = Constants.CLIENT_NAME_IDS[session.context.client.clientName as keyof typeof Constants.CLIENT_NAME_IDS];\n    if (client_name_id) {\n      request_headers.set('X-Youtube-Client-Name', client_name_id);\n    }\n\n    if (Platform.shim.server) {\n      request_headers.set('User-Agent', session.user_agent || '');\n      request_headers.set('Origin', request_url.origin);\n    }\n  }\n\n  #adjustContext(ctx: Context, client?: string): void {\n    if (!client)\n      return;\n\n    const clientName = client.toUpperCase();\n    \n    if (!Constants.SUPPORTED_CLIENTS.includes(clientName)) {\n      throw new InnertubeError(`Invalid client: ${client}`, {\n        available_innertube_clients: Constants.SUPPORTED_CLIENTS\n      });\n    }\n\n    if (clientName !== 'WEB') {\n      delete ctx.client.configInfo;\n    }\n    \n    if (\n      clientName === 'ANDROID' ||\n      clientName === 'YTMUSIC_ANDROID' ||\n      clientName === 'YTSTUDIO_ANDROID'\n    ) {\n      ctx.client.androidSdkVersion = Constants.CLIENTS.ANDROID.SDK_VERSION;\n      ctx.client.userAgent = Constants.CLIENTS.ANDROID.USER_AGENT;\n      ctx.client.osName = 'Android';\n      ctx.client.osVersion = '13';\n      ctx.client.platform = 'MOBILE';\n    }\n\n    switch (clientName) {\n      case 'MWEB':\n        ctx.client.clientVersion = Constants.CLIENTS.MWEB.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.MWEB.NAME;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.platform = 'MOBILE';\n        break;\n      case 'IOS':\n        ctx.client.deviceMake = 'Apple';\n        ctx.client.deviceModel = Constants.CLIENTS.IOS.DEVICE_MODEL;\n        ctx.client.clientVersion = Constants.CLIENTS.IOS.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.IOS.NAME;\n        ctx.client.platform = 'MOBILE';\n        ctx.client.osName = Constants.CLIENTS.IOS.OS_NAME;\n        ctx.client.osVersion = Constants.CLIENTS.IOS.OS_VERSION;\n        delete ctx.client.browserName;\n        delete ctx.client.browserVersion;\n        break;\n      case 'YTMUSIC':\n        ctx.client.clientVersion = Constants.CLIENTS.YTMUSIC.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.YTMUSIC.NAME;\n        break;\n      case 'ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.ANDROID.NAME;\n        break;\n      case 'YTMUSIC_ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.YTMUSIC_ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.YTMUSIC_ANDROID.NAME;\n        break;\n      case 'YTSTUDIO_ANDROID':\n        ctx.client.clientVersion = Constants.CLIENTS.YTSTUDIO_ANDROID.VERSION;\n        ctx.client.clientFormFactor = 'SMALL_FORM_FACTOR';\n        ctx.client.clientName = Constants.CLIENTS.YTSTUDIO_ANDROID.NAME;\n        break;\n      case 'TV':\n        ctx.client.clientVersion = Constants.CLIENTS.TV.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.TV.NAME;\n        ctx.client.userAgent = Constants.CLIENTS.TV.USER_AGENT;\n        break;\n      case 'TV_SIMPLY':\n        ctx.client.clientVersion = Constants.CLIENTS.TV_SIMPLY.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.TV_SIMPLY.NAME;\n        break;\n      case 'TV_EMBEDDED':\n        ctx.client.clientName = Constants.CLIENTS.TV_EMBEDDED.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.TV_EMBEDDED.VERSION;\n        ctx.client.clientScreen = 'EMBED';\n        ctx.thirdParty = { embedUrl: Constants.URLS.YT_BASE };\n        break;\n      case 'YTKIDS':\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_KIDS.VERSION;\n        ctx.client.clientName = Constants.CLIENTS.WEB_KIDS.NAME;\n        ctx.client.kidsAppInfo = { // @TODO: Make this configurable.\n          categorySettings: {\n            enabledCategories: [\n              'approved_for_you', 'black_joy', 'camp', 'collections', 'earth', 'explore',\n              'favorites', 'gaming', 'halloween', 'hero', 'learning', 'move', 'music',\n              'reading', 'shared_by_parents', 'shows', 'soccer', 'sports', 'spotlight', 'winter'\n            ]\n          },\n          contentSettings: {\n            corpusPreference: 'KIDS_CORPUS_PREFERENCE_YOUNGER',\n            kidsNoSearchMode: 'YT_KIDS_NO_SEARCH_MODE_OFF'\n          }\n        };\n        break;\n      case 'WEB_EMBEDDED':\n        ctx.client.clientName = Constants.CLIENTS.WEB_EMBEDDED.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_EMBEDDED.VERSION;\n        ctx.client.clientScreen = 'EMBED';\n        ctx.thirdParty = { embedUrl: Constants.URLS.GOOGLE_SEARCH_BASE };\n        break;\n      case 'WEB_CREATOR':\n        ctx.client.clientName = Constants.CLIENTS.WEB_CREATOR.NAME;\n        ctx.client.clientVersion = Constants.CLIENTS.WEB_CREATOR.VERSION;\n        break;\n      default:\n        break;\n    }\n  }\n}\n", "/**\n * Compresses a string using the LZW compression algorithm.\n * @param input - The data to compress.\n */\nexport function compress(input: string): string {\n  const output: number[] = [];\n  const dictionary: Record<string, number> = {};\n\n  for (let i = 0; i < 256; i++) {\n    dictionary[String.fromCharCode(i)] = i;\n  }\n\n  let current_string = '';\n  let dictionary_size = 256;\n\n  for (let i = 0; i < input.length; i++) {\n    const current_char = input[i];\n    const combined_string = current_string + current_char;\n\n    if (dictionary.hasOwnProperty(combined_string)) {\n      current_string = combined_string;\n    } else {\n      output.push(dictionary[current_string]);\n      dictionary[combined_string] = dictionary_size++;\n      current_string = current_char;\n    }\n  }\n\n  if (current_string !== '') {\n    output.push(dictionary[current_string]);\n  }\n\n  return output.map((code) => String.fromCharCode(code)).join('');\n}\n\n/**\n * Decompresses data that was compressed using the LZW compression algorithm.\n * @param input - The data to be decompressed.\n */\nexport function decompress(input: string): string {\n  const dictionary: Record<number, string> = {};\n  const input_data = input.split('');\n  const output: string[] = [ input_data.shift() as string ];\n  const input_length = input_data.length >>> 0; // Convert to unsigned 32-bit integer\n\n  let dictionary_code = 256;\n  let current_char = output[0];\n  let current_string = current_char;\n\n  for (let i = 0; i < input_length; ++i) {\n    const current_code = input_data[i].charCodeAt(0);\n    const entry =\n      current_code < 256 ? input_data[i] : (dictionary[current_code] ?\n        dictionary[current_code] : (current_string + current_char));\n\n    output.push(entry);\n\n    current_char = entry.charAt(0);\n    dictionary[dictionary_code++] = current_string + current_char;\n    current_string = entry;\n  }\n\n  return output.join('');\n}", "import { compress, decompress } from './LZW.js';\n\nexport const MAGIC_HEADER = 0x594254; // 'YTB' in hex...\nexport const VERSION = 1;\n\nexport function serialize(data: any): Uint8Array {\n  const json_str = JSON.stringify(data);\n  const compressed = compress(json_str);\n  const compressed_bytes = new TextEncoder().encode(compressed);\n\n  const buffer = new ArrayBuffer(12 + compressed_bytes.byteLength);\n  const view = new DataView(buffer);\n\n  view.setUint32(0, MAGIC_HEADER, true);\n  view.setUint32(4, VERSION, true);\n  view.setUint32(8, compressed_bytes.byteLength, true);\n\n  new Uint8Array(buffer).set(compressed_bytes, 12);\n\n  return new Uint8Array(buffer);\n}\n\nexport function deserialize<T>(buffer: Uint8Array): T {\n  if (buffer.byteLength < 12)\n    throw new Error('Invalid binary format: buffer too short');\n\n  const view = new DataView(buffer.buffer, buffer.byteOffset);\n\n  const magic = view.getUint32(0, true);\n  if (magic !== MAGIC_HEADER) {\n    throw new Error('Invalid binary format: magic header mismatch');\n  }\n\n  const version = view.getUint32(4, true);\n  if (version !== VERSION) {\n    throw new Error(`Unsupported binary format version: ${version}`);\n  }\n\n  const data_length = view.getUint32(8, true);\n  const compressed_data = buffer.slice(12, 12 + data_length);\n\n  const compressed = new TextDecoder().decode(compressed_data);\n  const json_str = decompress(compressed);\n\n  return JSON.parse(json_str);\n}\n", "import { base64ToU8, u8ToBase64 } from './Utils.js';\nimport { NextParams, PeformCommentActionParams, VisitorData } from '../../protos/generated/misc/params.js';\n\nexport type CommentActionParamsArgs = {\n  comment_id?: string,\n  video_id?: string,\n  text?: string,\n  target_language?: string\n}\n\nexport function encodeVisitorData(id: string, timestamp: number): string {\n  const writer = VisitorData.encode({ id, timestamp });\n  return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n}\n\nexport function decodeVisitorData(visitor_data: string): VisitorData {\n  return VisitorData.decode(base64ToU8(decodeURIComponent(visitor_data).replace(/-/g, '+').replace(/_/g, '/')));\n}\n\nexport function encodeCommentActionParams(type: number, args: CommentActionParamsArgs = {}): string {\n  const data: PeformCommentActionParams = {\n    type,\n    commentId: args.comment_id || ' ',\n    videoId: args.video_id || ' ',\n    channelId: ' ',\n    unkNum: 2\n  };\n\n  if (args.hasOwnProperty('text')) {\n    if (typeof args.target_language !== 'string')\n      throw new Error('target_language must be a string');\n\n    if (args.comment_id)\n      delete data.unkNum;\n\n    data.translateCommentParams = {\n      params: {\n        comment: {\n          text: args.text as string\n        }\n      },\n      commentId: args.comment_id || ' ',\n      targetLanguage: args.target_language\n    };\n  }\n\n  const writer = PeformCommentActionParams.encode(data);\n  return encodeURIComponent(u8ToBase64(writer.finish()));\n}\n\nexport function encodeNextParams(video_ids: string[]): string {\n  const writer = NextParams.encode({ videoId: video_ids });\n  return encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n}", "// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it.  This code is not\n// standalone and requires a support library to be linked with it.  This\n// support library is itself covered by the above license.\n/* eslint-disable prefer-const,@typescript-eslint/restrict-plus-operands */\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nexport function varint64read() {\n    let lowBits = 0;\n    let highBits = 0;\n    for (let shift = 0; shift < 28; shift += 7) {\n        let b = this.buf[this.pos++];\n        lowBits |= (b & 0x7f) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    let middleByte = this.buf[this.pos++];\n    // last four bits of the first 32 bit number\n    lowBits |= (middleByte & 0x0f) << 28;\n    // 3 upper bits are part of the next 32 bit number\n    highBits = (middleByte & 0x70) >> 4;\n    if ((middleByte & 0x80) == 0) {\n        this.assertBounds();\n        return [lowBits, highBits];\n    }\n    for (let shift = 3; shift <= 31; shift += 7) {\n        let b = this.buf[this.pos++];\n        highBits |= (b & 0x7f) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nexport function varint64write(lo, hi, bytes) {\n    for (let i = 0; i < 28; i = i + 7) {\n        const shift = lo >>> i;\n        const hasNext = !(shift >>> 7 == 0 && hi == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    const splitBits = ((lo >>> 28) & 0x0f) | ((hi & 0x07) << 4);\n    const hasMoreBits = !(hi >> 3 == 0);\n    bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n    if (!hasMoreBits) {\n        return;\n    }\n    for (let i = 3; i < 31; i = i + 7) {\n        const shift = hi >>> i;\n        const hasNext = !(shift >>> 7 == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    bytes.push((hi >>> 31) & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64FromString(dec) {\n    // Check for minus sign.\n    const minus = dec[0] === \"-\";\n    if (minus) {\n        dec = dec.slice(1);\n    }\n    // Work 6 decimal digits at a time, acting like we're converting base 1e6\n    // digits to binary. This is safe to do with floating point math because\n    // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n    const base = 1e6;\n    let lowBits = 0;\n    let highBits = 0;\n    function add1e6digit(begin, end) {\n        // Note: Number('') is 0.\n        const digit1e6 = Number(dec.slice(begin, end));\n        highBits *= base;\n        lowBits = lowBits * base + digit1e6;\n        // Carry bits from lowBits to\n        if (lowBits >= TWO_PWR_32_DBL) {\n            highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n            lowBits = lowBits % TWO_PWR_32_DBL;\n        }\n    }\n    add1e6digit(-24, -18);\n    add1e6digit(-18, -12);\n    add1e6digit(-12, -6);\n    add1e6digit(-6);\n    return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function int64ToString(lo, hi) {\n    let bits = newBits(lo, hi);\n    // If we're treating the input as a signed value and the high bit is set, do\n    // a manual two's complement conversion before the decimal conversion.\n    const negative = bits.hi & 0x80000000;\n    if (negative) {\n        bits = negate(bits.lo, bits.hi);\n    }\n    const result = uInt64ToString(bits.lo, bits.hi);\n    return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nexport function uInt64ToString(lo, hi) {\n    ({ lo, hi } = toUnsigned(lo, hi));\n    // Skip the expensive conversion if the number is small enough to use the\n    // built-in conversions.\n    // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n    // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n    // integer precision.\n    // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n    if (hi <= 0x1fffff) {\n        return String(TWO_PWR_32_DBL * hi + lo);\n    }\n    // What this code is doing is essentially converting the input number from\n    // base-2 to base-1e7, which allows us to represent the 64-bit range with\n    // only 3 (very large) digits. Those digits are then trivial to convert to\n    // a base-10 string.\n    // The magic numbers used here are -\n    // 2^24 = 16777216 = (1,6777216) in base-1e7.\n    // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n    // Split 32:32 representation into 16:24:24 representation so our\n    // intermediate digits don't overflow.\n    const low = lo & 0xffffff;\n    const mid = ((lo >>> 24) | (hi << 8)) & 0xffffff;\n    const high = (hi >> 16) & 0xffff;\n    // Assemble our three base-1e7 digits, ignoring carries. The maximum\n    // value in a digit at this step is representable as a 48-bit integer, which\n    // can be stored in a 64-bit floating point number.\n    let digitA = low + mid * 6777216 + high * 6710656;\n    let digitB = mid + high * 8147497;\n    let digitC = high * 2;\n    // Apply carries from A to B and from B to C.\n    const base = 10000000;\n    if (digitA >= base) {\n        digitB += Math.floor(digitA / base);\n        digitA %= base;\n    }\n    if (digitB >= base) {\n        digitC += Math.floor(digitB / base);\n        digitB %= base;\n    }\n    // If digitC is 0, then we should have returned in the trivial code path\n    // at the top for non-safe integers. Given this, we can assume both digitB\n    // and digitA need leading zeros.\n    return (digitC.toString() +\n        decimalFrom1e7WithLeadingZeros(digitB) +\n        decimalFrom1e7WithLeadingZeros(digitA));\n}\nfunction toUnsigned(lo, hi) {\n    return { lo: lo >>> 0, hi: hi >>> 0 };\n}\nfunction newBits(lo, hi) {\n    return { lo: lo | 0, hi: hi | 0 };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n    highBits = ~highBits;\n    if (lowBits) {\n        lowBits = ~lowBits + 1;\n    }\n    else {\n        // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n        // adding 1 to that, results in 0x100000000, which leaves\n        // the low bits 0x0 and simply adds one to the high bits.\n        highBits += 1;\n    }\n    return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = (digit1e7) => {\n    const partial = String(digit1e7);\n    return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nexport function varint32write(value, bytes) {\n    if (value >= 0) {\n        // write value as varint 32\n        while (value > 0x7f) {\n            bytes.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        bytes.push(value);\n    }\n    else {\n        for (let i = 0; i < 9; i++) {\n            bytes.push((value & 127) | 128);\n            value = value >> 7;\n        }\n        bytes.push(1);\n    }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nexport function varint32read() {\n    let b = this.buf[this.pos++];\n    let result = b & 0x7f;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 7;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 14;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7f) << 21;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    // Extract only last 4 bits\n    b = this.buf[this.pos++];\n    result |= (b & 0x0f) << 28;\n    for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++)\n        b = this.buf[this.pos++];\n    if ((b & 0x80) != 0)\n        throw new Error(\"invalid varint\");\n    this.assertBounds();\n    // Result can have 32 bits, convert it to unsigned\n    return result >>> 0;\n}\n", "// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { int64FromString, int64ToString, uInt64ToString, } from \"./wire/varint.js\";\n/**\n * Int64Support for the current environment.\n */\nexport const protoInt64 = /*@__PURE__*/ makeInt64Support();\nfunction makeInt64Support() {\n    const dv = new DataView(new ArrayBuffer(8));\n    // note that Safari 14 implements BigInt, but not the DataView methods\n    const ok = typeof BigInt === \"function\" &&\n        typeof dv.getBigInt64 === \"function\" &&\n        typeof dv.getBigUint64 === \"function\" &&\n        typeof dv.setBigInt64 === \"function\" &&\n        typeof dv.setBigUint64 === \"function\" &&\n        (typeof process != \"object\" ||\n            typeof process.env != \"object\" ||\n            process.env.BUF_BIGINT_DISABLE !== \"1\");\n    if (ok) {\n        const MIN = BigInt(\"-9223372036854775808\"), MAX = BigInt(\"9223372036854775807\"), UMIN = BigInt(\"0\"), UMAX = BigInt(\"18446744073709551615\");\n        return {\n            zero: BigInt(0),\n            supported: true,\n            parse(value) {\n                const bi = typeof value == \"bigint\" ? value : BigInt(value);\n                if (bi > MAX || bi < MIN) {\n                    throw new Error(`invalid int64: ${value}`);\n                }\n                return bi;\n            },\n            uParse(value) {\n                const bi = typeof value == \"bigint\" ? value : BigInt(value);\n                if (bi > UMAX || bi < UMIN) {\n                    throw new Error(`invalid uint64: ${value}`);\n                }\n                return bi;\n            },\n            enc(value) {\n                dv.setBigInt64(0, this.parse(value), true);\n                return {\n                    lo: dv.getInt32(0, true),\n                    hi: dv.getInt32(4, true),\n                };\n            },\n            uEnc(value) {\n                dv.setBigInt64(0, this.uParse(value), true);\n                return {\n                    lo: dv.getInt32(0, true),\n                    hi: dv.getInt32(4, true),\n                };\n            },\n            dec(lo, hi) {\n                dv.setInt32(0, lo, true);\n                dv.setInt32(4, hi, true);\n                return dv.getBigInt64(0, true);\n            },\n            uDec(lo, hi) {\n                dv.setInt32(0, lo, true);\n                dv.setInt32(4, hi, true);\n                return dv.getBigUint64(0, true);\n            },\n        };\n    }\n    return {\n        zero: \"0\",\n        supported: false,\n        parse(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertInt64String(value);\n            return value;\n        },\n        uParse(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertUInt64String(value);\n            return value;\n        },\n        enc(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertInt64String(value);\n            return int64FromString(value);\n        },\n        uEnc(value) {\n            if (typeof value != \"string\") {\n                value = value.toString();\n            }\n            assertUInt64String(value);\n            return int64FromString(value);\n        },\n        dec(lo, hi) {\n            return int64ToString(lo, hi);\n        },\n        uDec(lo, hi) {\n            return uInt64ToString(lo, hi);\n        },\n    };\n}\nfunction assertInt64String(value) {\n    if (!/^-?[0-9]+$/.test(value)) {\n        throw new Error(\"invalid int64: \" + value);\n    }\n}\nfunction assertUInt64String(value) {\n    if (!/^[0-9]+$/.test(value)) {\n        throw new Error(\"invalid uint64: \" + value);\n    }\n}\n", "// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nconst symbol = Symbol.for(\"@bufbuild/protobuf/text-encoding\");\n/**\n * Protobuf-ES requires the Text Encoding API to convert UTF-8 from and to\n * binary. This WHATWG API is widely available, but it is not part of the\n * ECMAScript standard. On runtimes where it is not available, use this\n * function to provide your own implementation.\n *\n * Note that the Text Encoding API does not provide a way to validate UTF-8.\n * Our implementation falls back to use encodeURIComponent().\n */\nexport function configureTextEncoding(textEncoding) {\n    globalThis[symbol] = textEncoding;\n}\nexport function getTextEncoding() {\n    if (globalThis[symbol] == undefined) {\n        const te = new globalThis.TextEncoder();\n        const td = new globalThis.TextDecoder();\n        globalThis[symbol] = {\n            encodeUtf8(text) {\n                return te.encode(text);\n            },\n            decodeUtf8(bytes) {\n                return td.decode(bytes);\n            },\n            checkUtf8(text) {\n                try {\n                    encodeURIComponent(text);\n                    return true;\n                }\n                catch (e) {\n                    return false;\n                }\n            },\n        };\n    }\n    return globalThis[symbol];\n}\n", "// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { varint32read, varint32write, varint64read, varint64write, } from \"./varint.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\nimport { getTextEncoding } from \"./text-encoding.js\";\n/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/restrict-plus-operands */\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nexport var WireType;\n(function (WireType) {\n    /**\n     * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n     */\n    WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n    /**\n     * Used for fixed64, sfixed64, double.\n     * Always 8 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n    /**\n     * Used for string, bytes, embedded messages, packed repeated fields\n     *\n     * Only repeated numeric types (types which use the varint, 32-bit,\n     * or 64-bit wire types) can be packed. In proto3, such fields are\n     * packed by default.\n     */\n    WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n    /**\n     * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n     * in editions with message_encoding = DELIMITED.\n     */\n    WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n    /**\n     * End of a tag-delimited aggregate.\n     */\n    WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n    /**\n     * Used for fixed32, sfixed32, float.\n     * Always 4 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\n/**\n * Maximum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MAX = 3.4028234663852886e38;\n/**\n * Minimum value for a 32-bit floating point value (Protobuf FLOAT).\n */\nexport const FLOAT32_MIN = -3.4028234663852886e38;\n/**\n * Maximum value for an unsigned 32-bit integer (Protobuf UINT32, FIXED32).\n */\nexport const UINT32_MAX = 0xffffffff;\n/**\n * Maximum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MAX = 0x7fffffff;\n/**\n * Minimum value for a signed 32-bit integer (Protobuf INT32, SFIXED32, SINT32).\n */\nexport const INT32_MIN = -0x80000000;\nexport class BinaryWriter {\n    constructor(encodeUtf8 = getTextEncoding().encodeUtf8) {\n        this.encodeUtf8 = encodeUtf8;\n        /**\n         * Previous fork states.\n         */\n        this.stack = [];\n        this.chunks = [];\n        this.buf = [];\n    }\n    /**\n     * Return all bytes written and reset this writer.\n     */\n    finish() {\n        this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n        let len = 0;\n        for (let i = 0; i < this.chunks.length; i++)\n            len += this.chunks[i].length;\n        let bytes = new Uint8Array(len);\n        let offset = 0;\n        for (let i = 0; i < this.chunks.length; i++) {\n            bytes.set(this.chunks[i], offset);\n            offset += this.chunks[i].length;\n        }\n        this.chunks = [];\n        return bytes;\n    }\n    /**\n     * Start a new fork for length-delimited data like a message\n     * or a packed repeated field.\n     *\n     * Must be joined later with `join()`.\n     */\n    fork() {\n        this.stack.push({ chunks: this.chunks, buf: this.buf });\n        this.chunks = [];\n        this.buf = [];\n        return this;\n    }\n    /**\n     * Join the last fork. Write its length and bytes, then\n     * return to the previous state.\n     */\n    join() {\n        // get chunk of fork\n        let chunk = this.finish();\n        // restore previous state\n        let prev = this.stack.pop();\n        if (!prev)\n            throw new Error(\"invalid state, fork stack empty\");\n        this.chunks = prev.chunks;\n        this.buf = prev.buf;\n        // write length of chunk as varint\n        this.uint32(chunk.byteLength);\n        return this.raw(chunk);\n    }\n    /**\n     * Writes a tag (field number and wire type).\n     *\n     * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n     *\n     * Generated code should compute the tag ahead of time and call `uint32()`.\n     */\n    tag(fieldNo, type) {\n        return this.uint32(((fieldNo << 3) | type) >>> 0);\n    }\n    /**\n     * Write a chunk of raw bytes.\n     */\n    raw(chunk) {\n        if (this.buf.length) {\n            this.chunks.push(new Uint8Array(this.buf));\n            this.buf = [];\n        }\n        this.chunks.push(chunk);\n        return this;\n    }\n    /**\n     * Write a `uint32` value, an unsigned 32 bit varint.\n     */\n    uint32(value) {\n        assertUInt32(value);\n        // write value as varint 32, inlined for speed\n        while (value > 0x7f) {\n            this.buf.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        this.buf.push(value);\n        return this;\n    }\n    /**\n     * Write a `int32` value, a signed 32 bit varint.\n     */\n    int32(value) {\n        assertInt32(value);\n        varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `bool` value, a variant.\n     */\n    bool(value) {\n        this.buf.push(value ? 1 : 0);\n        return this;\n    }\n    /**\n     * Write a `bytes` value, length-delimited arbitrary data.\n     */\n    bytes(value) {\n        this.uint32(value.byteLength); // write length of chunk as varint\n        return this.raw(value);\n    }\n    /**\n     * Write a `string` value, length-delimited data converted to UTF-8 text.\n     */\n    string(value) {\n        let chunk = this.encodeUtf8(value);\n        this.uint32(chunk.byteLength); // write length of chunk as varint\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `float` value, 32-bit floating point number.\n     */\n    float(value) {\n        assertFloat32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setFloat32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `double` value, a 64-bit floating point number.\n     */\n    double(value) {\n        let chunk = new Uint8Array(8);\n        new DataView(chunk.buffer).setFloat64(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32(value) {\n        assertUInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setUint32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32(value) {\n        assertInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setInt32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32(value) {\n        assertInt32(value);\n        // zigzag encode\n        value = ((value << 1) ^ (value >> 31)) >>> 0;\n        varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64(value) {\n        let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.enc(value);\n        view.setInt32(0, tc.lo, true);\n        view.setInt32(4, tc.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64(value) {\n        let chunk = new Uint8Array(8), view = new DataView(chunk.buffer), tc = protoInt64.uEnc(value);\n        view.setInt32(0, tc.lo, true);\n        view.setInt32(4, tc.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `int64` value, a signed 64-bit varint.\n     */\n    int64(value) {\n        let tc = protoInt64.enc(value);\n        varint64write(tc.lo, tc.hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64(value) {\n        let tc = protoInt64.enc(value), \n        // zigzag encode\n        sign = tc.hi >> 31, lo = (tc.lo << 1) ^ sign, hi = ((tc.hi << 1) | (tc.lo >>> 31)) ^ sign;\n        varint64write(lo, hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `uint64` value, an unsigned 64-bit varint.\n     */\n    uint64(value) {\n        let tc = protoInt64.uEnc(value);\n        varint64write(tc.lo, tc.hi, this.buf);\n        return this;\n    }\n}\nexport class BinaryReader {\n    constructor(buf, decodeUtf8 = getTextEncoding().decodeUtf8) {\n        this.decodeUtf8 = decodeUtf8;\n        this.varint64 = varint64read; // dirty cast for `this`\n        /**\n         * Read a `uint32` field, an unsigned 32 bit varint.\n         */\n        this.uint32 = varint32read;\n        this.buf = buf;\n        this.len = buf.length;\n        this.pos = 0;\n        this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n    }\n    /**\n     * Reads a tag - field number and wire type.\n     */\n    tag() {\n        let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n        if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n            throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n        return [fieldNo, wireType];\n    }\n    /**\n     * Skip one element and return the skipped data.\n     *\n     * When skipping StartGroup, provide the tags field number to check for\n     * matching field number in the EndGroup tag.\n     */\n    skip(wireType, fieldNo) {\n        let start = this.pos;\n        switch (wireType) {\n            case WireType.Varint:\n                while (this.buf[this.pos++] & 0x80) {\n                    // ignore\n                }\n                break;\n            // eslint-disable-next-line\n            // @ts-expect-error TS7029: Fallthrough case in switch\n            case WireType.Bit64:\n                this.pos += 4;\n            // eslint-disable-next-line no-fallthrough\n            case WireType.Bit32:\n                this.pos += 4;\n                break;\n            case WireType.LengthDelimited:\n                let len = this.uint32();\n                this.pos += len;\n                break;\n            case WireType.StartGroup:\n                for (;;) {\n                    const [fn, wt] = this.tag();\n                    if (wt === WireType.EndGroup) {\n                        if (fieldNo !== undefined && fn !== fieldNo) {\n                            throw new Error(\"invalid end group tag\");\n                        }\n                        break;\n                    }\n                    this.skip(wt, fn);\n                }\n                break;\n            default:\n                throw new Error(\"cant skip wire type \" + wireType);\n        }\n        this.assertBounds();\n        return this.buf.subarray(start, this.pos);\n    }\n    /**\n     * Throws error if position in byte array is out of range.\n     */\n    assertBounds() {\n        if (this.pos > this.len)\n            throw new RangeError(\"premature EOF\");\n    }\n    /**\n     * Read a `int32` field, a signed 32 bit varint.\n     */\n    int32() {\n        return this.uint32() | 0;\n    }\n    /**\n     * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32() {\n        let zze = this.uint32();\n        // decode zigzag\n        return (zze >>> 1) ^ -(zze & 1);\n    }\n    /**\n     * Read a `int64` field, a signed 64-bit varint.\n     */\n    int64() {\n        return protoInt64.dec(...this.varint64());\n    }\n    /**\n     * Read a `uint64` field, an unsigned 64-bit varint.\n     */\n    uint64() {\n        return protoInt64.uDec(...this.varint64());\n    }\n    /**\n     * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64() {\n        let [lo, hi] = this.varint64();\n        // decode zig zag\n        let s = -(lo & 1);\n        lo = ((lo >>> 1) | ((hi & 1) << 31)) ^ s;\n        hi = (hi >>> 1) ^ s;\n        return protoInt64.dec(lo, hi);\n    }\n    /**\n     * Read a `bool` field, a variant.\n     */\n    bool() {\n        let [lo, hi] = this.varint64();\n        return lo !== 0 || hi !== 0;\n    }\n    /**\n     * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32() {\n        return this.view.getUint32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32() {\n        return this.view.getInt32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64() {\n        return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64() {\n        return protoInt64.dec(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `float` field, 32-bit floating point number.\n     */\n    float() {\n        return this.view.getFloat32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `double` field, a 64-bit floating point number.\n     */\n    double() {\n        return this.view.getFloat64((this.pos += 8) - 8, true);\n    }\n    /**\n     * Read a `bytes` field, length-delimited arbitrary data.\n     */\n    bytes() {\n        let len = this.uint32(), start = this.pos;\n        this.pos += len;\n        this.assertBounds();\n        return this.buf.subarray(start, start + len);\n    }\n    /**\n     * Read a `string` field, length-delimited data converted to UTF-8 text.\n     */\n    string() {\n        return this.decodeUtf8(this.bytes());\n    }\n}\n/**\n * Assert a valid signed protobuf 32-bit integer as a number or string.\n */\nfunction assertInt32(arg) {\n    if (typeof arg == \"string\") {\n        arg = Number(arg);\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid int32: \" + typeof arg);\n    }\n    if (!Number.isInteger(arg) ||\n        arg > INT32_MAX ||\n        arg < INT32_MIN)\n        throw new Error(\"invalid int32: \" + arg);\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer as a number or string.\n */\nfunction assertUInt32(arg) {\n    if (typeof arg == \"string\") {\n        arg = Number(arg);\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid uint32: \" + typeof arg);\n    }\n    if (!Number.isInteger(arg) ||\n        arg > UINT32_MAX ||\n        arg < 0)\n        throw new Error(\"invalid uint32: \" + arg);\n}\n/**\n * Assert a valid protobuf float value as a number or string.\n */\nfunction assertFloat32(arg) {\n    if (typeof arg == \"string\") {\n        const o = arg;\n        arg = Number(arg);\n        if (isNaN(arg) && o !== \"NaN\") {\n            throw new Error(\"invalid float32: \" + o);\n        }\n    }\n    else if (typeof arg != \"number\") {\n        throw new Error(\"invalid float32: \" + typeof arg);\n    }\n    if (Number.isFinite(arg) &&\n        (arg > FLOAT32_MAX || arg < FLOAT32_MIN))\n        throw new Error(\"invalid float32: \" + arg);\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: misc/params.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"misc\";\n\nexport interface VisitorData {\n  id: string;\n  timestamp: number;\n}\n\nexport interface SearchFilter {\n  sortBy?: SearchFilter_SortBy | undefined;\n  filters?: SearchFilter_Filters | undefined;\n}\n\nexport enum SearchFilter_SortBy {\n  RELEVANCE = 0,\n  RATING = 1,\n  UPLOAD_DATE = 2,\n  VIEW_COUNT = 3,\n  UNRECOGNIZED = -1,\n}\n\nexport interface SearchFilter_Filters {\n  uploadDate?: SearchFilter_Filters_UploadDate | undefined;\n  type?: SearchFilter_Filters_SearchType | undefined;\n  duration?: SearchFilter_Filters_Duration | undefined;\n  musicSearchType?: SearchFilter_Filters_MusicSearchType | undefined;\n  featuresHd?: boolean | undefined;\n  featuresSubtitles?: boolean | undefined;\n  featuresCreativeCommons?: boolean | undefined;\n  features3d?: boolean | undefined;\n  featuresLive?: boolean | undefined;\n  featuresPurchased?: boolean | undefined;\n  features4k?: boolean | undefined;\n  features360?: boolean | undefined;\n  featuresLocation?: boolean | undefined;\n  featuresHdr?: boolean | undefined;\n  featuresVr180?: boolean | undefined;\n}\n\nexport enum SearchFilter_Filters_UploadDate {\n  ANY_DATE = 0,\n  HOUR = 1,\n  TODAY = 2,\n  WEEK = 3,\n  MONTH = 4,\n  YEAR = 5,\n  UNRECOGNIZED = -1,\n}\n\nexport enum SearchFilter_Filters_SearchType {\n  ANY_TYPE = 0,\n  VIDEO = 1,\n  CHANNEL = 2,\n  PLAYLIST = 3,\n  MOVIE = 4,\n  UNRECOGNIZED = -1,\n}\n\nexport enum SearchFilter_Filters_Duration {\n  ANY_DURATION = 0,\n  SHORT = 1,\n  LONG = 2,\n  MEDIUM = 3,\n  UNRECOGNIZED = -1,\n}\n\nexport interface SearchFilter_Filters_MusicSearchType {\n  song?: boolean | undefined;\n  video?: boolean | undefined;\n  album?: boolean | undefined;\n  artist?: boolean | undefined;\n  playlist?: boolean | undefined;\n}\n\nexport interface ChannelAnalytics {\n  params: ChannelAnalytics_Params | undefined;\n}\n\nexport interface ChannelAnalytics_Params {\n  channelId: string;\n}\n\nexport interface SoundInfoParams {\n  sound: SoundInfoParams_Sound | undefined;\n}\n\nexport interface SoundInfoParams_Sound {\n  params: SoundInfoParams_Sound_Params | undefined;\n}\n\nexport interface SoundInfoParams_Sound_Params {\n  ids: SoundInfoParams_Sound_Params_Ids | undefined;\n}\n\nexport interface SoundInfoParams_Sound_Params_Ids {\n  id1: string;\n  id2: string;\n  id3: string;\n}\n\nexport interface NotificationPreferences {\n  channelId: string;\n  prefId: NotificationPreferences_Preference | undefined;\n  number0?: number | undefined;\n  number1?: number | undefined;\n}\n\nexport interface NotificationPreferences_Preference {\n  index: number;\n}\n\nexport interface LiveMessageParams {\n  params: LiveMessageParams_Params | undefined;\n  number0?: number | undefined;\n  number1?: number | undefined;\n}\n\nexport interface LiveMessageParams_Params {\n  ids: LiveMessageParams_Params_Ids | undefined;\n}\n\nexport interface LiveMessageParams_Params_Ids {\n  channelId: string;\n  videoId: string;\n}\n\nexport interface GetCommentsSectionParams {\n  ctx: GetCommentsSectionParams_Context | undefined;\n  unkParam: number;\n  params: GetCommentsSectionParams_Params | undefined;\n}\n\nexport interface GetCommentsSectionParams_Context {\n  videoId: string;\n}\n\nexport interface GetCommentsSectionParams_Params {\n  unkToken?: string | undefined;\n  opts?: GetCommentsSectionParams_Params_Options | undefined;\n  repliesOpts?: GetCommentsSectionParams_Params_RepliesOptions | undefined;\n  page?: number | undefined;\n  target: string;\n}\n\nexport interface GetCommentsSectionParams_Params_Options {\n  videoId: string;\n  sortBy: number;\n  type: number;\n  commentId?: string | undefined;\n}\n\nexport interface GetCommentsSectionParams_Params_RepliesOptions {\n  commentId: string;\n  unkopts: GetCommentsSectionParams_Params_RepliesOptions_UnkOpts | undefined;\n  channelId?: string | undefined;\n  videoId: string;\n  unkParam1: number;\n  unkParam2: number;\n}\n\nexport interface GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n  unkParam: number;\n}\n\nexport interface CreateCommentParams {\n  videoId: string;\n  params: CreateCommentParams_Params | undefined;\n  number: number;\n}\n\nexport interface CreateCommentParams_Params {\n  index: number;\n}\n\nexport interface PeformCommentActionParams {\n  type: number;\n  commentId: string;\n  videoId: string;\n  unkNum?: number | undefined;\n  channelId?: string | undefined;\n  translateCommentParams?: PeformCommentActionParams_TranslateCommentParams | undefined;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams {\n  params: PeformCommentActionParams_TranslateCommentParams_Params | undefined;\n  commentId: string;\n  targetLanguage: string;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams_Params {\n  comment: PeformCommentActionParams_TranslateCommentParams_Params_Comment | undefined;\n}\n\nexport interface PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n  text: string;\n}\n\nexport interface Hashtag {\n  params: Hashtag_Params | undefined;\n}\n\nexport interface Hashtag_Params {\n  hashtag: string;\n  type: number;\n}\n\nexport interface ReelSequence {\n  shortId: string;\n  params: ReelSequence_Params | undefined;\n  feature2: number;\n  feature3: number;\n}\n\nexport interface ReelSequence_Params {\n  number: number;\n}\n\nexport interface ShortsParam {\n  f1?: ShortsParam_Field1 | undefined;\n  p59?: number | undefined;\n}\n\nexport interface ShortsParam_Field1 {\n  p1?: number | undefined;\n}\n\nexport interface NextParams {\n  videoId: string[];\n}\n\nexport interface CommunityPostParams {\n  f1: CommunityPostParams_Field1 | undefined;\n}\n\nexport interface CommunityPostParams_Field1 {\n  ucid1: string;\n  postId: string;\n  ucid2: string;\n}\n\nexport interface CommunityPostCommentsParamContainer {\n  f0: CommunityPostCommentsParamContainer_Container | undefined;\n}\n\nexport interface CommunityPostCommentsParamContainer_Container {\n  location: string;\n  protoData: string;\n}\n\nexport interface CommunityPostCommentsParam {\n  title: string;\n  commentDataContainer: CommunityPostCommentsParam_CommentDataContainer | undefined;\n}\n\nexport interface CommunityPostCommentsParam_CommentDataContainer {\n  commentData: CommunityPostCommentsParam_CommentDataContainer_CommentData | undefined;\n  f0: number;\n  title: string;\n}\n\nexport interface CommunityPostCommentsParam_CommentDataContainer_CommentData {\n  sortBy: number;\n  f0: number;\n  f1: number;\n  postId: string;\n  channelId: string;\n}\n\nfunction createBaseVisitorData(): VisitorData {\n  return { id: \"\", timestamp: 0 };\n}\n\nexport const VisitorData: MessageFns<VisitorData> = {\n  encode(message: VisitorData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.id !== \"\") {\n      writer.uint32(10).string(message.id);\n    }\n    if (message.timestamp !== 0) {\n      writer.uint32(40).int32(message.timestamp);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): VisitorData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseVisitorData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.id = reader.string();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.timestamp = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter(): SearchFilter {\n  return { sortBy: undefined, filters: undefined };\n}\n\nexport const SearchFilter: MessageFns<SearchFilter> = {\n  encode(message: SearchFilter, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.sortBy !== undefined) {\n      writer.uint32(8).int32(message.sortBy);\n    }\n    if (message.filters !== undefined) {\n      SearchFilter_Filters.encode(message.filters, writer.uint32(18).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.sortBy = reader.int32() as any;\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.filters = SearchFilter_Filters.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter_Filters(): SearchFilter_Filters {\n  return {\n    uploadDate: undefined,\n    type: undefined,\n    duration: undefined,\n    musicSearchType: undefined,\n    featuresHd: undefined,\n    featuresSubtitles: undefined,\n    featuresCreativeCommons: undefined,\n    features3d: undefined,\n    featuresLive: undefined,\n    featuresPurchased: undefined,\n    features4k: undefined,\n    features360: undefined,\n    featuresLocation: undefined,\n    featuresHdr: undefined,\n    featuresVr180: undefined,\n  };\n}\n\nexport const SearchFilter_Filters: MessageFns<SearchFilter_Filters> = {\n  encode(message: SearchFilter_Filters, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.uploadDate !== undefined) {\n      writer.uint32(8).int32(message.uploadDate);\n    }\n    if (message.type !== undefined) {\n      writer.uint32(16).int32(message.type);\n    }\n    if (message.duration !== undefined) {\n      writer.uint32(24).int32(message.duration);\n    }\n    if (message.musicSearchType !== undefined) {\n      SearchFilter_Filters_MusicSearchType.encode(message.musicSearchType, writer.uint32(138).fork()).join();\n    }\n    if (message.featuresHd !== undefined) {\n      writer.uint32(32).bool(message.featuresHd);\n    }\n    if (message.featuresSubtitles !== undefined) {\n      writer.uint32(40).bool(message.featuresSubtitles);\n    }\n    if (message.featuresCreativeCommons !== undefined) {\n      writer.uint32(48).bool(message.featuresCreativeCommons);\n    }\n    if (message.features3d !== undefined) {\n      writer.uint32(56).bool(message.features3d);\n    }\n    if (message.featuresLive !== undefined) {\n      writer.uint32(64).bool(message.featuresLive);\n    }\n    if (message.featuresPurchased !== undefined) {\n      writer.uint32(72).bool(message.featuresPurchased);\n    }\n    if (message.features4k !== undefined) {\n      writer.uint32(112).bool(message.features4k);\n    }\n    if (message.features360 !== undefined) {\n      writer.uint32(120).bool(message.features360);\n    }\n    if (message.featuresLocation !== undefined) {\n      writer.uint32(184).bool(message.featuresLocation);\n    }\n    if (message.featuresHdr !== undefined) {\n      writer.uint32(200).bool(message.featuresHdr);\n    }\n    if (message.featuresVr180 !== undefined) {\n      writer.uint32(208).bool(message.featuresVr180);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter_Filters {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter_Filters();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.uploadDate = reader.int32() as any;\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.type = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.duration = reader.int32() as any;\n          continue;\n        case 17:\n          if (tag !== 138) {\n            break;\n          }\n\n          message.musicSearchType = SearchFilter_Filters_MusicSearchType.decode(reader, reader.uint32());\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.featuresHd = reader.bool();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.featuresSubtitles = reader.bool();\n          continue;\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.featuresCreativeCommons = reader.bool();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.features3d = reader.bool();\n          continue;\n        case 8:\n          if (tag !== 64) {\n            break;\n          }\n\n          message.featuresLive = reader.bool();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.featuresPurchased = reader.bool();\n          continue;\n        case 14:\n          if (tag !== 112) {\n            break;\n          }\n\n          message.features4k = reader.bool();\n          continue;\n        case 15:\n          if (tag !== 120) {\n            break;\n          }\n\n          message.features360 = reader.bool();\n          continue;\n        case 23:\n          if (tag !== 184) {\n            break;\n          }\n\n          message.featuresLocation = reader.bool();\n          continue;\n        case 25:\n          if (tag !== 200) {\n            break;\n          }\n\n          message.featuresHdr = reader.bool();\n          continue;\n        case 26:\n          if (tag !== 208) {\n            break;\n          }\n\n          message.featuresVr180 = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSearchFilter_Filters_MusicSearchType(): SearchFilter_Filters_MusicSearchType {\n  return { song: undefined, video: undefined, album: undefined, artist: undefined, playlist: undefined };\n}\n\nexport const SearchFilter_Filters_MusicSearchType: MessageFns<SearchFilter_Filters_MusicSearchType> = {\n  encode(message: SearchFilter_Filters_MusicSearchType, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.song !== undefined) {\n      writer.uint32(8).bool(message.song);\n    }\n    if (message.video !== undefined) {\n      writer.uint32(16).bool(message.video);\n    }\n    if (message.album !== undefined) {\n      writer.uint32(24).bool(message.album);\n    }\n    if (message.artist !== undefined) {\n      writer.uint32(32).bool(message.artist);\n    }\n    if (message.playlist !== undefined) {\n      writer.uint32(40).bool(message.playlist);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SearchFilter_Filters_MusicSearchType {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSearchFilter_Filters_MusicSearchType();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.song = reader.bool();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.video = reader.bool();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.album = reader.bool();\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.artist = reader.bool();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.playlist = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseChannelAnalytics(): ChannelAnalytics {\n  return { params: undefined };\n}\n\nexport const ChannelAnalytics: MessageFns<ChannelAnalytics> = {\n  encode(message: ChannelAnalytics, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      ChannelAnalytics_Params.encode(message.params, writer.uint32(258).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ChannelAnalytics {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseChannelAnalytics();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 32:\n          if (tag !== 258) {\n            break;\n          }\n\n          message.params = ChannelAnalytics_Params.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseChannelAnalytics_Params(): ChannelAnalytics_Params {\n  return { channelId: \"\" };\n}\n\nexport const ChannelAnalytics_Params: MessageFns<ChannelAnalytics_Params> = {\n  encode(message: ChannelAnalytics_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(8010).string(message.channelId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ChannelAnalytics_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseChannelAnalytics_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1001:\n          if (tag !== 8010) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams(): SoundInfoParams {\n  return { sound: undefined };\n}\n\nexport const SoundInfoParams: MessageFns<SoundInfoParams> = {\n  encode(message: SoundInfoParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.sound !== undefined) {\n      SoundInfoParams_Sound.encode(message.sound, writer.uint32(754).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 94:\n          if (tag !== 754) {\n            break;\n          }\n\n          message.sound = SoundInfoParams_Sound.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound(): SoundInfoParams_Sound {\n  return { params: undefined };\n}\n\nexport const SoundInfoParams_Sound: MessageFns<SoundInfoParams_Sound> = {\n  encode(message: SoundInfoParams_Sound, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      SoundInfoParams_Sound_Params.encode(message.params, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params = SoundInfoParams_Sound_Params.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound_Params(): SoundInfoParams_Sound_Params {\n  return { ids: undefined };\n}\n\nexport const SoundInfoParams_Sound_Params: MessageFns<SoundInfoParams_Sound_Params> = {\n  encode(message: SoundInfoParams_Sound_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ids !== undefined) {\n      SoundInfoParams_Sound_Params_Ids.encode(message.ids, writer.uint32(18).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ids = SoundInfoParams_Sound_Params_Ids.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseSoundInfoParams_Sound_Params_Ids(): SoundInfoParams_Sound_Params_Ids {\n  return { id1: \"\", id2: \"\", id3: \"\" };\n}\n\nexport const SoundInfoParams_Sound_Params_Ids: MessageFns<SoundInfoParams_Sound_Params_Ids> = {\n  encode(message: SoundInfoParams_Sound_Params_Ids, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.id1 !== \"\") {\n      writer.uint32(10).string(message.id1);\n    }\n    if (message.id2 !== \"\") {\n      writer.uint32(18).string(message.id2);\n    }\n    if (message.id3 !== \"\") {\n      writer.uint32(26).string(message.id3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): SoundInfoParams_Sound_Params_Ids {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseSoundInfoParams_Sound_Params_Ids();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.id1 = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.id2 = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.id3 = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNotificationPreferences(): NotificationPreferences {\n  return { channelId: \"\", prefId: undefined, number0: undefined, number1: undefined };\n}\n\nexport const NotificationPreferences: MessageFns<NotificationPreferences> = {\n  encode(message: NotificationPreferences, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(10).string(message.channelId);\n    }\n    if (message.prefId !== undefined) {\n      NotificationPreferences_Preference.encode(message.prefId, writer.uint32(18).fork()).join();\n    }\n    if (message.number0 !== undefined) {\n      writer.uint32(24).int32(message.number0);\n    }\n    if (message.number1 !== undefined) {\n      writer.uint32(32).int32(message.number1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NotificationPreferences {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNotificationPreferences();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.prefId = NotificationPreferences_Preference.decode(reader, reader.uint32());\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number0 = reader.int32();\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.number1 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNotificationPreferences_Preference(): NotificationPreferences_Preference {\n  return { index: 0 };\n}\n\nexport const NotificationPreferences_Preference: MessageFns<NotificationPreferences_Preference> = {\n  encode(message: NotificationPreferences_Preference, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.index !== 0) {\n      writer.uint32(8).int32(message.index);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NotificationPreferences_Preference {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNotificationPreferences_Preference();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.index = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams(): LiveMessageParams {\n  return { params: undefined, number0: undefined, number1: undefined };\n}\n\nexport const LiveMessageParams: MessageFns<LiveMessageParams> = {\n  encode(message: LiveMessageParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      LiveMessageParams_Params.encode(message.params, writer.uint32(10).fork()).join();\n    }\n    if (message.number0 !== undefined) {\n      writer.uint32(16).int32(message.number0);\n    }\n    if (message.number1 !== undefined) {\n      writer.uint32(24).int32(message.number1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params = LiveMessageParams_Params.decode(reader, reader.uint32());\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.number0 = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number1 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams_Params(): LiveMessageParams_Params {\n  return { ids: undefined };\n}\n\nexport const LiveMessageParams_Params: MessageFns<LiveMessageParams_Params> = {\n  encode(message: LiveMessageParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ids !== undefined) {\n      LiveMessageParams_Params_Ids.encode(message.ids, writer.uint32(42).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.ids = LiveMessageParams_Params_Ids.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseLiveMessageParams_Params_Ids(): LiveMessageParams_Params_Ids {\n  return { channelId: \"\", videoId: \"\" };\n}\n\nexport const LiveMessageParams_Params_Ids: MessageFns<LiveMessageParams_Params_Ids> = {\n  encode(message: LiveMessageParams_Params_Ids, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.channelId !== \"\") {\n      writer.uint32(10).string(message.channelId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): LiveMessageParams_Params_Ids {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseLiveMessageParams_Params_Ids();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams(): GetCommentsSectionParams {\n  return { ctx: undefined, unkParam: 0, params: undefined };\n}\n\nexport const GetCommentsSectionParams: MessageFns<GetCommentsSectionParams> = {\n  encode(message: GetCommentsSectionParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ctx !== undefined) {\n      GetCommentsSectionParams_Context.encode(message.ctx, writer.uint32(18).fork()).join();\n    }\n    if (message.unkParam !== 0) {\n      writer.uint32(24).int32(message.unkParam);\n    }\n    if (message.params !== undefined) {\n      GetCommentsSectionParams_Params.encode(message.params, writer.uint32(50).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ctx = GetCommentsSectionParams_Context.decode(reader, reader.uint32());\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.unkParam = reader.int32();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.params = GetCommentsSectionParams_Params.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Context(): GetCommentsSectionParams_Context {\n  return { videoId: \"\" };\n}\n\nexport const GetCommentsSectionParams_Context: MessageFns<GetCommentsSectionParams_Context> = {\n  encode(message: GetCommentsSectionParams_Context, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Context {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Context();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params(): GetCommentsSectionParams_Params {\n  return { unkToken: undefined, opts: undefined, repliesOpts: undefined, page: undefined, target: \"\" };\n}\n\nexport const GetCommentsSectionParams_Params: MessageFns<GetCommentsSectionParams_Params> = {\n  encode(message: GetCommentsSectionParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.unkToken !== undefined) {\n      writer.uint32(10).string(message.unkToken);\n    }\n    if (message.opts !== undefined) {\n      GetCommentsSectionParams_Params_Options.encode(message.opts, writer.uint32(34).fork()).join();\n    }\n    if (message.repliesOpts !== undefined) {\n      GetCommentsSectionParams_Params_RepliesOptions.encode(message.repliesOpts, writer.uint32(26).fork()).join();\n    }\n    if (message.page !== undefined) {\n      writer.uint32(40).int32(message.page);\n    }\n    if (message.target !== \"\") {\n      writer.uint32(66).string(message.target);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.unkToken = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.opts = GetCommentsSectionParams_Params_Options.decode(reader, reader.uint32());\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.repliesOpts = GetCommentsSectionParams_Params_RepliesOptions.decode(reader, reader.uint32());\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.page = reader.int32();\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.target = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_Options(): GetCommentsSectionParams_Params_Options {\n  return { videoId: \"\", sortBy: 0, type: 0, commentId: undefined };\n}\n\nexport const GetCommentsSectionParams_Params_Options: MessageFns<GetCommentsSectionParams_Params_Options> = {\n  encode(message: GetCommentsSectionParams_Params_Options, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(34).string(message.videoId);\n    }\n    if (message.sortBy !== 0) {\n      writer.uint32(48).int32(message.sortBy);\n    }\n    if (message.type !== 0) {\n      writer.uint32(120).int32(message.type);\n    }\n    if (message.commentId !== undefined) {\n      writer.uint32(130).string(message.commentId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_Options {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_Options();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.sortBy = reader.int32();\n          continue;\n        case 15:\n          if (tag !== 120) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n        case 16:\n          if (tag !== 130) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_RepliesOptions(): GetCommentsSectionParams_Params_RepliesOptions {\n  return { commentId: \"\", unkopts: undefined, channelId: undefined, videoId: \"\", unkParam1: 0, unkParam2: 0 };\n}\n\nexport const GetCommentsSectionParams_Params_RepliesOptions: MessageFns<\n  GetCommentsSectionParams_Params_RepliesOptions\n> = {\n  encode(\n    message: GetCommentsSectionParams_Params_RepliesOptions,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.commentId !== \"\") {\n      writer.uint32(18).string(message.commentId);\n    }\n    if (message.unkopts !== undefined) {\n      GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.encode(message.unkopts, writer.uint32(34).fork()).join();\n    }\n    if (message.channelId !== undefined) {\n      writer.uint32(42).string(message.channelId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(50).string(message.videoId);\n    }\n    if (message.unkParam1 !== 0) {\n      writer.uint32(64).int32(message.unkParam1);\n    }\n    if (message.unkParam2 !== 0) {\n      writer.uint32(72).int32(message.unkParam2);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_RepliesOptions {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_RepliesOptions();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.unkopts = GetCommentsSectionParams_Params_RepliesOptions_UnkOpts.decode(reader, reader.uint32());\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        case 8:\n          if (tag !== 64) {\n            break;\n          }\n\n          message.unkParam1 = reader.int32();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.unkParam2 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts(): GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n  return { unkParam: 0 };\n}\n\nexport const GetCommentsSectionParams_Params_RepliesOptions_UnkOpts: MessageFns<\n  GetCommentsSectionParams_Params_RepliesOptions_UnkOpts\n> = {\n  encode(\n    message: GetCommentsSectionParams_Params_RepliesOptions_UnkOpts,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.unkParam !== 0) {\n      writer.uint32(8).int32(message.unkParam);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): GetCommentsSectionParams_Params_RepliesOptions_UnkOpts {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseGetCommentsSectionParams_Params_RepliesOptions_UnkOpts();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.unkParam = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCreateCommentParams(): CreateCommentParams {\n  return { videoId: \"\", params: undefined, number: 0 };\n}\n\nexport const CreateCommentParams: MessageFns<CreateCommentParams> = {\n  encode(message: CreateCommentParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.videoId !== \"\") {\n      writer.uint32(18).string(message.videoId);\n    }\n    if (message.params !== undefined) {\n      CreateCommentParams_Params.encode(message.params, writer.uint32(42).fork()).join();\n    }\n    if (message.number !== 0) {\n      writer.uint32(80).int32(message.number);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CreateCommentParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCreateCommentParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.params = CreateCommentParams_Params.decode(reader, reader.uint32());\n          continue;\n        case 10:\n          if (tag !== 80) {\n            break;\n          }\n\n          message.number = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCreateCommentParams_Params(): CreateCommentParams_Params {\n  return { index: 0 };\n}\n\nexport const CreateCommentParams_Params: MessageFns<CreateCommentParams_Params> = {\n  encode(message: CreateCommentParams_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.index !== 0) {\n      writer.uint32(8).int32(message.index);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CreateCommentParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCreateCommentParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.index = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams(): PeformCommentActionParams {\n  return {\n    type: 0,\n    commentId: \"\",\n    videoId: \"\",\n    unkNum: undefined,\n    channelId: undefined,\n    translateCommentParams: undefined,\n  };\n}\n\nexport const PeformCommentActionParams: MessageFns<PeformCommentActionParams> = {\n  encode(message: PeformCommentActionParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.type !== 0) {\n      writer.uint32(8).int32(message.type);\n    }\n    if (message.commentId !== \"\") {\n      writer.uint32(26).string(message.commentId);\n    }\n    if (message.videoId !== \"\") {\n      writer.uint32(42).string(message.videoId);\n    }\n    if (message.unkNum !== undefined) {\n      writer.uint32(16).int32(message.unkNum);\n    }\n    if (message.channelId !== undefined) {\n      writer.uint32(186).string(message.channelId);\n    }\n    if (message.translateCommentParams !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams.encode(message.translateCommentParams, writer.uint32(250).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.videoId = reader.string();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.unkNum = reader.int32();\n          continue;\n        case 23:\n          if (tag !== 186) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n        case 31:\n          if (tag !== 250) {\n            break;\n          }\n\n          message.translateCommentParams = PeformCommentActionParams_TranslateCommentParams.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams(): PeformCommentActionParams_TranslateCommentParams {\n  return { params: undefined, commentId: \"\", targetLanguage: \"\" };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.params !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams_Params.encode(message.params, writer.uint32(26).fork()).join();\n    }\n    if (message.commentId !== \"\") {\n      writer.uint32(18).string(message.commentId);\n    }\n    if (message.targetLanguage !== \"\") {\n      writer.uint32(34).string(message.targetLanguage);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams_TranslateCommentParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.params = PeformCommentActionParams_TranslateCommentParams_Params.decode(reader, reader.uint32());\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.commentId = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.targetLanguage = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams_Params(): PeformCommentActionParams_TranslateCommentParams_Params {\n  return { comment: undefined };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams_Params: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams_Params\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams_Params,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.comment !== undefined) {\n      PeformCommentActionParams_TranslateCommentParams_Params_Comment.encode(message.comment, writer.uint32(10).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): PeformCommentActionParams_TranslateCommentParams_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.comment = PeformCommentActionParams_TranslateCommentParams_Params_Comment.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment(): PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n  return { text: \"\" };\n}\n\nexport const PeformCommentActionParams_TranslateCommentParams_Params_Comment: MessageFns<\n  PeformCommentActionParams_TranslateCommentParams_Params_Comment\n> = {\n  encode(\n    message: PeformCommentActionParams_TranslateCommentParams_Params_Comment,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.text !== \"\") {\n      writer.uint32(10).string(message.text);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): PeformCommentActionParams_TranslateCommentParams_Params_Comment {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBasePeformCommentActionParams_TranslateCommentParams_Params_Comment();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.text = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseHashtag(): Hashtag {\n  return { params: undefined };\n}\n\nexport const Hashtag: MessageFns<Hashtag> = {\n  encode(message: Hashtag, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.params !== undefined) {\n      Hashtag_Params.encode(message.params, writer.uint32(746).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): Hashtag {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHashtag();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 93:\n          if (tag !== 746) {\n            break;\n          }\n\n          message.params = Hashtag_Params.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseHashtag_Params(): Hashtag_Params {\n  return { hashtag: \"\", type: 0 };\n}\n\nexport const Hashtag_Params: MessageFns<Hashtag_Params> = {\n  encode(message: Hashtag_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hashtag !== \"\") {\n      writer.uint32(10).string(message.hashtag);\n    }\n    if (message.type !== 0) {\n      writer.uint32(24).int32(message.type);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): Hashtag_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHashtag_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.hashtag = reader.string();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.type = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseReelSequence(): ReelSequence {\n  return { shortId: \"\", params: undefined, feature2: 0, feature3: 0 };\n}\n\nexport const ReelSequence: MessageFns<ReelSequence> = {\n  encode(message: ReelSequence, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.shortId !== \"\") {\n      writer.uint32(10).string(message.shortId);\n    }\n    if (message.params !== undefined) {\n      ReelSequence_Params.encode(message.params, writer.uint32(42).fork()).join();\n    }\n    if (message.feature2 !== 0) {\n      writer.uint32(80).int32(message.feature2);\n    }\n    if (message.feature3 !== 0) {\n      writer.uint32(104).int32(message.feature3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ReelSequence {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseReelSequence();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.shortId = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.params = ReelSequence_Params.decode(reader, reader.uint32());\n          continue;\n        case 10:\n          if (tag !== 80) {\n            break;\n          }\n\n          message.feature2 = reader.int32();\n          continue;\n        case 13:\n          if (tag !== 104) {\n            break;\n          }\n\n          message.feature3 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseReelSequence_Params(): ReelSequence_Params {\n  return { number: 0 };\n}\n\nexport const ReelSequence_Params: MessageFns<ReelSequence_Params> = {\n  encode(message: ReelSequence_Params, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.number !== 0) {\n      writer.uint32(24).int32(message.number);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ReelSequence_Params {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseReelSequence_Params();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.number = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseShortsParam(): ShortsParam {\n  return { f1: undefined, p59: undefined };\n}\n\nexport const ShortsParam: MessageFns<ShortsParam> = {\n  encode(message: ShortsParam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f1 !== undefined) {\n      ShortsParam_Field1.encode(message.f1, writer.uint32(10).fork()).join();\n    }\n    if (message.p59 !== undefined) {\n      writer.uint32(472).int32(message.p59);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ShortsParam {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseShortsParam();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.f1 = ShortsParam_Field1.decode(reader, reader.uint32());\n          continue;\n        case 59:\n          if (tag !== 472) {\n            break;\n          }\n\n          message.p59 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseShortsParam_Field1(): ShortsParam_Field1 {\n  return { p1: undefined };\n}\n\nexport const ShortsParam_Field1: MessageFns<ShortsParam_Field1> = {\n  encode(message: ShortsParam_Field1, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.p1 !== undefined) {\n      writer.uint32(8).int32(message.p1);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ShortsParam_Field1 {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseShortsParam_Field1();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.p1 = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseNextParams(): NextParams {\n  return { videoId: [] };\n}\n\nexport const NextParams: MessageFns<NextParams> = {\n  encode(message: NextParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.videoId) {\n      writer.uint32(42).string(v!);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): NextParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseNextParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.videoId.push(reader.string());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostParams(): CommunityPostParams {\n  return { f1: undefined };\n}\n\nexport const CommunityPostParams: MessageFns<CommunityPostParams> = {\n  encode(message: CommunityPostParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f1 !== undefined) {\n      CommunityPostParams_Field1.encode(message.f1, writer.uint32(450).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 56:\n          if (tag !== 450) {\n            break;\n          }\n\n          message.f1 = CommunityPostParams_Field1.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostParams_Field1(): CommunityPostParams_Field1 {\n  return { ucid1: \"\", postId: \"\", ucid2: \"\" };\n}\n\nexport const CommunityPostParams_Field1: MessageFns<CommunityPostParams_Field1> = {\n  encode(message: CommunityPostParams_Field1, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ucid1 !== \"\") {\n      writer.uint32(18).string(message.ucid1);\n    }\n    if (message.postId !== \"\") {\n      writer.uint32(26).string(message.postId);\n    }\n    if (message.ucid2 !== \"\") {\n      writer.uint32(90).string(message.ucid2);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostParams_Field1 {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostParams_Field1();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ucid1 = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.postId = reader.string();\n          continue;\n        case 11:\n          if (tag !== 90) {\n            break;\n          }\n\n          message.ucid2 = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParamContainer(): CommunityPostCommentsParamContainer {\n  return { f0: undefined };\n}\n\nexport const CommunityPostCommentsParamContainer: MessageFns<CommunityPostCommentsParamContainer> = {\n  encode(message: CommunityPostCommentsParamContainer, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.f0 !== undefined) {\n      CommunityPostCommentsParamContainer_Container.encode(message.f0, writer.uint32(641815778).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParamContainer {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParamContainer();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 80226972:\n          if (tag !== 641815778) {\n            break;\n          }\n\n          message.f0 = CommunityPostCommentsParamContainer_Container.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParamContainer_Container(): CommunityPostCommentsParamContainer_Container {\n  return { location: \"\", protoData: \"\" };\n}\n\nexport const CommunityPostCommentsParamContainer_Container: MessageFns<CommunityPostCommentsParamContainer_Container> =\n  {\n    encode(\n      message: CommunityPostCommentsParamContainer_Container,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.location !== \"\") {\n        writer.uint32(18).string(message.location);\n      }\n      if (message.protoData !== \"\") {\n        writer.uint32(26).string(message.protoData);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParamContainer_Container {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      let end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseCommunityPostCommentsParamContainer_Container();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 2:\n            if (tag !== 18) {\n              break;\n            }\n\n            message.location = reader.string();\n            continue;\n          case 3:\n            if (tag !== 26) {\n              break;\n            }\n\n            message.protoData = reader.string();\n            continue;\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseCommunityPostCommentsParam(): CommunityPostCommentsParam {\n  return { title: \"\", commentDataContainer: undefined };\n}\n\nexport const CommunityPostCommentsParam: MessageFns<CommunityPostCommentsParam> = {\n  encode(message: CommunityPostCommentsParam, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.title !== \"\") {\n      writer.uint32(18).string(message.title);\n    }\n    if (message.commentDataContainer !== undefined) {\n      CommunityPostCommentsParam_CommentDataContainer.encode(message.commentDataContainer, writer.uint32(426).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParam {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.title = reader.string();\n          continue;\n        case 53:\n          if (tag !== 426) {\n            break;\n          }\n\n          message.commentDataContainer = CommunityPostCommentsParam_CommentDataContainer.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParam_CommentDataContainer(): CommunityPostCommentsParam_CommentDataContainer {\n  return { commentData: undefined, f0: 0, title: \"\" };\n}\n\nexport const CommunityPostCommentsParam_CommentDataContainer: MessageFns<\n  CommunityPostCommentsParam_CommentDataContainer\n> = {\n  encode(\n    message: CommunityPostCommentsParam_CommentDataContainer,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.commentData !== undefined) {\n      CommunityPostCommentsParam_CommentDataContainer_CommentData.encode(message.commentData, writer.uint32(34).fork())\n        .join();\n    }\n    if (message.f0 !== 0) {\n      writer.uint32(56).int32(message.f0);\n    }\n    if (message.title !== \"\") {\n      writer.uint32(66).string(message.title);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CommunityPostCommentsParam_CommentDataContainer {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam_CommentDataContainer();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.commentData = CommunityPostCommentsParam_CommentDataContainer_CommentData.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.f0 = reader.int32();\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.title = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData(): CommunityPostCommentsParam_CommentDataContainer_CommentData {\n  return { sortBy: 0, f0: 0, f1: 0, postId: \"\", channelId: \"\" };\n}\n\nexport const CommunityPostCommentsParam_CommentDataContainer_CommentData: MessageFns<\n  CommunityPostCommentsParam_CommentDataContainer_CommentData\n> = {\n  encode(\n    message: CommunityPostCommentsParam_CommentDataContainer_CommentData,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.sortBy !== 0) {\n      writer.uint32(48).int32(message.sortBy);\n    }\n    if (message.f0 !== 0) {\n      writer.uint32(120).int32(message.f0);\n    }\n    if (message.f1 !== 0) {\n      writer.uint32(200).int32(message.f1);\n    }\n    if (message.postId !== \"\") {\n      writer.uint32(234).string(message.postId);\n    }\n    if (message.channelId !== \"\") {\n      writer.uint32(242).string(message.channelId);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): CommunityPostCommentsParam_CommentDataContainer_CommentData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCommunityPostCommentsParam_CommentDataContainer_CommentData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.sortBy = reader.int32();\n          continue;\n        case 15:\n          if (tag !== 120) {\n            break;\n          }\n\n          message.f0 = reader.int32();\n          continue;\n        case 25:\n          if (tag !== 200) {\n            break;\n          }\n\n          message.f1 = reader.int32();\n          continue;\n        case 29:\n          if (tag !== 234) {\n            break;\n          }\n\n          message.postId = reader.string();\n          continue;\n        case 30:\n          if (tag !== 242) {\n            break;\n          }\n\n          message.channelId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class OpenPopupAction extends YTNode {\n  static type = 'OpenPopupAction';\n\n  popup: YTNode;\n  popup_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.popup = Parser.parseItem(data.popup);\n    this.popup_type = data.popupType;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class Button extends YTNode {\n  static type = 'Button';\n\n  public text?: string;\n  public label?: string;\n  public tooltip?: string;\n  public style?: string;\n  public size?: string;\n  public icon_type?: string;\n  public is_disabled?: boolean;\n  public target_id?: string;\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n  \n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'text'))\n      this.text = new Text(data.text).toString();\n\n    if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'label')) {\n      this.label = data.accessibility.label;\n    }\n\n    if ('accessibilityData' in data\n      && 'accessibilityData' in data.accessibilityData) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)\n      };\n    }\n\n    if (Reflect.has(data, 'tooltip'))\n      this.tooltip = data.tooltip;\n\n    if (Reflect.has(data, 'style'))\n      this.style = data.style;\n\n    if (Reflect.has(data, 'size'))\n      this.size = data.size;\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n\n    if (Reflect.has(data, 'isDisabled'))\n      this.is_disabled = data.isDisabled;\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint || data.command);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class DropdownItem extends YTNode {\n  static type = 'DropdownItem';\n\n  label: string;\n  selected: boolean;\n  value?: number | string;\n  icon_type?: string;\n  description?: Text;\n  endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label).toString();\n    this.selected = !!data.isSelected;\n\n    if (Reflect.has(data, 'int32Value')) {\n      this.value = data.int32Value;\n    } else if (data.stringValue) {\n      this.value = data.stringValue;\n    }\n\n    if (Reflect.has(data, 'onSelectCommand')) {\n      this.endpoint = new NavigationEndpoint(data.onSelectCommand);\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n\n    if (Reflect.has(data, 'descriptionText')) {\n      this.description = new Text(data.descriptionText);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DropdownItem from './DropdownItem.js';\n\nexport default class Dropdown extends YTNode {\n  static type = 'Dropdown';\n\n  label: string;\n  entries: ObservedArray<DropdownItem>;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = data.label || '';\n    this.entries = Parser.parseArray(data.entries, DropdownItem);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Dropdown from './Dropdown.js';\nimport Text from './misc/Text.js';\n\nexport default class CreatePlaylistDialog extends YTNode {\n  static type = 'CreatePlaylistDialog';\n\n  title: string;\n  title_placeholder: string;\n  privacy_option: Dropdown | null;\n  cancel_button: Button | null;\n  create_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.dialogTitle).toString();\n    this.title_placeholder = data.titlePlaceholder || '';\n    this.privacy_option = Parser.parseItem(data.privacyOption, Dropdown);\n    this.create_button = Parser.parseItem(data.cancelButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class CommandExecutorCommand extends YTNode {\n  static type = 'CommandExecutorCommand';\n\n  public commands: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.commands = Parser.parseCommands(data.commands);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type IEndpoint, type RawNode } from '../index.js';\nimport OpenPopupAction from './actions/OpenPopupAction.js';\nimport CreatePlaylistDialog from './CreatePlaylistDialog.js';\nimport CommandExecutorCommand from './commands/CommandExecutorCommand.js';\n\nimport type Actions from '../../core/Actions.js';\nimport type ModalWithTitleAndButton from './ModalWithTitleAndButton.js';\nimport type { ApiResponse } from '../../core/Actions.js';\nimport type { IParsedResponse } from '../types/index.js';\n\nexport type Metadata = {\n  url?: string;\n  api_url?: string;\n  page_type?: string;\n  send_post?: boolean;\n};\n\nexport default class NavigationEndpoint extends YTNode {\n  static type = 'NavigationEndpoint';\n\n  public name?: string;\n  public payload: any;\n  public dialog?: CreatePlaylistDialog | YTNode | null;\n  public modal?: ModalWithTitleAndButton | YTNode | null;\n  public open_popup?: OpenPopupAction | null;\n  public next_endpoint?: NavigationEndpoint;\n  public metadata: Metadata;\n  public command?: YTNode | YTNode & IEndpoint;\n  public commands?: NavigationEndpoint[];\n\n  constructor(data: RawNode) {\n    super();\n    if (data) {\n      if (data.serialCommand || data.parallelCommand) {\n        const raw_command = data.serialCommand || data.parallelCommand;\n        this.commands = raw_command.commands.map((command: RawNode) => new NavigationEndpoint(command));\n      }\n\n      if (data.innertubeCommand || data.command || data.performOnceCommand) {\n        data = data.innertubeCommand || data.command || data.performOnceCommand;\n      }\n    }\n\n    this.command = Parser.parseCommand(data);\n\n    if (Reflect.has(data || {}, 'openPopupAction'))\n      this.open_popup = new OpenPopupAction(data.openPopupAction);\n\n    this.name = Object.keys(data || {})\n      .find((item) =>\n        item.endsWith('Endpoint') ||\n        item.endsWith('Command')\n      );\n\n    this.payload = this.name ? Reflect.get(data, this.name) : {};\n\n    if (Reflect.has(this.payload, 'dialog') || Reflect.has(this.payload, 'content')) {\n      this.dialog = Parser.parseItem(this.payload.dialog || this.payload.content);\n    }\n\n    if (Reflect.has(this.payload, 'modal')) {\n      this.modal = Parser.parseItem(this.payload.modal);\n    }\n\n    if (Reflect.has(this.payload, 'nextEndpoint')) {\n      this.next_endpoint = new NavigationEndpoint(this.payload.nextEndpoint);\n    }\n\n    if (data?.serviceEndpoint) {\n      data = data.serviceEndpoint;\n    }\n\n    this.metadata = {};\n\n    if (data?.commandMetadata?.webCommandMetadata?.url) {\n      this.metadata.url = data.commandMetadata.webCommandMetadata.url;\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.webPageType) {\n      this.metadata.page_type = data.commandMetadata.webCommandMetadata.webPageType;\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.apiUrl) {\n      this.metadata.api_url = data.commandMetadata.webCommandMetadata.apiUrl.replace('/youtubei/v1/', '');\n    } else if (this.name) {\n      this.metadata.api_url = this.getPath(this.name);\n    }\n\n    if (data?.commandMetadata?.webCommandMetadata?.sendPost) {\n      this.metadata.send_post = data.commandMetadata.webCommandMetadata.sendPost;\n    }\n\n    if (data?.createPlaylistEndpoint) {\n      if (data?.createPlaylistEndpoint.createPlaylistDialog) {\n        this.dialog = Parser.parseItem(data?.createPlaylistEndpoint.createPlaylistDialog, CreatePlaylistDialog);\n      }\n    }\n  }\n\n  /**\n   * Sometimes InnerTube does not return an API url, in that case the library should set it based on the name of the payload object.\n   * @deprecated This should be removed in the future.\n   */\n  getPath(name: string) {\n    switch (name) {\n      case 'browseEndpoint':\n        return '/browse';\n      case 'watchEndpoint':\n      case 'reelWatchEndpoint':\n        return '/player';\n      case 'searchEndpoint':\n        return '/search';\n      case 'watchPlaylistEndpoint':\n        return '/next';\n      case 'liveChatItemContextMenuEndpoint':\n        return '/live_chat/get_item_context_menu';\n    }\n  }\n\n  call<T extends IParsedResponse>(actions: Actions, args: { [key: string]: any; parse: true }): Promise<T>;\n  call(actions: Actions, args?: { [key: string]: any; parse?: false }): Promise<ApiResponse>;\n  call(actions: Actions, args?: { [key: string]: any; parse?: boolean }): Promise<IParsedResponse | ApiResponse> {\n    if (!actions)\n      throw new Error('An API caller must be provided');\n\n    if (this.command) {\n      let command = this.command as (YTNode & IEndpoint);\n\n      if (command.is(CommandExecutorCommand)) {\n        command = command.commands.at(-1) as (YTNode & IEndpoint);\n      }\n\n      return actions.execute(command.getApiPath(), { ...command.buildRequest(), ...args });\n    }\n\n    if (!this.metadata.api_url)\n      throw new Error('Expected an api_url, but none was found.');\n\n    return actions.execute(this.metadata.api_url, { ...this.payload, ...args });\n  }\n\n  toURL(): string | undefined {\n    if (!this.metadata.url)\n      return undefined;\n    if (!this.metadata.page_type)\n      return undefined;\n    return (\n      this.metadata.page_type === 'WEB_PAGE_TYPE_UNKNOWN' ?\n        this.metadata.url : `https://www.youtube.com${this.metadata.url}`\n    );\n  }\n}", "import type { RawNode } from '../../index.js';\n\nexport default class Thumbnail {\n  url: string;\n  width: number;\n  height: number;\n\n  constructor(data: RawNode) {\n    this.url = data.url;\n    this.width = data.width;\n    this.height = data.height;\n  }\n\n  /**\n   * Get thumbnails from response object.\n   */\n  static fromResponse(data: any): Thumbnail[] {\n    if (!data) return [];\n\n    let thumbnail_data;\n\n    if (data.thumbnails) {\n      thumbnail_data = data.thumbnails;\n    } else if (data.sources) {\n      thumbnail_data = data.sources;\n    }\n\n    if (thumbnail_data) {\n      return thumbnail_data.map((x: any) => new Thumbnail(x)).sort((a: Thumbnail, b: Thumbnail) => b.width - a.width);\n    }\n\n    return [];\n  }\n}", "import type { RawNode } from '../../index.js';\nimport { escape, type Run } from './Text.js';\nimport Thumbnail from './Thumbnail.js';\n\nexport interface Emoji {\n  emoji_id: string;\n  shortcuts: string[];\n  search_terms: string[];\n  image: Thumbnail[];\n  is_custom: boolean;\n}\n\nexport default class EmojiRun implements Run {\n  public text: string;\n  public emoji: Emoji;\n\n  constructor(data: RawNode) {\n    this.text =\n      data.emoji?.emojiId ||\n      data.emoji?.shortcuts?.[0] ||\n      data.text ||\n      '';\n\n    this.emoji = {\n      emoji_id: data.emoji.emojiId,\n      shortcuts: data.emoji?.shortcuts || [],\n      search_terms: data.emoji?.searchTerms || [],\n      image: Thumbnail.fromResponse(data.emoji.image),\n      is_custom: !!data.emoji?.isCustomEmoji\n    };\n  }\n\n  toString(): string {\n    return this.text;\n  }\n\n  toHTML(): string {\n    const escaped_text = escape(this.text);\n    return `<img src=\"${this.emoji.image[0].url}\" alt=\"${escaped_text}\" title=\"${escaped_text}\" style=\"display: inline-block; vertical-align: text-top; height: var(--yt-emoji-size, 1rem); width: var(--yt-emoji-size, 1rem);\" loading=\"lazy\" crossorigin=\"anonymous\" />`;\n  }\n}", "import NavigationEndpoint from '../NavigationEndpoint.js';\nimport { escape, type Run } from './Text.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class TextRun implements Run {\n  public text: string;\n  public text_color?: number;\n  public endpoint?: NavigationEndpoint;\n  public bold: boolean;\n  public bracket: boolean;\n  public dark_mode_text_color?: number;\n  public deemphasize: boolean;\n  public italics: boolean;\n  public strikethrough: boolean;\n  public error_underline: boolean;\n  public underline: boolean;\n  public font_face?:\n    | 'FONT_FACE_UNKNOWN'\n    | 'FONT_FACE_YT_SANS_MEDIUM'\n    | 'FONT_FACE_ROBOTO_MEDIUM'\n    | 'FONT_FACE_YOUTUBE_SANS_LIGHT'\n    | 'FONT_FACE_YOUTUBE_SANS_REGULAR'\n    | 'FONT_FACE_YOUTUBE_SANS_MEDIUM'\n    | 'FONT_FACE_YOUTUBE_SANS_SEMIBOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_BOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_EXTRABOLD'\n    | 'FONT_FACE_YOUTUBE_SANS_BLACK'\n    | 'FONT_FACE_YT_SANS_BOLD'\n    | 'FONT_FACE_ROBOTO_REGULAR';\n  public attachment;\n\n  constructor(data: RawNode) {\n    this.text = data.text;\n    this.bold = Boolean(data.bold);\n    this.bracket = Boolean(data.bracket);\n    this.italics = Boolean(data.italics);\n    this.strikethrough = Boolean(data.strikethrough);\n    this.error_underline = Boolean(data.error_underline);\n    this.underline = Boolean(data.underline);\n    this.deemphasize = Boolean(data.deemphasize);\n\n    if ('textColor' in data) {\n      this.text_color = data.textColor;\n    }\n    \n    if ('navigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    if ('darkModeTextColor' in data) {\n      this.dark_mode_text_color = data.darkModeTextColor;\n    }\n    \n    if ('fontFace' in data) {\n      this.font_face = data.fontFace;\n    }\n\n    this.attachment = data.attachment;\n  }\n\n  toString(): string {\n    return this.text;\n  }\n\n  toHTML(): string {\n    const tags: string[] = [];\n\n    if (this.bold) tags.push('b');\n    if (this.italics) tags.push('i');\n    if (this.strikethrough) tags.push('s');\n    if (this.deemphasize) tags.push('small');\n    if (this.underline) tags.push('u');\n    if (this.error_underline) tags.push('u');\n\n    if (!this.text?.length)\n      return '';\n\n    const escaped_text = escape(this.text);\n    const styled_text = tags.map((tag) => `<${tag}>`).join('') + escaped_text + tags.map((tag) => `</${tag}>`).join('');\n    const wrapped_text = `<span style=\"white-space: pre-wrap;\">${styled_text}</span>`;\n\n    if (this.attachment) {\n      if (this.attachment.element.type.imageType.image.sources.length) {\n        if (this.endpoint) {\n          const { url } = this.attachment.element.type.imageType.image.sources[0];\n\n          let image_el = '';\n\n          if (url) {\n            image_el = `<img src=\"${url}\" style=\"vertical-align: middle; height: ${this.attachment.element.properties.layoutProperties.height.value}px; width: ${this.attachment.element.properties.layoutProperties.width.value}px;\" alt=\"\">`;\n          }\n\n          const nav_url = this.endpoint.toURL();\n          if (nav_url) return `<a href=\"${nav_url}\" class=\"yt-ch-link\">${image_el}${wrapped_text}</a>`;\n        }\n      }\n    }\n\n    if (this.endpoint) {\n      const url = this.endpoint.toURL();\n      if (url) return `<a href=\"${url}\">${wrapped_text}</a>`;\n    }\n\n    return wrapped_text;\n  }\n}", "import { Log } from '../../../utils/index.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport EmojiRun from './EmojiRun.js';\nimport TextRun from './TextRun.js';\nimport AccessibilityData from './AccessibilityData.js';\n\nexport interface Run {\n  text: string;\n\n  toString(): string;\n\n  toHTML(): string;\n}\n\nexport interface FormattedStringSupportedAccessibilityDatas {\n  accessibility_data: AccessibilityData;\n}\n\nexport function escape(text: string) {\n  return text\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#039;');\n}\n\nconst TAG = 'Text';\n\n/**\n * Represents text content that may include formatting, emojis, and navigation endpoints.\n */\nexport default class Text {\n  /**\n   * The plain text content.\n   */\n  public text?: string;\n\n  /**\n   * Individual text segments with their formatting.\n   */\n  public runs?: (EmojiRun | TextRun)[];\n\n  /**\n   * Navigation endpoint associated with this text.\n   */\n  public endpoint?: NavigationEndpoint;\n\n  /**\n   * Accessibility data associated with this text.\n   */\n  public accessibility?: FormattedStringSupportedAccessibilityDatas;\n\n  /**\n   * Indicates if the text is right-to-left.\n   */\n  public rtl: boolean;\n\n  constructor(data: RawNode) {\n    if (this.isRunsData(data)) {\n      this.runs = data.runs.map((run: RawNode) =>\n        run.emoji ? new EmojiRun(run) : new TextRun(run)\n      );\n      this.text = this.runs.map((run) => run.text).join('');\n    } else {\n      this.text = data?.simpleText;\n    }\n\n    if (this.isObject(data) && 'accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n\n    this.rtl = !!data?.rtl;\n\n    this.parseEndpoint(data);\n  }\n\n  private isRunsData(data: RawNode): data is { runs: RawNode[] } {\n    return this.isObject(data) &&\n      Reflect.has(data, 'runs') &&\n      Array.isArray(data.runs);\n  }\n\n  private parseEndpoint(data: RawNode): void {\n    if (!this.isObject(data)) return;\n    if ('navigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    } else if ('titleNavigationEndpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);\n    } else if ((this.runs?.[0] as TextRun)?.endpoint) {\n      this.endpoint = (this.runs?.[0] as TextRun).endpoint;\n    }\n  }\n\n  private isObject(data: RawNode): boolean {\n    return typeof data === 'object' && data !== null;\n  }\n\n  static fromAttributed(data: AttributedText) {\n    const {\n      content,\n      commandRuns: command_runs,\n      attachmentRuns: attachment_runs\n    } = data;\n\n    const runs: RawRun[] = [\n      {\n        text: content,\n        startIndex: 0\n      }\n    ];\n\n    // In AttributedText, styleRuns may not always include the `startIndex` or `length` properties\n    // - If `startIndex` is missing, we assume the style applies from the beginning of the text\n    // - If `length` is missing, we assume the style applies to the entire text\n    // The following code ensures default values are provided for these properties\n    const style_runs = data.styleRuns?.map((run) => ({\n      ...run,\n      startIndex: run.startIndex ?? 0,\n      length: run.length ?? content.length\n    }) as StyleRun & ResponseRun);\n\n    if (style_runs?.length)\n      this.processStyleRuns(runs, style_runs, data);\n\n    if (command_runs?.length)\n      this.processCommandRuns(runs, command_runs, data);\n\n    if (attachment_runs?.length)\n      this.processAttachmentRuns(runs, attachment_runs, data);\n\n    return new Text({ runs });\n  }\n\n  private static processStyleRuns(runs: RawRun[], style_runs: (StyleRun & ResponseRun)[], data: AttributedText) {\n    for (const style_run of style_runs) {\n      if (\n        style_run.italic ||\n        style_run.strikethrough === 'LINE_STYLE_SINGLE' ||\n        style_run.weightLabel === 'FONT_WEIGHT_MEDIUM' ||\n        style_run.weightLabel === 'FONT_WEIGHT_BOLD'\n      ) {\n        const matching_run = findMatchingRun(runs, style_run);\n\n        if (!matching_run) {\n          Log.warn(TAG, 'Unable to find matching run for style run. Skipping...', {\n            style_run,\n            input_data: data,\n            // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n            // So if we log the original runs object, it might have changed by the time the user looks at it.\n            // Deep clone, so that we log the exact state of the runs at this point.\n            parsed_runs: JSON.parse(JSON.stringify(runs))\n          });\n\n          continue;\n        }\n\n        // Comments use MEDIUM for bold text and video descriptions use BOLD for bold text\n        insertSubRun(runs, matching_run, style_run, {\n          bold: style_run.weightLabel === 'FONT_WEIGHT_MEDIUM' || style_run.weightLabel === 'FONT_WEIGHT_BOLD',\n          italics: style_run.italic,\n          strikethrough: style_run.strikethrough === 'LINE_STYLE_SINGLE'\n        });\n      } else {\n        Log.debug(TAG, 'Skipping style run as it is doesn\\'t have any information that we parse.', {\n          style_run,\n          input_data: data\n        });\n      }\n    }\n  }\n\n  private static processCommandRuns(runs: RawRun[], command_runs: CommandRun[], data: AttributedText) {\n    for (const command_run of command_runs) {\n      if (command_run.onTap) {\n        const matching_run = findMatchingRun(runs, command_run);\n\n        if (!matching_run) {\n          Log.warn(TAG, 'Unable to find matching run for command run. Skipping...', {\n            command_run,\n            input_data: data,\n            // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n            // So if we log the original runs object, it might have changed by the time the user looks at it.\n            // Deep clone, so that we log the exact state of the runs at this point.\n            parsed_runs: JSON.parse(JSON.stringify(runs))\n          });\n\n          continue;\n        }\n\n        insertSubRun(runs, matching_run, command_run, {\n          navigationEndpoint: command_run.onTap\n        });\n      } else {\n        Log.debug(TAG, 'Skipping command run as it is missing the \"doTap\" property.', {\n          command_run,\n          input_data: data\n        });\n      }\n    }\n  }\n\n  private static processAttachmentRuns(runs: RawRun[], attachment_runs: AttachmentRun[], data: AttributedText) {\n    for (const attachment_run of attachment_runs) {\n      const matching_run = findMatchingRun(runs, attachment_run);\n\n      if (!matching_run) {\n        Log.warn(TAG, 'Unable to find matching run for attachment run. Skipping...', {\n          attachment_run,\n          input_data: data,\n          // For performance reasons, web browser consoles only expand an object, when the user clicks on it,\n          // So if we log the original runs object, it might have changed by the time the user looks at it.\n          // Deep clone, so that we log the exact state of the runs at this point.\n          parsed_runs: JSON.parse(JSON.stringify(runs))\n        });\n\n        continue;\n      }\n\n      if (attachment_run.length === 0) {\n        matching_run.attachment = attachment_run;\n      } else {\n        const offset_start_index = attachment_run.startIndex - matching_run.startIndex;\n\n        const text = matching_run.text.substring(offset_start_index, offset_start_index + attachment_run.length);\n\n        const is_custom_emoji = (/^:[^:]+:$/).test(text);\n\n        if (attachment_run.element?.type?.imageType?.image && (is_custom_emoji || (/^(?:\\p{Emoji}|\\u200d)+$/u).test(text))) {\n          const emoji = {\n            image: attachment_run.element.type.imageType.image,\n            isCustomEmoji: is_custom_emoji,\n            shortcuts: is_custom_emoji ? [ text ] : undefined\n          };\n\n          insertSubRun(runs, matching_run, attachment_run, { emoji });\n        } else {\n          insertSubRun(runs, matching_run, attachment_run, {\n            attachment: attachment_run\n          });\n        }\n      }\n    }\n  }\n\n  /**\n   * Converts the text to HTML.\n   * @returns The HTML.\n   */\n  toHTML(): string | undefined {\n    return this.runs ? this.runs.map((run) => run.toHTML()).join('') : this.text;\n  }\n\n  /**\n   * Checks if the text is empty.\n   * @returns Whether the text is empty.\n   */\n  isEmpty(): boolean {\n    return this.text === undefined;\n  }\n\n  /**\n   * Converts the text to a string.\n   * @returns The text.\n   */\n  toString(): string {\n    return this.text || 'N/A';\n  }\n}\n\nfunction findMatchingRun(runs: RawRun[], response_run: ResponseRun) {\n  return runs.find((run) => {\n    return run.startIndex <= response_run.startIndex &&\n      response_run.startIndex + response_run.length <= run.startIndex + run.text.length;\n  });\n}\n\nfunction insertSubRun(runs: RawRun[], original_run: RawRun, response_run: ResponseRun, properties_to_add: Omit<RawRun, 'text' | 'startIndex'>) {\n  const replace_index = runs.indexOf(original_run);\n  const replacement_runs = [];\n\n  const offset_start_index = response_run.startIndex - original_run.startIndex;\n\n  // Stuff before the run\n  if (response_run.startIndex > original_run.startIndex) {\n    replacement_runs.push({\n      ...original_run,\n      text: original_run.text.substring(0, offset_start_index)\n    });\n  }\n\n  replacement_runs.push({\n    ...original_run,\n    text: original_run.text.substring(offset_start_index, offset_start_index + response_run.length),\n    startIndex: response_run.startIndex,\n    ...properties_to_add\n  });\n\n  // Stuff after the run\n  if (response_run.startIndex + response_run.length < original_run.startIndex + original_run.text.length) {\n    replacement_runs.push({\n      ...original_run,\n      text: original_run.text.substring(offset_start_index + response_run.length),\n      startIndex: response_run.startIndex + response_run.length\n    });\n  }\n\n  runs.splice(replace_index, 1, ...replacement_runs);\n}\n\ninterface RawRun {\n  text: string,\n  bold?: boolean;\n  italics?: boolean;\n  strikethrough?: boolean;\n  navigationEndpoint?: RawNode;\n  attachment?: RawNode;\n  emoji?: RawNode;\n  startIndex: number;\n}\n\nexport interface AttributedText {\n  content: string;\n  styleRuns?: StyleRun[];\n  commandRuns?: CommandRun[];\n  attachmentRuns?: AttachmentRun[];\n  decorationRuns?: ResponseRun[];\n}\n\ninterface ResponseRun {\n  startIndex: number;\n  length: number;\n}\n\ninterface StyleRun extends Partial<ResponseRun> {\n  italic?: boolean;\n  weightLabel?: string;\n  strikethrough?: string;\n  fontFamilyName?: string;\n  styleRunExtensions?: {\n    styleRunColorMapExtension?: {\n      colorMap?: {\n        key: string,\n        value: number\n      }[]\n    }\n  };\n}\n\ninterface CommandRun extends ResponseRun {\n  onTap?: RawNode;\n}\n\ninterface AttachmentRun extends ResponseRun {\n  alignment?: string;\n  element?: {\n    type?: {\n      imageType?: {\n        image: RawNode,\n        playbackState?: string;\n      }\n    };\n    properties?: RawNode\n  };\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelExternalLinkView extends YTNode {\n  static type = 'ChannelExternalLinkView';\n\n  title: Text;\n  link: Text;\n  favicon: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = Text.fromAttributed(data.title);\n    this.link = Text.fromAttributed(data.link);\n    this.favicon = Thumbnail.fromResponse(data.favicon);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChannelExternalLinkView from './ChannelExternalLinkView.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class AboutChannelView extends YTNode {\n  static type = 'AboutChannelView';\n\n  description?: string;\n  description_label?: Text;\n  country?: string;\n  custom_links_label?: Text;\n  subscriber_count?: string;\n  view_count?: string;\n  joined_date?: Text;\n  canonical_channel_url?: string;\n  channel_id?: string;\n  additional_info_label?: Text;\n  custom_url_on_tap?: NavigationEndpoint;\n  video_count?: string;\n  sign_in_for_business_email?: Text;\n  links: ObservedArray<ChannelExternalLinkView>;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'description')) {\n      this.description = data.description;\n    }\n\n    if (Reflect.has(data, 'descriptionLabel')) {\n      this.description_label = Text.fromAttributed(data.descriptionLabel);\n    }\n\n    if (Reflect.has(data, 'country')) {\n      this.country = data.country;\n    }\n\n    if (Reflect.has(data, 'customLinksLabel')) {\n      this.custom_links_label = Text.fromAttributed(data.customLinksLabel);\n    }\n\n    if (Reflect.has(data, 'subscriberCountText')) {\n      this.subscriber_count = data.subscriberCountText;\n    }\n\n    if (Reflect.has(data, 'viewCountText')) {\n      this.view_count = data.viewCountText;\n    }\n\n    if (Reflect.has(data, 'joinedDateText')) {\n      this.joined_date = Text.fromAttributed(data.joinedDateText);\n    }\n\n    if (Reflect.has(data, 'canonicalChannelUrl')) {\n      this.canonical_channel_url = data.canonicalChannelUrl;\n    }\n\n    if (Reflect.has(data, 'channelId')) {\n      this.channel_id = data.channelId;\n    }\n\n    if (Reflect.has(data, 'additionalInfoLabel')) {\n      this.additional_info_label = Text.fromAttributed(data.additionalInfoLabel);\n    }\n\n    if (Reflect.has(data, 'customUrlOnTap')) {\n      this.custom_url_on_tap = new NavigationEndpoint(data.customUrlOnTap);\n    }\n\n    if (Reflect.has(data, 'videoCountText')) {\n      this.video_count = data.videoCountText;\n    }\n\n    if (Reflect.has(data, 'signInForBusinessEmail')) {\n      this.sign_in_for_business_email = Text.fromAttributed(data.signInForBusinessEmail);\n    }\n\n    if (Reflect.has(data, 'links')) {\n      this.links = Parser.parseArray(data.links, ChannelExternalLinkView);\n    } else {\n      this.links = [] as unknown as ObservedArray<ChannelExternalLinkView>;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AboutChannelView from './AboutChannelView.js';\nimport Button from './Button.js';\n\nexport default class AboutChannel extends YTNode {\n  static type = 'AboutChannel';\n\n  metadata: AboutChannelView | null;\n  share_channel: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.metadata = Parser.parseItem(data.metadata, AboutChannelView);\n    this.share_channel = Parser.parseItem(data.shareChannel, Button);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AccountChannel extends YTNode {\n  static type = 'AccountChannel';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\n/**\n * Not a real renderer but we treat it as one to keep things organized.\n */\nexport default class AccountItem extends YTNode {\n  static type = 'AccountItem';\n\n  account_name: Text;\n  account_photo: Thumbnail[];\n  is_selected: boolean;\n  is_disabled: boolean;\n  has_channel: boolean;\n  endpoint: NavigationEndpoint;\n  account_byline: Text;\n  channel_handle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.account_name = new Text(data.accountName);\n    this.account_photo = Thumbnail.fromResponse(data.accountPhoto);\n    this.is_selected = !!data.isSelected;\n    this.is_disabled = !!data.isDisabled;\n    this.has_channel = !!data.hasChannel;\n    this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    this.account_byline = new Text(data.accountByline);\n    this.channel_handle = new Text(data.channelHandle);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AccountItemSectionHeader extends YTNode {\n  static type = 'AccountItemSectionHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CompactLink extends YTNode {\n  static type = 'CompactLink';\n\n  public title: string;\n  public subtitle?: Text;\n  public endpoint: NavigationEndpoint;\n  public style: string;\n  public icon_type?: string;\n  public secondary_icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title).toString();\n\n    if ('subtitle' in data)\n      this.subtitle = new Text(data.subtitle);\n    \n    if ('icon' in data && 'iconType' in data.icon)\n      this.icon_type = data.icon.iconType;\n    \n    if ('secondaryIcon' in data && 'iconType' in data.secondaryIcon)\n      this.secondary_icon_type = data.secondaryIcon.iconType;\n    \n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n    this.style = data.style;\n  }\n}", "import { Parser } from '../index.js';\nimport AccountItem from './AccountItem.js';\nimport AccountItemSectionHeader from './AccountItemSectionHeader.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport CompactLink from './CompactLink.js';\n\nexport default class AccountItemSection extends YTNode {\n  static type = 'AccountItemSection';\n\n  public contents: ObservedArray<AccountItem | CompactLink>;\n  public header: AccountItemSectionHeader | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ AccountItem, CompactLink ]);\n    this.header = Parser.parseItem(data.header, AccountItemSectionHeader);\n  }\n}", "import { Parser } from '../index.js';\nimport AccountChannel from './AccountChannel.js';\nimport AccountItemSection from './AccountItemSection.js';\n\nimport type { RawNode } from '../index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class AccountSectionList extends YTNode {\n  static type = 'AccountSectionList';\n\n  public contents: ObservedArray<AccountItemSection>;\n  public footers: ObservedArray<AccountChannel>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, AccountItemSection);\n    this.footers = Parser.parseArray(data.footers, AccountChannel);\n  }\n}", "import { Parser } from '../../index.js';\nimport type { RawNode } from '../../index.js';\nimport type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\n\nexport default class AppendContinuationItemsAction extends YTNode {\n  static type = 'AppendContinuationItemsAction';\n\n  contents: ObservedArray<YTNode> | null;\n  target: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.continuationItems);\n    this.target = data.target;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ChangeEngagementPanelVisibilityAction extends YTNode {\n  static type = 'ChangeEngagementPanelVisibilityAction';\n  \n  public target_id: string;\n  public visibility: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.visibility = data.visibility;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\n\nexport default class MultiPageMenu extends YTNode {\n  static type = 'MultiPageMenu';\n\n  header: YTNode;\n  sections: ObservedArray<YTNode>;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.sections = Parser.parseArray(data.sections);\n    this.style = data.style;\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport MultiPageMenu from '../menus/MultiPageMenu.js';\n\nexport default class GetMultiPageMenuAction extends YTNode {\n  static type = 'GetMultiPageMenuAction';\n  \n  public menu: MultiPageMenu | null;\n  \n  constructor(data: RawNode) {\n    super();\n    this.menu = Parser.parseItem(data.menu, MultiPageMenu);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../types/index.js';\n\nexport default class SendFeedbackAction extends YTNode {\n  static type = 'SendFeedbackAction';\n  \n  public bucket: string;\n  \n  constructor(data: RawNode) {\n    super();\n    this.bucket = data.bucket;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class SignalAction extends YTNode {\n  static type = 'SignalAction';\n\n  public signal: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.signal = data.signal;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class ChannelSwitcherPage extends YTNode {\n  static type = 'ChannelSwitcherPage';\n\n  header: YTNode;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.contents = Parser.parse(data.contents, true);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ChannelSwitcherPage from '../ChannelSwitcherPage.js';\n\nexport default class UpdateChannelSwitcherPageAction extends YTNode {\n  static type = 'UpdateChannelSwitcherPageAction';\n\n  public header?: YTNode;\n  public contents?: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    const page = Parser.parseItem(data.page, ChannelSwitcherPage);\n    if (page) {\n      this.header = page.header;\n      this.contents = page.contents;\n    }\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport interface SubMenuItem {\n  title: string;\n  selected: boolean;\n  continuation: string;\n  endpoint: NavigationEndpoint;\n  subtitle: string | null;\n}\n\nexport default class SortFilterSubMenu extends YTNode {\n  static type = 'SortFilterSubMenu';\n\n  public title?: string;\n  public icon_type?: string;\n  public tooltip?: string;\n  public sub_menu_items?: SubMenuItem[];\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    if ('title' in data) {\n      this.title = data.title;\n    }\n\n    if ('icon' in data) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if ('tooltip' in data) {\n      this.tooltip = data.tooltip;\n    }\n\n    if ('subMenuItems' in data) {\n      this.sub_menu_items = data.subMenuItems.map((item: RawNode) => ({\n        title: item.title,\n        selected: item.selected,\n        continuation: item.continuation?.reloadContinuationData?.continuation,\n        endpoint: new NavigationEndpoint(item.serviceEndpoint || item.navigationEndpoint),\n        subtitle: item.subtitle || null\n      }));\n    }\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport SortFilterSubMenu from './SortFilterSubMenu.js';\n\nexport default class TranscriptFooter extends YTNode {\n  static type = 'TranscriptFooter';\n\n  language_menu: SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.language_menu = Parser.parseItem(data.languageMenu, SortFilterSubMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { Text } from '../misc.js';\n\nexport default class TranscriptSearchBox extends YTNode {\n  static type = 'TranscriptSearchBox';\n\n  formatted_placeholder: Text;\n  clear_button: Button | null;\n  endpoint: NavigationEndpoint;\n  search_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.formatted_placeholder = new Text(data.formattedPlaceholder);\n    this.clear_button = Parser.parseItem(data.clearButton, Button);\n    this.endpoint = new NavigationEndpoint(data.onTextChangeCommand);\n    this.search_button = Parser.parseItem(data.searchButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class TranscriptSectionHeader extends YTNode {\n  static type = 'TranscriptSectionHeader';\n\n  start_ms: string;\n  end_ms: string;\n  snippet: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_ms = data.startMs;\n    this.end_ms = data.endMs;\n    this.snippet = new Text(data.snippet);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class TranscriptSegment extends YTNode {\n  static type = 'TranscriptSegment';\n\n  start_ms: string;\n  end_ms: string;\n  snippet: Text;\n  start_time_text: Text;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_ms = data.startMs;\n    this.end_ms = data.endMs;\n    this.snippet = new Text(data.snippet);\n    this.start_time_text = new Text(data.startTimeText);\n    this.target_id = data.targetId;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text } from '../misc.js';\nimport TranscriptSectionHeader from './TranscriptSectionHeader.js';\nimport TranscriptSegment from './TranscriptSegment.js';\n\nexport default class TranscriptSegmentList extends YTNode {\n  static type = 'TranscriptSegmentList';\n\n  initial_segments: ObservedArray<TranscriptSegment | TranscriptSectionHeader>;\n  no_result_label: Text;\n  retry_label: Text;\n  touch_captions_enabled: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.initial_segments = Parser.parseArray(data.initialSegments, [ TranscriptSegment, TranscriptSectionHeader ]);\n    this.no_result_label = new Text(data.noResultLabel);\n    this.retry_label = new Text(data.retryLabel);\n    this.touch_captions_enabled = data.touchCaptionsEnabled;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport TranscriptFooter from './TranscriptFooter.js';\nimport TranscriptSearchBox from './TranscriptSearchBox.js';\nimport TranscriptSegmentList from './TranscriptSegmentList.js';\n\nexport default class TranscriptSearchPanel extends YTNode {\n  static type = 'TranscriptSearchPanel';\n\n  header: TranscriptSearchBox | null;\n  body: TranscriptSegmentList | null;\n  footer: TranscriptFooter | null;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, TranscriptSearchBox);\n    this.body = Parser.parseItem(data.body, TranscriptSegmentList);\n    this.footer = Parser.parseItem(data.footer, TranscriptFooter);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport TranscriptSearchPanel from './TranscriptSearchPanel.js';\n\nexport default class Transcript extends YTNode {\n  static type = 'Transcript';\n\n  content: TranscriptSearchPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, TranscriptSearchPanel);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Transcript from '../Transcript.js';\n\nexport default class UpdateEngagementPanelAction extends YTNode {\n  static type = 'UpdateEngagementPanelAction';\n\n  target_id: string;\n  content: Transcript | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.content = Parser.parseItem(data.content, Transcript);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\n\nexport default class UpdateSubscribeButtonAction extends YTNode {\n  static type = 'UpdateSubscribeButtonAction';\n\n  public channel_id: string;\n  public subscribed: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_id = data.channelId;\n    this.subscribed = data.subscribed;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ActiveAccountHeader extends YTNode {\n  static type = 'ActiveAccountHeader';\n\n  public account_name: Text;\n  public account_photo: Thumbnail[];\n  public endpoint: NavigationEndpoint;\n  public manage_account_title: Text;\n  public channel_handle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.account_name = new Text(data.accountName);\n    this.account_photo = Thumbnail.fromResponse(data.accountPhoto);\n    this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    this.manage_account_title = new Text(data.manageAccountTitle);\n    this.channel_handle = new Text(data.channelHandle);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MenuTitle extends YTNode {\n  static type = 'MenuTitle';\n\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport type { RawNode } from '../index.js';\n\nexport type PrivacyIcon = {\n  icon_type: string | null;\n};\n\nexport default class PlaylistAddToOption extends YTNode {\n  static type = 'PlaylistAddToOption';\n\n  public add_to_playlist_service_endpoint: NavigationEndpoint;\n  public contains_selected_videos: 'ALL' | 'NONE';\n  public playlist_id: string;\n  public privacy: string;\n  public privacy_icon: PrivacyIcon;\n  public remove_from_playlist_service_endpoint: NavigationEndpoint;\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.add_to_playlist_service_endpoint = new NavigationEndpoint(data.addToPlaylistServiceEndpoint);\n    this.contains_selected_videos = data.containsSelectedVideos;\n    this.playlist_id = data.playlistId;\n    this.privacy = data.privacy;\n    this.privacy_icon = { icon_type: data.privacyIcon?.iconType || null };\n    this.remove_from_playlist_service_endpoint = new NavigationEndpoint(data.removeFromPlaylistServiceEndpoint);\n    this.title = new Text(data.title);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport MenuTitle from './MenuTitle.js';\nimport PlaylistAddToOption from './PlaylistAddToOption.js';\n\nexport default class AddToPlaylist extends YTNode {\n  static type = 'AddToPlaylist';\n\n  public actions: ObservedArray<MenuTitle | Button>;\n  public playlists: ObservedArray<PlaylistAddToOption>;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parseArray(data.actions, [ MenuTitle, Button ]);\n    this.playlists = Parser.parseArray(data.playlists, PlaylistAddToOption);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport type AlertType = 'UNKNOWN' | 'WARNING' | 'ERROR' | 'SUCCESS' | 'INFO';\n\nexport default class Alert extends YTNode {\n  static type = 'Alert';\n\n  text: Text;\n  alert_type: AlertType;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.alert_type = data.type;\n  }\n}", "import Button from './Button.js';\nimport Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class AlertWithButton extends YTNode {\n  static type = 'AlertWithButton';\n\n  text: Text;\n  alert_type: string;\n  dismiss_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.alert_type = data.type;\n    this.dismiss_button = Parser.parseItem(data.dismissButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class AnimatedThumbnailOverlayView extends YTNode {\n  static type = 'AnimatedThumbnailOverlayView';\n\n  public thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class AttributionView extends YTNode {\n  static type = 'AttributionView';\n\n  text: Text;\n  suffix: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = Text.fromAttributed(data.text);\n    this.suffix = Text.fromAttributed(data.suffix);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AudioOnlyPlayability extends YTNode {\n  static type = 'AudioOnlyPlayability';\n\n  audio_only_availability: string;\n\n  constructor (data: RawNode) {\n    super();\n    this.audio_only_availability = data.audioOnlyAvailability;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport type { RawNode } from '../index.js';\n\nexport default class AutomixPreviewVideo extends YTNode {\n  static type = 'AutomixPreviewVideo';\n\n  playlist_video?: { endpoint: NavigationEndpoint };\n\n  constructor(data: RawNode) {\n    super();\n    if (data?.content?.automixPlaylistVideoRenderer?.navigationEndpoint) {\n      this.playlist_video = {\n        endpoint: new NavigationEndpoint(data.content.automixPlaylistVideoRenderer.navigationEndpoint)\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Thumbnail } from '../misc.js';\n\nexport default class AvatarView extends YTNode {\n  static type = 'AvatarView';\n\n  image: Thumbnail[];\n  image_processor: {\n    border_image_processor: {\n      circular: boolean\n    }\n  } | undefined;\n  avatar_image_size: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.avatar_image_size = data.avatarImageSize;\n\n    if (data.image.processor) {\n      this.image_processor = {\n        border_image_processor: {\n          circular: data.image.processor.borderImageProcessor.circular\n        }\n      };\n    }\n  }\n}", "import type { RawNode } from '../../types/index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class CommandContext {\n  public on_focus?: NavigationEndpoint;\n  public on_hidden?: NavigationEndpoint;\n  public on_touch_end?: NavigationEndpoint;\n  public on_touch_move?: NavigationEndpoint;\n  public on_long_press?: NavigationEndpoint;\n  public on_tap?: NavigationEndpoint;\n  public on_touch_start?: NavigationEndpoint;\n  public on_visible?: NavigationEndpoint;\n  public on_first_visible?: NavigationEndpoint;\n  public on_hover?: NavigationEndpoint;\n  \n  constructor(data: RawNode) {\n    if ('onFocus' in data)\n      this.on_focus = new NavigationEndpoint(data.onFocus);\n    \n    if ('onHidden' in data)\n      this.on_hidden = new NavigationEndpoint(data.onHidden);\n    \n    if ('onTouchEnd' in data)\n      this.on_touch_end = new NavigationEndpoint(data.onTouchEnd);\n    \n    if ('onTouchMove' in data)\n      this.on_touch_move = new NavigationEndpoint(data.onTouchMove);\n    \n    if ('onLongPress' in data)\n      this.on_long_press = new NavigationEndpoint(data.onLongPress);\n    \n    if ('onTap' in data)\n      this.on_tap = new NavigationEndpoint(data.onTap);\n    \n    if ('onTouchStart' in data)\n      this.on_touch_start = new NavigationEndpoint(data.onTouchStart);\n    \n    if ('onVisible' in data)\n      this.on_visible = new NavigationEndpoint(data.onVisible);\n    \n    if ('onFirstVisible' in data)\n      this.on_first_visible = new NavigationEndpoint(data.onFirstVisible);\n    \n    if ('onHover' in data)\n      this.on_hover = new NavigationEndpoint(data.onHover);\n  }\n}", "import type { RawNode } from '../../types/index.js';\nimport CommandContext from './CommandContext.js';\nimport AccessibilityContext from './AccessibilityContext.js';\n\nexport default class RendererContext {\n  public command_context?: CommandContext;\n  public accessibility_context?: AccessibilityContext;\n\n  constructor(data?: RawNode) {\n    if (!data)\n      return;\n\n    if ('commandContext' in data) {\n      this.command_context = new CommandContext(data.commandContext);\n    }\n\n    if ('accessibilityContext' in data) {\n      this.accessibility_context = new AccessibilityContext(data.accessibilityContext);\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\nimport { Parser } from '../index.js';\n\nimport Text from './misc/Text.js';\nimport AvatarView from './AvatarView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class AvatarStackView extends YTNode {\n  static type = 'AvatarStackView';\n\n  public avatars: ObservedArray<AvatarView>;\n  public text?: Text;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.avatars = Parser.parseArray(data.avatars, AvatarView);\n\n    if (Reflect.has(data, 'text'))\n      this.text = Text.fromAttributed(data.text);\n    \n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ButtonView extends YTNode {\n  static type = 'ButtonView';\n\n  public secondary_icon_image?: Thumbnail[];\n  public icon_name?: string;\n  public enable_icon_button?: boolean;\n  public tooltip?: string;\n  public icon_image_flip_for_rtl?: boolean;\n  public button_size?: 'BUTTON_VIEW_MODEL_SIZE_UNKNOWN' | 'BUTTON_VIEW_MODEL_SIZE_DEFAULT' | 'BUTTON_VIEW_MODEL_SIZE_COMPACT' | 'BUTTON_VIEW_MODEL_SIZE_XSMALL' | 'BUTTON_VIEW_MODEL_SIZE_LARGE' | 'BUTTON_VIEW_MODEL_SIZE_XLARGE' | 'BUTTON_VIEW_MODEL_SIZE_XXLARGE';\n  public icon_position?: 'BUTTON_VIEW_MODEL_ICON_POSITION_UNKNOWN' | 'BUTTON_VIEW_MODEL_ICON_POSITION_TRAILING' | 'BUTTON_VIEW_MODEL_ICON_POSITION_LEADING' | 'BUTTON_VIEW_MODEL_ICON_POSITION_ABOVE' | 'BUTTON_VIEW_MODEL_ICON_POSITION_LEADING_TRAILING';\n  public is_full_width?: boolean;\n  public state?: 'BUTTON_VIEW_MODEL_STATE_UNKNOWN' | 'BUTTON_VIEW_MODEL_STATE_ACTIVE' | 'BUTTON_VIEW_MODEL_STATE_INACTIVE' | 'BUTTON_VIEW_MODEL_STATE_DISABLED';\n  public on_disabled_tap?: NavigationEndpoint;\n  public custom_border_color?: number;\n  public on_tap?: NavigationEndpoint;\n  public style?: 'BUTTON_VIEW_MODEL_STYLE_UNKNOWN' | 'BUTTON_VIEW_MODEL_STYLE_CTA' | 'BUTTON_VIEW_MODEL_STYLE_BRAND' | 'BUTTON_VIEW_MODEL_STYLE_ADS_CTA' | 'BUTTON_VIEW_MODEL_STYLE_OVERLAY' | 'BUTTON_VIEW_MODEL_STYLE_CTA_THEMED' | 'BUTTON_VIEW_MODEL_STYLE_BLACK_CTA' | 'BUTTON_VIEW_MODEL_STYLE_CUSTOM' | 'BUTTON_VIEW_MODEL_STYLE_MONO' | 'BUTTON_VIEW_MODEL_STYLE_OVERLAY_DARK' | 'BUTTON_VIEW_MODEL_STYLE_CTA_OVERLAY' | 'BUTTON_VIEW_MODEL_STYLE_BRAND_AI' | 'BUTTON_VIEW_MODEL_STYLE_YT_GRADIENT' | 'BUTTON_VIEW_MODEL_STYLE_BRAND_GRADIENT';\n  public icon_image?: object;\n  public custom_dark_theme_border_color?: number;\n  public title?: string;\n  public target_id?: string;\n  public enable_full_width_margins?: boolean;\n  public custom_font_color?: number;\n  public button_type?: 'BUTTON_VIEW_MODEL_TYPE_UNKNOWN' | 'BUTTON_VIEW_MODEL_TYPE_FILLED' | 'BUTTON_VIEW_MODEL_TYPE_OUTLINE' | 'BUTTON_VIEW_MODEL_TYPE_TEXT' | 'BUTTON_VIEW_MODEL_TYPE_TONAL';\n  public enabled?: boolean;\n  public accessibility_id?: string;\n  public custom_background_color?: number;\n  public on_long_press?: NavigationEndpoint;\n  public title_formatted?: object;\n  public on_visible?: object;\n  public icon_trailing?: boolean;\n  public accessibility_text?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if ('secondaryIconImage' in data)\n      this.secondary_icon_image = Thumbnail.fromResponse(data.secondaryIconImage);\n\n    if ('iconName' in data)\n      this.icon_name = data.iconName;\n    \n    if ('enableIconButton' in data)\n      this.enable_icon_button = data.enableIconButton;\n    \n    if ('tooltip' in data)\n      this.tooltip = data.tooltip;\n    \n    if ('iconImageFlipForRtl' in data)\n      this.icon_image_flip_for_rtl = data.iconImageFlipForRtl;\n    \n    if ('buttonSize' in data)\n      this.button_size = data.buttonSize;\n    \n    if ('iconPosition' in data)\n      this.icon_position = data.iconPosition;\n    \n    if ('isFullWidth' in data)\n      this.is_full_width = data.isFullWidth;\n    \n    if ('state' in data)\n      this.state = data.state;\n    \n    if ('onDisabledTap' in data)\n      this.on_disabled_tap = new NavigationEndpoint(data.onDisabledTap);\n    \n    if ('customBorderColor' in data)\n      this.custom_border_color = data.customBorderColor;\n    \n    if ('onTap' in data)\n      this.on_tap = new NavigationEndpoint(data.onTap);\n    \n    if ('style' in data)\n      this.style = data.style;\n    \n    if ('iconImage' in data)\n      this.icon_image = data.iconImage;\n    \n    if ('customDarkThemeBorderColor' in data)\n      this.custom_dark_theme_border_color = data.customDarkThemeBorderColor;\n    \n    if ('title' in data)\n      this.title = data.title;\n    \n    if ('targetId' in data)\n      this.target_id = data.targetId;\n    \n    if ('enableFullWidthMargins' in data)\n      this.enable_full_width_margins = data.enableFullWidthMargins;\n    \n    if ('customFontColor' in data)\n      this.custom_font_color = data.customFontColor;\n    \n    if ('type' in data)\n      this.button_type = data.type;\n    \n    if ('enabled' in data)\n      this.enabled = data.enabled;\n    \n    if ('accessibilityId' in data)\n      this.accessibility_id = data.accessibilityId;\n    \n    if ('customBackgroundColor' in data)\n      this.custom_background_color = data.customBackgroundColor;\n    \n    if ('onLongPress' in data)\n      this.on_long_press = new NavigationEndpoint(data.onLongPress);\n    \n    if ('titleFormatted' in data)\n      this.title_formatted = data.titleFormatted;\n    \n    if ('onVisible' in data)\n      this.on_visible = data.onVisible;\n    \n    if ('iconTrailing' in data)\n      this.icon_trailing = data.iconTrailing;\n    \n    if ('accessibilityText' in data)\n      this.accessibility_text = data.accessibilityText;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class BackgroundPromo extends YTNode {\n  static type = 'BackgroundPromo';\n\n  public body_text?: Text;\n  public cta_button?: Button | ButtonView | null;\n  public icon_type?: string;\n  public title?: Text;\n  \n  constructor(data: RawNode) {\n    super();\n    this.body_text = new Text(data.bodyText);\n    this.cta_button = Parser.parseItem(data.ctaButton, [ Button, ButtonView ]);\n    \n    if (Reflect.has(data, 'icon'))\n      this.icon_type = data.icon.iconType;\n    \n    this.title = new Text(data.title);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class BackstageImage extends YTNode {\n  static type = 'BackstageImage';\n\n  image: Thumbnail[];\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.endpoint = new NavigationEndpoint(data.command);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ToggleButton extends YTNode {\n  static type = 'ToggleButton';\n\n  text: Text;\n  toggled_text: Text;\n  tooltip: string;\n  toggled_tooltip: string;\n  is_toggled: boolean;\n  is_disabled: boolean;\n  icon_type: string;\n  like_count?: number;\n  short_like_count?: string;\n  endpoint: NavigationEndpoint;\n  toggled_endpoint: NavigationEndpoint;\n  button_id?: string;\n  target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.toggled_text = new Text(data.toggledText);\n    this.tooltip = data.defaultTooltip;\n    this.toggled_tooltip = data.toggledTooltip;\n    this.is_toggled = data.isToggled;\n    this.is_disabled = data.isDisabled;\n    this.icon_type = data.defaultIcon?.iconType;\n\n    const acc_label =\n      data?.defaultText?.accessibility?.accessibilityData?.label ||\n      data?.accessibilityData?.accessibilityData?.label ||\n      data?.accessibility?.label;\n\n    if (this.icon_type == 'LIKE') {\n      this.like_count = parseInt(acc_label.replace(/\\D/g, ''));\n      this.short_like_count = new Text(data.defaultText).toString();\n    }\n\n    this.endpoint =\n      data.defaultServiceEndpoint?.commandExecutorCommand?.commands ?\n        new NavigationEndpoint(data.defaultServiceEndpoint.commandExecutorCommand.commands.pop()) :\n        new NavigationEndpoint(data.defaultServiceEndpoint);\n\n    this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n\n    if (Reflect.has(data, 'toggleButtonSupportedData') && Reflect.has(data.toggleButtonSupportedData, 'toggleButtonIdData')) {\n      this.button_id = data.toggleButtonSupportedData.toggleButtonIdData.id;\n    }\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nexport default class CreatorHeart extends YTNode {\n  static type = 'CreatorHeart';\n\n  creator_thumbnail: Thumbnail[];\n  heart_icon_type?: string;\n  heart_color: {\n    basic_color_palette_data: {\n      foreground_title_color: string;\n    }\n  };\n  hearted_tooltip: string;\n  is_hearted: boolean;\n  is_enabled: boolean;\n  kennedy_heart_color_string: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);\n\n    if (Reflect.has(data, 'heartIcon') && Reflect.has(data.heartIcon, 'iconType')) {\n      this.heart_icon_type = data.heartIcon.iconType;\n    }\n\n    this.heart_color = {\n      basic_color_palette_data: {\n        foreground_title_color: data.heartColor?.basicColorPaletteData?.foregroundTitleColor\n      }\n    };\n\n    this.hearted_tooltip = data.heartedTooltip;\n    this.is_hearted = data.isHearted;\n    this.is_enabled = data.isEnabled;\n    this.kennedy_heart_color_string = data.kennedyHeartColorString;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport ToggleButton from '../ToggleButton.js';\nimport CreatorHeart from './CreatorHeart.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentActionButtons extends YTNode {\n  static type = 'CommentActionButtons';\n\n  like_button: ToggleButton | null;\n  dislike_button: ToggleButton | null;\n  reply_button: Button | null;\n  creator_heart: CreatorHeart | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, ToggleButton);\n    this.dislike_button = Parser.parseItem(data.dislikeButton, ToggleButton);\n    this.reply_button = Parser.parseItem(data.replyButton, Button);\n    this.creator_heart = Parser.parseItem(data.creatorHeart, CreatorHeart);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class ToggleButtonView extends YTNode {\n  static type = 'ToggleButtonView';\n\n  default_button: ButtonView | null;\n  toggled_button: ButtonView | null;\n  is_toggling_disabled: boolean;\n  identifier?: string;\n  is_toggled?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.default_button = Parser.parseItem(data.defaultButtonViewModel, ButtonView);\n    this.toggled_button = Parser.parseItem(data.toggledButtonViewModel, ButtonView);\n    this.is_toggling_disabled = data.isTogglingDisabled;\n    this.identifier = data.identifier;\n    \n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class LikeButtonView extends YTNode {\n  static type = 'LikeButtonView';\n\n  toggle_button: ToggleButtonView | null;\n  like_status_entity_key: string;\n  like_status_entity: {\n    key: string,\n    like_status: string\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.toggle_button = Parser.parseItem(data.toggleButtonViewModel, ToggleButtonView);\n    this.like_status_entity_key = data.likeStatusEntityKey;\n    this.like_status_entity = {\n      key: data.likeStatusEntity.key,\n      like_status: data.likeStatusEntity.likeStatus\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class DislikeButtonView extends YTNode {\n  static type = 'DislikeButtonView';\n\n  toggle_button: ToggleButtonView | null;\n  dislike_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.toggle_button = Parser.parseItem(data.toggleButtonViewModel, ToggleButtonView);\n    this.dislike_entity_key = data.dislikeEntityKey;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport LikeButtonView from './LikeButtonView.js';\nimport DislikeButtonView from './DislikeButtonView.js';\n\nexport default class SegmentedLikeDislikeButtonView extends YTNode {\n  static type = 'SegmentedLikeDislikeButtonView';\n\n  like_button: LikeButtonView | null;\n  dislike_button: DislikeButtonView | null;\n  icon_type: string;\n  like_count_entity: {\n    key: string\n  };\n  dynamic_like_count_update_data: {\n    update_status_key: string,\n    placeholder_like_count_values_key: string,\n    update_delay_loop_id: string,\n    update_delay_sec: number\n  };\n\n  like_count?: number;\n  short_like_count?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButtonViewModel, LikeButtonView);\n    this.dislike_button = Parser.parseItem(data.dislikeButtonViewModel, DislikeButtonView);\n    this.icon_type = data.iconType;\n\n    if (this.like_button && this.like_button.toggle_button) {\n      const toggle_button = this.like_button.toggle_button;\n\n      if (toggle_button.default_button) {\n        this.short_like_count = toggle_button.default_button.title;\n\n        if (toggle_button.default_button.accessibility_text)\n          this.like_count = parseInt(toggle_button.default_button.accessibility_text.replace(/\\D/g, ''));\n      } else if (toggle_button.toggled_button) {\n        this.short_like_count = toggle_button.toggled_button.title;\n        if (toggle_button.toggled_button.accessibility_text)\n          this.like_count = parseInt(toggle_button.toggled_button.accessibility_text.replace(/\\D/g, ''));\n      }\n    }\n\n    this.like_count_entity = {\n      key: data.likeCountEntity.key\n    };\n\n    this.dynamic_like_count_update_data = {\n      update_status_key: data.dynamicLikeCountUpdateData.updateStatusKey,\n      placeholder_like_count_values_key: data.dynamicLikeCountUpdateData.placeholderLikeCountValuesKey,\n      update_delay_loop_id: data.dynamicLikeCountUpdateData.updateDelayLoopId,\n      update_delay_sec: data.dynamicLikeCountUpdateData.updateDelaySec\n    };\n  }\n}", "import Button from '../Button.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MenuServiceItem extends Button {\n  static type = 'MenuServiceItem';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class DownloadButton extends YTNode {\n  static type = 'DownloadButton';\n\n  style: string;\n  size: string; // TODO: check this\n  endpoint: NavigationEndpoint;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.style = data.style;\n    this.size = data.size;\n    this.endpoint = new NavigationEndpoint(data.command);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class MenuServiceItemDownload extends YTNode {\n  static type = 'MenuServiceItemDownload';\n\n  has_separator: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.has_separator = !!data.hasSeparator;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nimport Button from '../Button.js';\nimport ButtonView from '../ButtonView.js';\nimport MenuServiceItem from './MenuServiceItem.js';\nimport DownloadButton from '../DownloadButton.js';\nimport MenuServiceItemDownload from './MenuServiceItemDownload.js';\n\nexport default class MenuFlexibleItem extends YTNode {\n  static type = 'MenuFlexibleItem';\n\n  public menu_item: MenuServiceItem | MenuServiceItemDownload | null;\n  public top_level_button: DownloadButton | ButtonView | Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.menu_item = Parser.parseItem(data.menuItem, [ MenuServiceItem, MenuServiceItemDownload ]);\n    this.top_level_button = Parser.parseItem(data.topLevelButton, [ DownloadButton, ButtonView, Button ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class LikeButton extends YTNode {\n  static type = 'LikeButton';\n\n  target: {\n    video_id: string;\n  };\n\n  like_status: string;\n  likes_allowed: string;\n  endpoints?: NavigationEndpoint[];\n\n  constructor(data: RawNode) {\n    super();\n\n    this.target = {\n      video_id: data.target.videoId\n    };\n\n    this.like_status = data.likeStatus;\n    this.likes_allowed = data.likesAllowed;\n\n    if (Reflect.has(data, 'serviceEndpoints')) {\n      this.endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport type ActionRow = {\n  actions: ObservedArray<ButtonView | ToggleButtonView>;\n};\n\nexport default class FlexibleActionsView extends YTNode {\n  static type = 'FlexibleActionsView';\n\n  actions_rows: ActionRow[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions_rows = data.actionsRows.map((row: RawNode) => ({\n      actions: Parser.parseArray(row.actions, [ ButtonView, ToggleButtonView ])\n    }));\n    this.style = data.style;\n  }\n}", "import { Parser } from '../../index.js';\nimport type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport Button from '../Button.js';\nimport ButtonView from '../ButtonView.js';\nimport SegmentedLikeDislikeButtonView from '../SegmentedLikeDislikeButtonView.js';\nimport MenuFlexibleItem from './MenuFlexibleItem.js';\nimport LikeButton from '../LikeButton.js';\nimport ToggleButton from '../ToggleButton.js';\nimport FlexibleActionsView from '../FlexibleActionsView.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';\n\nexport default class Menu extends YTNode {\n  static type = 'Menu';\n\n  public items: ObservedArray<YTNode>;\n  public flexible_items: ObservedArray<MenuFlexibleItem>;\n  public top_level_buttons: ObservedArray<ToggleButton | LikeButton | Button |ButtonView | SegmentedLikeDislikeButtonView | FlexibleActionsView>;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.flexible_items = Parser.parseArray(data.flexibleItems, MenuFlexibleItem);\n    this.top_level_buttons = Parser.parseArray(data.topLevelButtons, [ ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView, FlexibleActionsView ]);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n\n  // XXX: alias for consistency\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport CommentActionButtons from './comments/CommentActionButtons.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class BackstagePost extends YTNode {\n  static type = 'BackstagePost';\n\n  id: string;\n  author: Author;\n  content: Text;\n  published: Text;\n  poll_status?: string;\n  vote_status?: string;\n  vote_count?: Text;\n  menu?: Menu | null;\n  action_buttons?: CommentActionButtons | null;\n  vote_button?: Button | null;\n  surface: string;\n  endpoint?: NavigationEndpoint;\n  attachment;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.postId;\n\n    this.author = new Author({\n      ...data.authorText,\n      navigationEndpoint: data.authorEndpoint\n    }, null, data.authorThumbnail);\n\n    this.content = new Text(data.contentText);\n    this.published = new Text(data.publishedTimeText);\n\n    if (Reflect.has(data, 'pollStatus')) {\n      this.poll_status = data.pollStatus;\n    }\n\n    if (Reflect.has(data, 'voteStatus')) {\n      this.vote_status = data.voteStatus;\n    }\n\n    if (Reflect.has(data, 'voteCount')) {\n      this.vote_count = new Text(data.voteCount);\n    }\n\n    if (Reflect.has(data, 'actionMenu')) {\n      this.menu = Parser.parseItem(data.actionMenu, Menu);\n    }\n\n    if (Reflect.has(data, 'actionButtons')) {\n      this.action_buttons = Parser.parseItem(data.actionButtons, CommentActionButtons);\n    }\n\n    if (Reflect.has(data, 'voteButton')) {\n      this.vote_button = Parser.parseItem(data.voteButton, Button);\n    }\n\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    if (Reflect.has(data, 'backstageAttachment')) {\n      this.attachment = Parser.parseItem(data.backstageAttachment);\n    }\n\n    this.surface = data.surface;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class BackstagePostThread extends YTNode {\n  static type = 'BackstagePostThread';\n\n  post: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.post = Parser.parseItem(data.post);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\n\nexport default class BadgeView extends YTNode {\n  text: string;\n  style: string;\n  accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = data.badgeText;\n    this.style = data.badgeStyle;\n    this.accessibility_label = data.accessibilityLabel;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SubFeedOption extends YTNode {\n  static type = 'SubFeedOption';\n\n  name: Text;\n  is_selected: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.name = new Text(data.name);\n    this.is_selected = data.isSelected;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SubFeedOption from './SubFeedOption.js';\n\nexport default class SubFeedSelector extends YTNode {\n  static type = 'SubFeedSelector';\n\n  title: Text;\n  options: ObservedArray<SubFeedOption>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.options = Parser.parseArray(data.options, SubFeedOption);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EomSettingsDisclaimer extends YTNode {\n  static type = 'EomSettingsDisclaimer';\n\n  disclaimer: Text;\n  info_icon: {\n    icon_type: string\n  };\n  usage_scenario: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.disclaimer = new Text(data.disclaimer);\n    this.info_icon = {\n      icon_type: data.infoIcon.iconType\n    };\n    this.usage_scenario = data.usageScenario;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SearchBox extends YTNode {\n  static type = 'SearchBox';\n\n  endpoint: NavigationEndpoint;\n  search_button: Button | null;\n  clear_button: Button | null;\n  placeholder_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.search_button = Parser.parseItem(data.searchButton, Button);\n    this.clear_button = Parser.parseItem(data.clearButton, Button);\n    this.placeholder_text = new Text(data.placeholderText);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SubFeedSelector from './SubFeedSelector.js';\nimport EomSettingsDisclaimer from './EomSettingsDisclaimer.js';\nimport ToggleButton from './ToggleButton.js';\nimport CompactLink from './CompactLink.js';\nimport SearchBox from './SearchBox.js';\nimport Button from './Button.js';\n\nexport default class BrowseFeedActions extends YTNode {\n  static type = 'BrowseFeedActions';\n\n  public contents: ObservedArray<SubFeedSelector | EomSettingsDisclaimer | ToggleButton | CompactLink | SearchBox | Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ SubFeedSelector, EomSettingsDisclaimer, ToggleButton, CompactLink, SearchBox, Button ]);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class BrowserMediaSession extends YTNode {\n  static type = 'BrowserMediaSession';\n\n  album: Text;\n  thumbnails: Thumbnail[];\n\n  constructor (data: RawNode) {\n    super();\n    this.album = new Text(data.album);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnailDetails);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class ButtonCardView extends YTNode {\n  static type = 'ButtonCardView';\n\n  public title: string;\n  public icon_name: string;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.icon_name = data.image.sources[0].clientResource.imageName;\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}\n", "import { YTNode, observe, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\n// XXX (LuanRT): This is not a real YTNode, but we treat it as one to keep things clean.\nexport class HeaderLink extends YTNode {\n  static type = 'HeaderLink';\n\n  endpoint: NavigationEndpoint;\n  icon: Thumbnail[];\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.icon = Thumbnail.fromResponse(data.icon);\n    this.title = new Text(data.title);\n  }\n}\n\nexport default class ChannelHeaderLinks extends YTNode {\n  static type = 'ChannelHeaderLinks';\n\n  primary: ObservedArray<HeaderLink>;\n  secondary: ObservedArray<HeaderLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary = observe(data.primaryLinks?.map((link: RawNode) => new HeaderLink(link)) || []);\n    this.secondary = observe(data.secondaryLinks?.map((link: RawNode) => new HeaderLink(link)) || []);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ChannelHeaderLinksView extends YTNode {\n  static type = 'ChannelHeaderLinksView';\n\n  first_link?: Text;\n  more?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'firstLink')) {\n      this.first_link = Text.fromAttributed(data.firstLink);\n    }\n\n    if (Reflect.has(data, 'more')) {\n      this.more = Text.fromAttributed(data.more);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreationTextInput extends YTNode {\n  static type = 'ClipCreationTextInput';\n\n  placeholder_text: Text;\n  max_character_limit: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.placeholder_text = new Text(data.placeholderText);\n    this.max_character_limit = data.maxCharacterLimit;\n  }\n}", "import { YTNode } from '../helpers.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreationScrubber extends YTNode {\n  static type = 'ClipCreationScrubber';\n\n  length_template: string;\n  max_length_ms: number;\n  min_length_ms: number;\n  default_length_ms: number;\n  window_size_ms: number;\n  start_label?: string;\n  end_label?: string;\n  duration_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.length_template = data.lengthTemplate;\n    this.max_length_ms = data.maxLengthMs;\n    this.min_length_ms = data.minLengthMs;\n    this.default_length_ms = data.defaultLengthMs;\n    this.window_size_ms = data.windowSizeMs;\n    this.start_label = data.startAccessibility?.accessibilityData?.label;\n    this.end_label = data.endAccessibility?.accessibilityData?.label;\n    this.duration_label = data.durationAccessibility?.accessibilityData?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipAdState extends YTNode {\n  static type = 'ClipAdState';\n\n  title: Text;\n  body: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.body = new Text(data.body);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Button from './Button.js';\nimport ClipCreationTextInput from './ClipCreationTextInput.js';\nimport ClipCreationScrubber from './ClipCreationScrubber.js';\nimport ClipAdState from './ClipAdState.js';\nimport Text from './misc/Text.js';\n\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipCreation extends YTNode {\n  static type = 'ClipCreation';\n\n  user_avatar: Thumbnail[];\n  title_input: ClipCreationTextInput | null;\n  scrubber: ClipCreationScrubber | null;\n  save_button: Button | null;\n  display_name: Text;\n  publicity_label: string;\n  cancel_button: Button | null;\n  ad_state_overlay: ClipAdState | null;\n  external_video_id: string;\n  publicity_label_icon: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.user_avatar = Thumbnail.fromResponse(data.userAvatar);\n    this.title_input = Parser.parseItem(data.titleInput, [ ClipCreationTextInput ]);\n    this.scrubber = Parser.parseItem(data.scrubber, [ ClipCreationScrubber ]);\n    this.save_button = Parser.parseItem(data.saveButton, [ Button ]);\n    this.display_name = new Text(data.displayName);\n    this.publicity_label = data.publicityLabel;\n    this.cancel_button = Parser.parseItem(data.cancelButton, [ Button ]);\n    this.ad_state_overlay = Parser.parseItem(data.adStateOverlay, [ ClipAdState ]);\n    this.external_video_id = data.externalVideoId;\n    this.publicity_label_icon = data.publicityLabelIcon;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\n\nimport ClipCreation from './ClipCreation.js';\n\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class ClipSection extends YTNode {\n  static type = 'ClipSection';\n\n  contents: ObservedArray<ClipCreation> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true, [ ClipCreation ]);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ContinuationItem extends YTNode {\n  static type = 'ContinuationItem';\n\n  trigger: string;\n  button?: Button | null;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.trigger = data.trigger;\n\n    if (Reflect.has(data, 'button')) {\n      this.button = Parser.parseItem(data.button, Button);\n    }\n\n    this.endpoint = new NavigationEndpoint(data.continuationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\n\nexport default class EngagementPanelTitleHeader extends YTNode {\n  static type = 'EngagementPanelTitleHeader';\n\n  public title: Text;\n  public visibility_button: Button | null;\n  public contextual_info?: Text;\n  public menu: YTNode | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contextual_info = data.contextualInfo ? new Text(data.contextualInfo) : undefined;\n    this.visibility_button = Parser.parseItem(data.visibilityButton, Button);\n    this.menu = Parser.parseItem(data.menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class MacroMarkersInfoItem extends YTNode {\n  static type = 'MacroMarkersInfoItem';\n\n  info_text: Text;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.info_text = new Text(data.infoText);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MacroMarkersListItem extends YTNode {\n  static type = 'MacroMarkersListItem';\n\n  title: Text;\n  time_description: Text;\n  thumbnail: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n  layout: string;\n  is_highlighted: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.time_description = new Text(data.timeDescription);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.layout = data.layout;\n    this.is_highlighted = !!data.isHighlighted;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport MacroMarkersInfoItem from './MacroMarkersInfoItem.js';\nimport MacroMarkersListItem from './MacroMarkersListItem.js';\n\nexport default class MacroMarkersList extends YTNode {\n  static type = 'MacroMarkersList';\n\n  contents: ObservedArray<MacroMarkersInfoItem | MacroMarkersListItem>;\n  sync_button_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ MacroMarkersInfoItem, MacroMarkersListItem ]);\n    this.sync_button_label = new Text(data.syncButtonLabel);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\n\nexport default class ProductList extends YTNode {\n  static type = 'ProductList';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class SectionList extends YTNode {\n  static type = 'SectionList';\n\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n  continuation?: string;\n  header?: YTNode;\n  sub_menu?: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n\n    if (Reflect.has(data, 'continuations')) {\n      if (Reflect.has(data.continuations[0], 'nextContinuationData')) {\n        this.continuation = data.continuations[0].nextContinuationData.continuation;\n      } else if (Reflect.has(data.continuations[0], 'reloadContinuationData')) {\n        this.continuation = data.continuations[0].reloadContinuationData.continuation;\n      }\n    }\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'subMenu')) {\n      this.sub_menu = Parser.parseItem(data.subMenu);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nimport type { RawNode } from '../index.js';\n\nexport default class ExpandableVideoDescriptionBody extends YTNode {\n  static type = 'ExpandableVideoDescriptionBody';\n\n  show_more_text: Text;\n  show_less_text: Text;\n  attributed_description_body_text?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.show_more_text = new Text(data.showMoreText);\n    this.show_less_text = new Text(data.showLessText);\n    if (Reflect.has(data, 'attributedDescriptionBodyText')) {\n      this.attributed_description_body_text = Text.fromAttributed(data.attributedDescriptionBodyText);\n    }\n  }\n}\n", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SearchRefinementCard extends YTNode {\n  static type = 'SearchRefinementCard';\n\n  thumbnails: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  query: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.searchEndpoint);\n    this.query = new Text(data.query).toString();\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class GameCard extends YTNode {\n  static type = 'GameCard';\n\n  game: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.game = Parser.parseItem(data.game);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class HorizontalList extends YTNode {\n  static type = 'HorizontalList';\n\n  visible_item_count: string;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.visible_item_count = data.visibleItemCount;\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport HorizontalCardList from './HorizontalCardList.js';\nimport HorizontalList from './HorizontalList.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ExpandableMetadata extends YTNode {\n  static type = 'ExpandableMetadata';\n\n  header?: {\n    collapsed_title: Text;\n    collapsed_thumbnail: Thumbnail[];\n    collapsed_label: Text;\n    expanded_title: Text;\n  };\n\n  expanded_content: HorizontalCardList | HorizontalList | null;\n  expand_button: Button | null;\n  collapse_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'header')) {\n      this.header = {\n        collapsed_title: new Text(data.header.collapsedTitle),\n        collapsed_thumbnail: Thumbnail.fromResponse(data.header.collapsedThumbnail),\n        collapsed_label: new Text(data.header.collapsedLabel),\n        expanded_title: new Text(data.header.expandedTitle)\n      };\n    }\n\n    this.expanded_content = Parser.parseItem(data.expandedContent, [ HorizontalCardList, HorizontalList ]);\n    this.expand_button = Parser.parseItem(data.expandButton, Button);\n    this.collapse_button = Parser.parseItem(data.collapseButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataBadge extends YTNode {\n  static type = 'MetadataBadge';\n\n  icon_type?: string;\n  style?: string;\n  label?: string;\n  tooltip?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'style')) {\n      this.style = data.style;\n    }\n\n    if (Reflect.has(data, 'label')) {\n      this.label = data.label;\n    }\n\n    if (Reflect.has(data, 'tooltip') || Reflect.has(data, 'iconTooltip')) {\n      this.tooltip = data.tooltip || data.iconTooltip;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayTimeStatus extends YTNode {\n  static type = 'ThumbnailOverlayTimeStatus';\n\n  text: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n    this.style = data.style;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ExpandableMetadata from './ExpandableMetadata.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Video extends YTNode {\n  static type = 'Video';\n\n  public video_id: string;\n  public title: Text;\n  public untranslated_title?: Text;\n  public description_snippet?: Text;\n  public snippets?: { text: Text; hover_text: Text; }[];\n  public expandable_metadata: ExpandableMetadata | null;\n  public additional_metadatas?: Text[];\n  public thumbnails: Thumbnail[];\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public rich_thumbnail?: YTNode;\n  public author: Author;\n  public badges: MetadataBadge[];\n  public endpoint?: NavigationEndpoint;\n  public published?: Text;\n  public view_count?: Text;\n  public short_view_count?: Text;\n  public upcoming?: Date;\n  public length_text?: Text;\n  public show_action_menu: boolean;\n  public is_watched: boolean;\n  public menu: Menu | null;\n  public byline_text?: Text;\n  public search_video_result_entity_key?: string;\n  public service_endpoints?: NavigationEndpoint[];\n  public service_endpoint?: NavigationEndpoint;\n  public style?: 'VIDEO_STYLE_TYPE_UNKNOWN' | 'VIDEO_STYLE_TYPE_NORMAL' | 'VIDEO_STYLE_TYPE_POST' | 'VIDEO_STYLE_TYPE_SUB' | 'VIDEO_STYLE_TYPE_LIVE_POST' | 'VIDEO_STYLE_TYPE_FULL_BLEED_ISOLATED' | 'VIDEO_STYLE_TYPE_WITH_EXPANDED_METADATA';\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.video_id = data.videoId;\n    this.expandable_metadata = Parser.parseItem(data.expandableMetadata, ExpandableMetadata);\n\n    if ('untranslatedTitle' in data)\n      this.untranslated_title = new Text(data.untranslatedTitle);\n\n    if ('descriptionSnippet' in data)\n      this.description_snippet = new Text(data.descriptionSnippet);\n\n    if ('detailedMetadataSnippets' in data) {\n      this.snippets = data.detailedMetadataSnippets.map((snippet: RawNode) => ({\n        text: new Text(snippet.snippetText),\n        hover_text: new Text(snippet.snippetHoverText)\n      }));\n    }\n\n    if ('additionalMetadatas' in data)\n      this.additional_metadatas = data.additionalMetadatas.map((meta: RawNode) => new Text(meta));\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n\n    if ('richThumbnail' in data)\n      this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n\n    this.author = new Author(data.ownerText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n\n    if ('navigationEndpoint' in data)\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('publishedTimeText' in data)\n      this.published = new Text(data.publishedTimeText);\n\n    if ('viewCountText' in data)\n      this.view_count = new Text(data.viewCountText);\n\n    if ('shortViewCountText' in data)\n      this.short_view_count = new Text(data.shortViewCountText);\n\n    if ('upcomingEventData' in data)\n      this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));\n\n    this.show_action_menu = !!data.showActionMenu;\n    this.is_watched = !!data.isWatched;\n    this.menu = Parser.parseItem(data.menu, Menu);\n\n    if ('searchVideoResultEntityKey' in data)\n      this.search_video_result_entity_key = data.searchVideoResultEntityKey;\n\n    if ('bylineText' in data)\n      this.byline_text = new Text(data.bylineText);\n\n    if ('lengthText' in data)\n      this.length_text = new Text(data.lengthText);\n\n    if ('serviceEndpoints' in data)\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if ('serviceEndpoint' in data)\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    \n    if ('style' in data)\n      this.style = data.style;\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get description(): string {\n    if (this.snippets)\n      return this.snippets.map((snip) => snip.text.toString()).join('');\n    return this.description_snippet?.toString() || '';\n  }\n\n  get is_live(): boolean {\n    return this.badges.some((badge) => {\n      if (badge.style === 'BADGE_STYLE_TYPE_LIVE_NOW' || badge.label === 'LIVE')\n        return true;\n    }) || this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'LIVE';\n  }\n\n  get is_upcoming(): boolean | undefined {\n    return this.upcoming && this.upcoming > new Date();\n  }\n\n  get is_premiere(): boolean {\n    return this.badges.some((badge) => badge.label === 'PREMIERE');\n  }\n\n  get is_4k(): boolean {\n    return this.badges.some((badge) => badge.label === '4K');\n  }\n\n  get has_captions(): boolean {\n    return this.badges.some((badge) => badge.label === 'CC');\n  }\n\n  get best_thumbnail(): Thumbnail | undefined {\n    return this.thumbnails[0];\n  }\n\n  get duration() {\n    const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);\n    const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();\n    return {\n      text: length_text,\n      seconds: length_text ? timeToSeconds(length_text) : 0\n    };\n  }\n}\n", "import type { RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Video from './Video.js';\n\nexport default class VideoCard extends Video {\n  static type = 'VideoCard';\n  \n  public metadata_text?: Text;\n\n  constructor(data: RawNode) {\n    super(data);\n    if (Reflect.has(data, 'metadataText')) {\n      this.metadata_text = new Text(data.metadataText);\n      if (this.metadata_text.text) {\n        this.short_view_count = new Text({ simpleText: this.metadata_text.text.split('\u00B7')[0]?.trim() } as RawNode);\n        this.published = new Text({ simpleText: this.metadata_text.text.split('\u00B7')[1]?.trim() } as RawNode);\n      }\n    }\n    \n    if (Reflect.has(data, 'bylineText')) {\n      this.author = new Author(data.bylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ContentPreviewImageView extends YTNode {\n  static type = 'ContentPreviewImageView';\n\n  image: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nimport ContentPreviewImageView from './ContentPreviewImageView.js';\nimport { Parser } from '../index.js';\n\nimport type { RawNode } from '../types/index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class VideoAttributeView extends YTNode {\n  static type = 'VideoAttributeView';\n\n  image: ContentPreviewImageView | Thumbnail[] | null;\n  image_style: string;\n  title: string;\n  subtitle: string;\n  secondary_subtitle?: {\n    content: string\n  };\n  orientation: string;\n  sizing_rule: string;\n  overflow_menu_on_tap: NavigationEndpoint;\n  overflow_menu_a11y_label: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (data.image?.sources) {\n      this.image = Thumbnail.fromResponse(data.image);\n    } else {\n      this.image = Parser.parseItem(data.image, ContentPreviewImageView);\n    }\n\n    this.image_style = data.imageStyle;\n    this.title = data.title;\n    this.subtitle = data.subtitle;\n\n    if (Reflect.has(data, 'secondarySubtitle')) {\n      this.secondary_subtitle = {\n        content: data.secondarySubtitle.content\n      };\n    }\n\n    this.orientation = data.orientation;\n    this.sizing_rule = data.sizingRule;\n    this.overflow_menu_on_tap = new NavigationEndpoint(data.overflowMenuOnTap);\n    this.overflow_menu_a11y_label = data.overflowMenuA11yLabel;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport SearchRefinementCard from './SearchRefinementCard.js';\nimport Button from './Button.js';\nimport MacroMarkersListItem from './MacroMarkersListItem.js';\nimport GameCard from './GameCard.js';\nimport VideoCard from './VideoCard.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class HorizontalCardList extends YTNode {\n  static type = 'HorizontalCardList';\n\n  cards: ObservedArray<VideoAttributeView | SearchRefinementCard | MacroMarkersListItem | GameCard | VideoCard>;\n  header: YTNode;\n  previous_button: Button | null;\n  next_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.cards = Parser.parseArray(data.cards, [ VideoAttributeView, SearchRefinementCard, MacroMarkersListItem, GameCard, VideoCard ]);\n    this.header = Parser.parseItem(data.header);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class Factoid extends YTNode {\n  static type = 'Factoid';\n\n  label: Text;\n  value: Text;\n  accessibility_text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.value = new Text(data.value);\n    this.accessibility_text = data.accessibilityText;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Factoid from './Factoid.js';\n\nexport default class UploadTimeFactoid extends YTNode {\n  static type = 'UploadTimeFactoid';\n\n  factoid: Factoid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.factoid = Parser.parseItem(data.factoid, Factoid);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Factoid from './Factoid.js';\n\nexport default class ViewCountFactoid extends YTNode {\n  static type = 'ViewCountFactoid';\n\n  view_count_entity_key: string;\n  factoid: Factoid | null;\n  view_count_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.view_count_entity_key = data.viewCountEntityKey;\n    this.factoid = Parser.parseItem(data.factoid, [ Factoid ]);\n    this.view_count_type = data.viewCountType;\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Factoid from './Factoid.js';\n\nexport default class HypePointsFactoid extends YTNode {\n  static type = 'HypePointsFactoid';\n\n  public factoid: Factoid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.factoid = Parser.parseItem(data.factoid, Factoid);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport Factoid from './Factoid.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport UploadTimeFactoid from './UploadTimeFactoid.js';\nimport ViewCountFactoid from './ViewCountFactoid.js';\nimport HypePointsFactoid from './HypePointsFactoid.js';\n\nexport default class VideoDescriptionHeader extends YTNode {\n  static type = 'VideoDescriptionHeader';\n\n  channel: Text;\n  channel_navigation_endpoint?: NavigationEndpoint;\n  channel_thumbnail: Thumbnail[];\n  factoids: ObservedArray<HypePointsFactoid | Factoid | ViewCountFactoid | UploadTimeFactoid>;\n  publish_date: Text;\n  title: Text;\n  views: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.channel = new Text(data.channel);\n    this.channel_navigation_endpoint = new NavigationEndpoint(data.channelNavigationEndpoint);\n    this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);\n    this.publish_date = new Text(data.publishDate);\n    this.views = new Text(data.views);\n    this.factoids = Parser.parseArray(data.factoid, [ Factoid, HypePointsFactoid, ViewCountFactoid, UploadTimeFactoid ]);\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\n\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class VideoDescriptionInfocardsSection extends YTNode {\n  static type = 'VideoDescriptionInfocardsSection';\n\n  section_title: Text;\n  creator_videos_button: Button | null;\n  creator_about_button: Button | null;\n  section_subtitle: Text;\n  channel_avatar: Thumbnail[];\n  channel_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.creator_videos_button = Parser.parseItem(data.creatorVideosButton, Button);\n    this.creator_about_button = Parser.parseItem(data.creatorAboutButton, Button);\n    this.section_subtitle = new Text(data.sectionSubtitle);\n    this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);\n    this.channel_endpoint = new NavigationEndpoint(data.channelEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class InfoRow extends YTNode {\n  static type = 'InfoRow';\n\n  title: Text;\n  default_metadata?: Text;\n  expanded_metadata?: Text;\n  info_row_expand_status_key?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'defaultMetadata')) {\n      this.default_metadata = new Text(data.defaultMetadata);\n    }\n\n    if (Reflect.has(data, 'expandedMetadata')) {\n      this.expanded_metadata = new Text(data.expandedMetadata);\n    }\n\n    if (Reflect.has(data, 'infoRowExpandStatusKey')) {\n      this.info_row_expand_status_key = data.infoRowExpandStatusKey;\n    }\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\n\nexport default class CompactVideo extends YTNode {\n  static type = 'CompactVideo';\n\n  public video_id: string;\n  public thumbnails: Thumbnail[];\n  public rich_thumbnail?: YTNode;\n  public title: Text;\n  public author: Author;\n  public view_count?: Text;\n  public short_view_count?: Text;\n  public short_byline_text?: Text;\n  public long_byline_text?: Text;\n  public published?: Text;\n  public badges: MetadataBadge[];\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public endpoint?: NavigationEndpoint;\n  public menu: Menu | null;\n  public length_text?: Text;\n  public is_watched: boolean;\n  public service_endpoints?: NavigationEndpoint[];\n  public service_endpoint?: NavigationEndpoint;\n  public style?: 'COMPACT_VIDEO_STYLE_TYPE_UNKNOWN' | 'COMPACT_VIDEO_STYLE_TYPE_NORMAL' | 'COMPACT_VIDEO_STYLE_TYPE_PROMINENT_THUMBNAIL' | 'COMPACT_VIDEO_STYLE_TYPE_HERO';\n\n  constructor(data: RawNode) {\n    super();\n    this.video_id = data.videoId;\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnail);\n    this.is_watched = !!data.isWatched;\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n\n    if ('publishedTimeText' in data)\n      this.published = new Text(data.publishedTimeText);\n    \n    if ('shortBylineText' in data)\n      this.view_count = new Text(data.viewCountText);\n\n    if ('shortViewCountText' in data)\n      this.short_view_count = new Text(data.shortViewCountText);\n\n    if ('richThumbnail' in data)\n      this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n\n    if ('shortBylineText' in data)\n      this.short_byline_text = new Text(data.shortBylineText);\n\n    if ('longBylineText' in data)\n      this.long_byline_text = new Text(data.longBylineText);\n\n    if ('lengthText' in data)\n      this.length_text = new Text(data.lengthText);\n\n    if ('serviceEndpoints' in data)\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if ('serviceEndpoint' in data)\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n\n    if ('navigationEndpoint' in data)\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('style' in data)\n      this.style = data.style;\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get duration() {\n    const overlay_time_status = this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus);\n    const length_text = this.length_text?.toString() || overlay_time_status?.text.toString();\n    return {\n      text: length_text,\n      seconds: length_text ? timeToSeconds(length_text) : 0\n    };\n  }\n\n  get best_thumbnail() {\n    return this.thumbnails[0];\n  }\n\n  get is_fundraiser(): boolean {\n    return this.badges.some((badge) => badge.label === 'Fundraiser');\n  }\n\n  get is_live(): boolean {\n    return this.badges.some((badge) => {\n      if (badge.style === 'BADGE_STYLE_TYPE_LIVE_NOW' || badge.label === 'LIVE')\n        return true;\n    });\n  }\n\n  get is_new(): boolean {\n    return this.badges.some((badge) => badge.label === 'New');\n  }\n\n  get is_premiere(): boolean {\n    return this.badges.some((badge) => badge.style === 'PREMIERE');\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport InfoRow from './InfoRow.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CompactVideo from './CompactVideo.js';\n\nexport default class CarouselLockup extends YTNode {\n  static type = 'CarouselLockup';\n\n  info_rows: ObservedArray<InfoRow>;\n  video_lockup?: CompactVideo | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.info_rows = Parser.parseArray(data.infoRows, InfoRow);\n    this.video_lockup = Parser.parseItem(data.videoLockup, CompactVideo);\n  }\n}\n", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport CarouselLockup from './CarouselLockup.js';\n\nexport default class VideoDescriptionMusicSection extends YTNode {\n  static type = 'VideoDescriptionMusicSection';\n\n  carousel_lockups: ObservedArray<CarouselLockup>;\n  section_title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.carousel_lockups = Parser.parseArray(data.carouselLockups, CarouselLockup);\n    this.section_title = new Text(data.sectionTitle);\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text } from '../misc.js';\nimport Button from './Button.js';\n\nexport default class VideoDescriptionTranscriptSection extends YTNode {\n  static type = 'VideoDescriptionTranscriptSection';\n\n  section_title: Text;\n  sub_header_text: Text;\n  primary_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.sub_header_text = new Text(data.subHeaderText);\n    this.primary_button = Parser.parseItem(data.primaryButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class StructuredDescriptionPlaylistLockup extends YTNode {\n  static type = 'StructuredDescriptionPlaylistLockup';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  short_byline_text: Text;\n  video_count_short_text: Text;\n  endpoint: NavigationEndpoint;\n  thumbnail_width: number;\n  aspect_ratio: number;\n  max_lines_title: number;\n  max_lines_short_byline_text: number;\n  overlay_position: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.short_byline_text = new Text(data.shortBylineText);\n    this.video_count_short_text = new Text(data.videoCountShortText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail_width = data.thumbnailWidth;\n    this.aspect_ratio = data.aspectRatio;\n    this.max_lines_title = data.maxLinesTitle;\n    this.max_lines_short_byline_text = data.maxLinesShortBylineText;\n    this.overlay_position = data.overlayPosition;\n  }\n}\n", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport StructuredDescriptionPlaylistLockup from './StructuredDescriptionPlaylistLockup.js';\nimport Text from './misc/Text.js';\n\nexport default class VideoDescriptionCourseSection extends YTNode {\n  static type = 'VideoDescriptionCourseSection';\n\n  section_title: Text;\n  media_lockups: ObservedArray<StructuredDescriptionPlaylistLockup>;\n\n  constructor(data: RawNode) {\n    super();\n    this.section_title = new Text(data.sectionTitle);\n    this.media_lockups = Parser.parseArray(data.mediaLockups, [ StructuredDescriptionPlaylistLockup ]);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\n\nimport ButtonView from './ButtonView.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class VideoAttributesSectionView extends YTNode {\n  static type = 'VideoAttributesSectionView';\n\n  header_title: string;\n  header_subtitle: string;\n  video_attributes: ObservedArray<VideoAttributeView>;\n  previous_button: ButtonView | null;\n  next_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_title = data.headerTitle;\n    this.header_subtitle = data.headerSubtitle;\n    this.video_attributes = Parser.parseArray(data.videoAttributeViewModels, VideoAttributeView);\n    this.previous_button = Parser.parseItem(data.previousButton, ButtonView);\n    this.next_button = Parser.parseItem(data.nextButton, ButtonView);\n  }\n}\n", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nexport default class HowThisWasMadeSectionView extends YTNode {\n  static type = 'HowThisWasMadeSectionView';\n\n  public section_title?: Text;\n  public body_text?: Text;\n  public body_header?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'sectionText'))\n      this.section_title = Text.fromAttributed(data.sectionText);\n    if (Reflect.has(data, 'bodyText'))\n      this.body_text = Text.fromAttributed(data.bodyText);\n    if (Reflect.has(data, 'bodyHeader'))\n      this.body_header = Text.fromAttributed(data.bodyHeader);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ReelShelf extends YTNode {\n  static type = 'ReelShelf';\n\n  title: Text;\n  items: ObservedArray<YTNode>;\n  endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items);\n\n    if (Reflect.has(data, 'endpoint')) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ExpandableVideoDescriptionBody from './ExpandableVideoDescriptionBody.js';\nimport HorizontalCardList from './HorizontalCardList.js';\nimport VideoDescriptionHeader from './VideoDescriptionHeader.js';\nimport VideoDescriptionInfocardsSection from './VideoDescriptionInfocardsSection.js';\nimport VideoDescriptionMusicSection from './VideoDescriptionMusicSection.js';\nimport VideoDescriptionTranscriptSection from './VideoDescriptionTranscriptSection.js';\nimport VideoDescriptionCourseSection from './VideoDescriptionCourseSection.js';\nimport VideoAttributesSectionView from './VideoAttributesSectionView.js';\nimport HowThisWasMadeSectionView from './HowThisWasMadeSectionView.js';\nimport ReelShelf from './ReelShelf.js';\n\nexport default class StructuredDescriptionContent extends YTNode {\n  static type = 'StructuredDescriptionContent';\n\n  public items: ObservedArray<\n    VideoDescriptionHeader | ExpandableVideoDescriptionBody | VideoDescriptionMusicSection |\n    VideoDescriptionInfocardsSection | VideoDescriptionTranscriptSection |\n    VideoDescriptionCourseSection | HorizontalCardList | ReelShelf | VideoAttributesSectionView |\n    HowThisWasMadeSectionView\n  >;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items, [\n      VideoDescriptionHeader, ExpandableVideoDescriptionBody, VideoDescriptionMusicSection,\n      VideoDescriptionInfocardsSection, VideoDescriptionCourseSection, VideoDescriptionTranscriptSection,\n      VideoDescriptionTranscriptSection, HorizontalCardList, ReelShelf, VideoAttributesSectionView,\n      HowThisWasMadeSectionView\n    ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ClipSection from './ClipSection.js';\nimport ContinuationItem from './ContinuationItem.js';\nimport EngagementPanelTitleHeader from './EngagementPanelTitleHeader.js';\nimport MacroMarkersList from './MacroMarkersList.js';\nimport ProductList from './ProductList.js';\nimport SectionList from './SectionList.js';\nimport StructuredDescriptionContent from './StructuredDescriptionContent.js';\nimport VideoAttributeView from './VideoAttributeView.js';\n\nexport default class EngagementPanelSectionList extends YTNode {\n  static type = 'EngagementPanelSectionList';\n\n  header: EngagementPanelTitleHeader | null;\n  content: VideoAttributeView | SectionList | ContinuationItem | ClipSection | StructuredDescriptionContent | MacroMarkersList | ProductList | null;\n  target_id?: string;\n  panel_identifier?: string;\n  identifier?: {\n    surface: string,\n    tag: string\n  };\n  visibility?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, EngagementPanelTitleHeader);\n    this.content = Parser.parseItem(data.content, [ VideoAttributeView, SectionList, ContinuationItem, ClipSection, StructuredDescriptionContent, MacroMarkersList, ProductList ]);\n    this.panel_identifier = data.panelIdentifier;\n    this.identifier = data.identifier ? {\n      surface: data.identifier.surface,\n      tag: data.identifier.tag\n    } : undefined;\n    this.target_id = data.targetId;\n    this.visibility = data.visibility;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport EngagementPanelSectionList from './EngagementPanelSectionList.js';\n\nexport default class ChannelTagline extends YTNode {\n  static type = 'ChannelTagline';\n\n  content: string;\n  max_lines: number;\n  more_endpoint: {\n    show_engagement_panel_endpoint: {\n      engagement_panel: EngagementPanelSectionList | null,\n      engagement_panel_popup_type: string;\n      identifier: {\n        surface: string,\n        tag: string\n      }\n    }\n  } | NavigationEndpoint;\n  more_icon_type: string;\n  more_label: string;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.content = data.content;\n    this.max_lines = data.maxLines;\n    this.more_endpoint = data.moreEndpoint.showEngagementPanelEndpoint ? {\n      show_engagement_panel_endpoint: {\n        engagement_panel: Parser.parseItem(data.moreEndpoint.showEngagementPanelEndpoint.engagementPanel, EngagementPanelSectionList),\n        engagement_panel_popup_type: data.moreEndpoint.showEngagementPanelEndpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,\n        identifier: {\n          surface: data.moreEndpoint.showEngagementPanelEndpoint.identifier.surface,\n          tag: data.moreEndpoint.showEngagementPanelEndpoint.identifier.tag\n        }\n      }\n    } : new NavigationEndpoint(data.moreEndpoint);\n    this.more_icon_type = data.moreIcon.iconType;\n    this.more_label = data.moreLabel;\n    this.target_id = data.targetId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type SuperParsedResult, YTNode } from '../helpers.js';\n\nexport default class SubscriptionNotificationToggleButton extends YTNode {\n  static type = 'SubscriptionNotificationToggleButton';\n\n  states: {\n    id: string;\n    next_id: string;\n    state: SuperParsedResult<YTNode>;\n  };\n\n  current_state_id: string;\n  target_id: string;\n\n  constructor(data: any) {\n    super();\n    this.states = data.states.map((data: RawNode) => ({\n      id: data.stateId,\n      next_id: data.nextStateId,\n      state: Parser.parse(data.state)\n    }));\n\n    this.current_state_id = data.currentStateId;\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscriptionNotificationToggleButton from './SubscriptionNotificationToggleButton.js';\nimport Text from './misc/Text.js';\n\nexport default class SubscribeButton extends YTNode {\n  static type = 'SubscribeButton';\n\n  public button_text: Text;\n  public subscribed: boolean;\n  public enabled: boolean;\n  public item_type: string;\n  public channel_id: string;\n  public show_preferences: boolean;\n  public subscribed_text?: Text;\n  public unsubscribed_text?: Text;\n  public unsubscribe_text?: Text;\n  public notification_preference_button: SubscriptionNotificationToggleButton | null;\n  public service_endpoints?: NavigationEndpoint[];\n  public on_subscribe_endpoints?: NavigationEndpoint[];\n  public on_unsubscribe_endpoints?: NavigationEndpoint[];\n  public subscribed_entity_key?: string;\n  public target_id?: string;\n  public subscribe_accessibility_label?: string;\n  public unsubscribe_accessibility_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.button_text = new Text(data.buttonText);\n    this.subscribed = data.subscribed;\n    this.enabled = data.enabled;\n    this.item_type = data.type;\n    this.channel_id = data.channelId;\n    this.show_preferences = data.showPreferences;\n\n    if (Reflect.has(data, 'subscribedButtonText'))\n      this.subscribed_text = new Text(data.subscribedButtonText);\n\n    if (Reflect.has(data, 'unsubscribedButtonText'))\n      this.unsubscribed_text = new Text(data.unsubscribedButtonText);\n\n    if (Reflect.has(data, 'unsubscribeButtonText'))\n      this.unsubscribe_text = new Text(data.unsubscribeButtonText);\n\n    this.notification_preference_button = Parser.parseItem(data.notificationPreferenceButton, SubscriptionNotificationToggleButton);\n\n    if (Reflect.has(data, 'serviceEndpoints'))\n      this.service_endpoints = data.serviceEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'onSubscribeEndpoints'))\n      this.on_subscribe_endpoints = data.onSubscribeEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'onUnsubscribeEndpoints'))\n      this.on_unsubscribe_endpoints = data.onUnsubscribeEndpoints.map((endpoint: RawNode) => new NavigationEndpoint(endpoint));\n\n    if (Reflect.has(data, 'subscribedEntityKey'))\n      this.subscribed_entity_key = data.subscribedEntityKey;\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n\n    if (Reflect.has(data, 'subscribeAccessibility'))\n      this.subscribe_accessibility_label = data.subscribeAccessibility.accessibilityData?.label;\n\n    if (Reflect.has(data, 'unsubscribeAccessibility'))\n      this.unsubscribe_accessibility_label = data.unsubscribeAccessibility.accessibilityData?.label;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChannelHeaderLinks from './ChannelHeaderLinks.js';\nimport ChannelHeaderLinksView from './ChannelHeaderLinksView.js';\nimport ChannelTagline from './ChannelTagline.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class C4TabbedHeader extends YTNode {\n  static type = 'C4TabbedHeader';\n\n  author: Author;\n  banner?: Thumbnail[];\n  tv_banner?: Thumbnail[];\n  mobile_banner?: Thumbnail[];\n  subscribers?: Text;\n  videos_count?: Text;\n  sponsor_button?: Button | null;\n  subscribe_button?: SubscribeButton | Button | null;\n  header_links?: ChannelHeaderLinks | ChannelHeaderLinksView | null;\n  channel_handle?: Text;\n  channel_id?: string;\n  tagline?: ChannelTagline | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.author = new Author({\n      simpleText: data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.badges, data.avatar);\n\n    if (Reflect.has(data, 'banner')) {\n      this.banner = Thumbnail.fromResponse(data.banner);\n    }\n\n    if (Reflect.has(data, 'tv_banner')) {\n      this.tv_banner = Thumbnail.fromResponse(data.tvBanner);\n    }\n\n    if (Reflect.has(data, 'mobile_banner')) {\n      this.mobile_banner = Thumbnail.fromResponse(data.mobileBanner);\n    }\n\n    if (Reflect.has(data, 'subscriberCountText')) {\n      this.subscribers = new Text(data.subscriberCountText);\n    }\n\n    if (Reflect.has(data, 'videosCountText')) {\n      this.videos_count = new Text(data.videosCountText);\n    }\n\n    if (Reflect.has(data, 'sponsorButton')) {\n      this.sponsor_button = Parser.parseItem(data.sponsorButton, Button);\n    }\n\n    if (Reflect.has(data, 'subscribeButton')) {\n      this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    }\n\n    if (Reflect.has(data, 'headerLinks')) {\n      this.header_links = Parser.parseItem(data.headerLinks, [ ChannelHeaderLinks, ChannelHeaderLinksView ]);\n    }\n\n    if (Reflect.has(data, 'channelHandleText')) {\n      this.channel_handle = new Text(data.channelHandleText);\n    }\n\n    if (Reflect.has(data, 'channelId')) {\n      this.channel_id = data.channelId;\n    }\n\n    if (Reflect.has(data, 'tagline')) {\n      this.tagline = Parser.parseItem(data.tagline, ChannelTagline);\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CallToActionButton extends YTNode {\n  static type = 'CallToActionButton';\n\n  label: Text;\n  icon_type: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.icon_type = data.icon.iconType;\n    this.style = data.style;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class Card extends YTNode {\n  static type = 'Card';\n\n  teaser: YTNode;\n  content: YTNode;\n  card_id?: string;\n  feature?: string;\n\n  cue_ranges: {\n    start_card_active_ms: string;\n    end_card_active_ms: string;\n    teaser_duration_ms: string;\n    icon_after_teaser_ms: string;\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    this.teaser = Parser.parseItem(data.teaser);\n    this.content = Parser.parseItem(data.content);\n\n    if (Reflect.has(data, 'cardId')) {\n      this.card_id = data.cardId;\n    }\n\n    if (Reflect.has(data, 'feature')) {\n      this.feature = data.feature;\n    }\n\n    this.cue_ranges = data.cueRanges.map((cr: any) => ({\n      start_card_active_ms: cr.startCardActiveMs,\n      end_card_active_ms: cr.endCardActiveMs,\n      teaser_duration_ms: cr.teaserDurationMs,\n      icon_after_teaser_ms: cr.iconAfterTeaserMs\n    }));\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class CardCollection extends YTNode {\n  static type = 'CardCollection';\n\n  cards: ObservedArray<YTNode>;\n  header: Text;\n  allow_teaser_dismiss: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.cards = Parser.parseArray(data.cards);\n    this.header = new Text(data.headerText);\n    this.allow_teaser_dismiss = data.allowTeaserDismiss;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class CarouselHeader extends YTNode {\n  static type = 'CarouselHeader';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class CarouselItem extends YTNode {\n  static type = 'CarouselItem';\n\n  items: ObservedArray<YTNode>;\n  background_color: string;\n  layout_style: string;\n  pagination_thumbnails: Thumbnail[];\n  paginator_alignment: string;\n\n  constructor (data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.carouselItems);\n    this.background_color = data.backgroundColor;\n    this.layout_style = data.layoutStyle;\n    this.pagination_thumbnails = Thumbnail.fromResponse(data.paginationThumbnails);\n    this.paginator_alignment = data.paginatorAlignment;\n  }\n\n  // XXX: For consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport ButtonView from './ButtonView.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class TextCarouselItemView extends YTNode {\n  static type = 'TextCarouselItemView';\n\n  icon_name: string;\n  text: Text;\n  on_tap_endpoint: NavigationEndpoint;\n  button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.icon_name = data.iconName;\n    this.text = Text.fromAttributed(data.text);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.button = Parser.parseItem(data.button, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport TextCarouselItemView from './TextCarouselItemView.js';\n\nexport default class CarouselItemView extends YTNode {\n  static type = 'CarouselItemView';\n\n  item_type: string;\n  carousel_item: TextCarouselItemView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.item_type = data.itemType;\n    this.carousel_item = Parser.parseItem(data.carouselItem, TextCarouselItemView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class CarouselTitleView extends YTNode {\n  static type = 'CarouselTitleView';\n\n  title: string;\n  previous_button: ButtonView | null;\n  next_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.previous_button = Parser.parseItem(data.previousButton, ButtonView);\n    this.next_button = Parser.parseItem(data.nextButton, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class Channel extends YTNode {\n  static type = 'Channel';\n\n  id: string;\n  author: Author;\n  subscriber_count: Text;\n  video_count: Text;\n  long_byline: Text;\n  short_byline: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: SubscribeButton | Button | null;\n  description_snippet: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.ownerBadges, data.thumbnail);\n\n    // XXX: `subscriberCountText` is now the channel's handle and `videoCountText` is the subscriber count.\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.video_count = new Text(data.videoCountText);\n    this.long_byline = new Text(data.longBylineText);\n    this.short_byline = new Text(data.shortBylineText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    this.description_snippet = new Text(data.descriptionSnippet);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelAboutFullMetadata extends YTNode {\n  static type = 'ChannelAboutFullMetadata';\n\n  id: string;\n  name: Text;\n  avatar: Thumbnail[];\n  canonical_channel_url: string;\n\n  primary_links: {\n    endpoint: NavigationEndpoint;\n    icon: Thumbnail[];\n    title: Text;\n  }[];\n\n  view_count: Text;\n  joined_date: Text;\n  description: Text;\n  email_reveal: NavigationEndpoint;\n  can_reveal_email: boolean;\n  country: Text;\n  buttons: ObservedArray<Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n    this.name = new Text(data.title);\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.canonical_channel_url = data.canonicalChannelUrl;\n\n    this.primary_links = data.primaryLinks?.map((link: any) => ({\n      endpoint: new NavigationEndpoint(link.navigationEndpoint),\n      icon: Thumbnail.fromResponse(link.icon),\n      title: new Text(link.title)\n    })) ?? [];\n\n    this.view_count = new Text(data.viewCountText);\n    this.joined_date = new Text(data.joinedDateText);\n    this.description = new Text(data.description);\n    this.email_reveal = new NavigationEndpoint(data.onBusinessEmailRevealClickCommand);\n    this.can_reveal_email = !data.signInForBusinessEmail;\n    this.country = new Text(data.country);\n    this.buttons = Parser.parseArray(data.actionButtons, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelAgeGate extends YTNode {\n  static type = 'ChannelAgeGate';\n\n  channel_title: string;\n  avatar: Thumbnail[];\n  header: Text;\n  main_text: Text;\n  sign_in_button: Button | null;\n  secondary_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_title = data.channelTitle;\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.header = new Text(data.header);\n    this.main_text = new Text(data.mainText);\n    this.sign_in_button = Parser.parseItem(data.signInButton, Button);\n    this.secondary_text = new Text(data.secondaryText);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ChannelFeaturedContent extends YTNode {\n  static type = 'ChannelFeaturedContent';\n\n  title: Text;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelMetadata extends YTNode {\n  static type = 'ChannelMetadata';\n\n  title: string;\n  description: string;\n  url: string;\n  rss_url: string;\n  vanity_channel_url: string;\n  external_id: string;\n  is_family_safe: boolean;\n  keywords: string[];\n  avatar: Thumbnail[];\n  music_artist_name?: string;\n  available_countries: string[];\n  android_deep_link: string;\n  android_appindexing_link: string;\n  ios_appindexing_link: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description;\n    this.url = data.channelUrl;\n    this.rss_url = data.rssUrl;\n    this.vanity_channel_url = data.vanityChannelUrl;\n    this.external_id = data.externalId;\n    this.is_family_safe = data.isFamilySafe;\n    this.keywords = data.keywords;\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    // Can be an empty string sometimes, so we need the extra length check\n    this.music_artist_name = typeof data.musicArtistName === 'string' && data.musicArtistName.length > 0 ? data.musicArtistName : undefined;\n    this.available_countries = data.availableCountryCodes;\n    this.android_deep_link = data.androidDeepLink;\n    this.android_appindexing_link = data.androidAppindexingLink;\n    this.ios_appindexing_link = data.iosAppindexingLink;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelMobileHeader extends YTNode {\n  static type = 'ChannelMobileHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelOptions extends YTNode {\n  static type = 'ChannelOptions';\n\n  avatar: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  name: string;\n  links: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.endpoint = new NavigationEndpoint(data.avatarEndpoint);\n    this.name = data.name;\n    this.links = data.links.map((link: RawNode) => new Text(link));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ChannelOwnerEmptyState extends YTNode {\n  static type = 'ChannelOwnerEmptyState';\n\n  illustration: Thumbnail[];\n  description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.illustration = Thumbnail.fromResponse(data.illustration);\n    this.description = new Text(data.description);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ChannelSubMenu extends YTNode {\n  static type = 'ChannelSubMenu';\n\n  content_type_sub_menu_items: {\n    endpoint: NavigationEndpoint;\n    selected: boolean;\n    title: string;\n  }[];\n\n  sort_setting;\n\n  constructor(data: RawNode) {\n    super();\n    this.content_type_sub_menu_items = data.contentTypeSubMenuItems.map((item: RawNode) => ({\n      endpoint: new NavigationEndpoint(item.navigationEndpoint || item.endpoint),\n      selected: item.selected,\n      title: item.title\n    }));\n    this.sort_setting = Parser.parseItem(data.sortSetting);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport Button from './Button.js';\n\nexport default class ChannelSwitcherHeader extends YTNode {\n  static type = 'ChannelSwitcherHeader';\n\n  title: string;\n  button?: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title).toString();\n\n    if (Reflect.has(data, 'button')) {\n      this.button = Parser.parseItem(data.button, Button);\n    }\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class ChannelThumbnailWithLink extends YTNode {\n  static type = 'ChannelThumbnailWithLink';\n\n  public thumbnails: Thumbnail[];\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChannelVideoPlayer extends YTNode {\n  static type = 'ChannelVideoPlayer';\n\n  id: string;\n  title: Text;\n  description: Text;\n  view_count: Text;\n  published_time: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.view_count = new Text(data.viewCountText);\n    this.published_time = new Text(data.publishedTimeText);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Chapter extends YTNode {\n  static type = 'Chapter';\n\n  title: Text;\n  time_range_start_millis: number;\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.time_range_start_millis = data.timeRangeStartMillis;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ChildVideo extends YTNode {\n  static type = 'ChildVideo';\n\n  id: string;\n  title: Text;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.duration = {\n      text: data.lengthText.simpleText,\n      seconds: timeToSeconds(data.lengthText.simpleText)\n    };\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ChipView extends YTNode {\n  static type = 'ChipView';\n\n  text: string;\n  display_type: string;\n  endpoint: NavigationEndpoint;\n  chip_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = data.text;\n    this.display_type = data.displayType;\n    this.endpoint = new NavigationEndpoint(data.tapCommand);\n    this.chip_entity_key = data.chipEntityKey;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChipView from './ChipView.js';\n\nexport default class ChipBarView extends YTNode {\n  static type = 'ChipBarView';\n\n  chips: ObservedArray<ChipView> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.chips = Parser.parseArray(data.chips, ChipView);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ChipCloudChip extends YTNode {\n  static type = 'ChipCloudChip';\n\n  is_selected: boolean;\n  endpoint?: NavigationEndpoint;\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.is_selected = data.isSelected;\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n    this.text = new Text(data.text).toString();\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChipCloudChip from './ChipCloudChip.js';\n\nexport default class ChipCloud extends YTNode {\n  static type = 'ChipCloud';\n\n  chips: ObservedArray<ChipCloudChip>;\n  next_button: Button | null;\n  previous_button: Button | null;\n  horizontal_scrollable: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.chips = Parser.parseArray(data.chips, ChipCloudChip);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.horizontal_scrollable = data.horizontalScrollable;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ClientSideToggleMenuItem extends YTNode {\n  static type = 'ClientSideToggleMenuItem';\n\n  text: Text;\n  icon_type: string;\n  toggled_text: Text;\n  toggled_icon_type: string;\n  is_toggled?: boolean;\n  menu_item_identifier: string;\n  endpoint: NavigationEndpoint;\n  logging_directives?: {\n    visibility: {\n      types: string;\n    },\n    enable_displaylogger_experiment: boolean;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.icon_type = data.defaultIcon.iconType;\n    this.toggled_text = new Text(data.toggledText);\n    this.toggled_icon_type = data.toggledIcon.iconType;\n    \n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n\n    this.menu_item_identifier = data.menuItemIdentifier;\n    this.endpoint = new NavigationEndpoint(data.command);\n\n    if (Reflect.has(data, 'loggingDirectives')) {\n      this.logging_directives = {\n        visibility: {\n          types: data.loggingDirectives.visibility.types\n        },\n        enable_displaylogger_experiment: data.loggingDirectives.enableDisplayloggerExperiment\n      };\n    }\n  }\n}\n", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CollaboratorInfoCardContent extends YTNode {\n  static type = 'CollaboratorInfoCardContent';\n\n  channel_avatar: Thumbnail[];\n  custom_text: Text;\n  channel_name: Text;\n  subscriber_count: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.channel_avatar = Thumbnail.fromResponse(data.channelAvatar);\n    this.custom_text = new Text(data.customText);\n    this.channel_name = new Text(data.channelName);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class CollageHeroImage extends YTNode {\n  static type = 'CollageHeroImage';\n\n  left: Thumbnail[];\n  top_right: Thumbnail[];\n  bottom_right: Thumbnail[];\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.left = Thumbnail.fromResponse(data.leftThumbnail);\n    this.top_right = Thumbnail.fromResponse(data.topRightThumbnail);\n    this.bottom_right = Thumbnail.fromResponse(data.bottomRightThumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailHoverOverlayView extends YTNode {\n  static type = 'ThumbnailHoverOverlayView';\n\n  icon_name: string;\n  text: Text;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.icon_name = data.icon.sources[0].clientResource.imageName;\n    this.text = Text.fromAttributed(data.text);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailBadgeView extends YTNode {\n  static type = 'ThumbnailBadgeView';\n\n  icon_name?: string;\n  text: string;\n  badge_style: string;\n  background_color?: {\n    light_theme: number;\n    dark_theme: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n\n    this.text = data.text;\n    this.badge_style = data.badgeStyle;\n\n    if (data.backgroundColor) {\n      this.background_color = {\n        light_theme: data.backgroundColor.lightTheme,\n        dark_theme: data.backgroundColor.darkTheme\n      };\n    }\n\n    if (data.iconName) {\n      this.icon_name = data.icon.sources[0].clientResource.imageName;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailBadgeView from './ThumbnailBadgeView.js';\n\nexport default class ThumbnailOverlayBadgeView extends YTNode {\n  static type = 'ThumbnailOverlayBadgeView';\n\n  public badges: ThumbnailBadgeView[];\n  public position: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.badges = Parser.parseArray(data.thumbnailBadges, ThumbnailBadgeView);\n    this.position = data.position;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ToggleButtonView from './ToggleButtonView.js';\n\nexport default class ThumbnailHoverOverlayToggleActionsView extends YTNode {\n  static type = 'ThumbnailHoverOverlayToggleActionsView';\n\n  public buttons: ObservedArray<ToggleButtonView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.buttons = Parser.parseArray(data.buttons, ToggleButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayProgressBarView extends YTNode {\n  static type = 'ThumbnailOverlayProgressBarView';\n\n  public start_percent: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_percent = data.startPercent;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailBadgeView from './ThumbnailBadgeView.js';\nimport ThumbnailOverlayProgressBarView from './ThumbnailOverlayProgressBarView.js';\n\nexport default class ThumbnailBottomOverlayView extends YTNode {\n  static type = 'ThumbnailBottomOverlayView';\n\n  public progress_bar: ThumbnailOverlayProgressBarView | null;\n  public badges: ObservedArray<ThumbnailBadgeView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.progress_bar = Parser.parseItem(data.progressBar, ThumbnailOverlayProgressBarView);\n    this.badges = Parser.parseArray(data.badges, ThumbnailBadgeView);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AnimatedThumbnailOverlayView from './AnimatedThumbnailOverlayView.js';\nimport ThumbnailHoverOverlayView from './ThumbnailHoverOverlayView.js';\nimport ThumbnailOverlayBadgeView from './ThumbnailOverlayBadgeView.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport ThumbnailHoverOverlayToggleActionsView from './ThumbnailHoverOverlayToggleActionsView.js';\nimport ThumbnailBottomOverlayView from './ThumbnailBottomOverlayView.js';\n\nexport type ThumbnailBackgroundColor = {\n  light_theme: number;\n  dark_theme: number;\n};\n\nexport default class ThumbnailView extends YTNode {\n  static type = 'ThumbnailView';\n\n  public image: Thumbnail[];\n  public overlays: ObservedArray<\n    ThumbnailHoverOverlayToggleActionsView | ThumbnailBottomOverlayView |\n    ThumbnailOverlayBadgeView | ThumbnailHoverOverlayView\n    | AnimatedThumbnailOverlayView\n  >;\n  public background_color?: ThumbnailBackgroundColor;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.image = Thumbnail.fromResponse(data.image);\n    this.overlays = Parser.parseArray(data.overlays, [\n      ThumbnailHoverOverlayToggleActionsView, ThumbnailBottomOverlayView,\n      ThumbnailOverlayBadgeView, ThumbnailHoverOverlayView,\n      AnimatedThumbnailOverlayView\n    ]);\n\n    if ('backgroundColor' in data) {\n      this.background_color = {\n        light_theme: data.backgroundColor.lightTheme,\n        dark_theme: data.backgroundColor.darkTheme\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailView from './ThumbnailView.js';\n\nexport default class CollectionThumbnailView extends YTNode {\n  static type = 'CollectionThumbnailView';\n\n  primary_thumbnail: ThumbnailView | null;\n  stack_color?: {\n    light_theme: number;\n    dark_theme: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n\n    this.primary_thumbnail = Parser.parseItem(data.primaryThumbnail, ThumbnailView);\n    if (data.stackColor) {\n      this.stack_color = {\n        light_theme: data.stackColor.lightTheme,\n        dark_theme: data.stackColor.darkTheme\n      };\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\n\nexport default class AddToPlaylistCommand extends YTNode {\n  static type = 'AddToPlaylistCommand';\n\n  public open_miniplayer: boolean;\n  public video_id: string;\n  public list_type: string;\n  public endpoint: NavigationEndpoint;\n  public video_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.open_miniplayer = data.openMiniplayer;\n    this.video_id = data.videoId;\n    this.list_type = data.listType;\n    this.endpoint = new NavigationEndpoint(data.onCreateListCommand);\n    this.video_ids = data.videoIds;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { ContinuationRequest, IEndpoint, RawNode } from '../../index.js';\n\nexport default class ContinuationCommand extends YTNode implements IEndpoint<ContinuationRequest> {\n  static type = 'ContinuationCommand';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    switch (this.#data.request) {\n      case 'CONTINUATION_REQUEST_TYPE_WATCH_NEXT':\n        return 'next';\n      case 'CONTINUATION_REQUEST_TYPE_BROWSE':\n        return 'browse';\n      case 'CONTINUATION_REQUEST_TYPE_SEARCH':\n        return 'search';\n      case 'CONTINUATION_REQUEST_TYPE_ACCOUNTS_LIST':\n        return 'account/accounts_list';\n      case 'CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU':\n        return 'notification/get_notification_menu';\n      case 'CONTINUATION_REQUEST_TYPE_COMMENT_REPLIES':\n        return 'comment/get_comment_replies';\n      case 'CONTINUATION_REQUEST_TYPE_REEL_WATCH_SEQUENCE':\n        return 'reel/reel_watch_sequence';\n      case 'CONTINUATION_REQUEST_TYPE_GET_PANEL':\n        return 'get_panel';\n      default:\n        return '';\n    }\n  }\n\n  public buildRequest(): ContinuationRequest {\n    const request: ContinuationRequest = {};\n\n    if (this.#data.formData)\n      request.formData = this.#data.formData;\n\n    if (this.#data.token)\n      request.continuation = this.#data.token;\n\n    if (this.#data.request === 'CONTINUATION_REQUEST_TYPE_COMMENTS_NOTIFICATION_MENU') {\n      request.notificationsMenuRequestType = 'NOTIFICATIONS_MENU_REQUEST_TYPE_COMMENTS';\n      if (this.#data.token) {\n        request.fetchCommentsParams = {\n          continuation: this.#data.token\n        };\n        delete request.continuation;\n      }\n    }\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { GetKidsBlocklistPickerRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'kids/get_kids_blocklist_picker';\n\nexport default class GetKidsBlocklistPickerCommand extends YTNode implements IEndpoint<GetKidsBlocklistPickerRequest> {\n  static type = 'GetKidsBlocklistPickerCommand';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): GetKidsBlocklistPickerRequest {\n    const request: GetKidsBlocklistPickerRequest = {};\n\n    if (this.#data.blockedForKidsContent)\n      request.blockedForKidsContent = this.#data.blockedForKidsContent;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../types/index.js';\n\nexport type AttIds = {\n  encrypted_video_id?: string;\n  external_channel_id?: string;\n  comment_id?: string;\n  external_owner_id?: string;\n  artist_id?: string;\n  playlist_id?: string;\n  external_post_id?: string;\n  share_id?: string;\n}\n\nexport default class RunAttestationCommand extends YTNode {\n  static type = 'RunAttestationCommand';\n  \n  public engagement_type: string;\n  public ids?: AttIds[];\n\n  constructor(data: RawNode) {\n    super();\n    this.engagement_type = data.engagementType;\n    if (Reflect.has(data, 'ids')) {\n      this.ids = data.ids.map((id: RawNode) => ({\n        encrypted_video_id: id.encryptedVideoId,\n        external_channel_id: id.externalChannelId,\n        comment_id: id.commentId,\n        external_owner_id: id.externalOwnerId,\n        artist_id: id.artistId,\n        playlist_id: id.playlistId,\n        external_post_id: id.externalPostId,\n        share_id: id.shareId\n      }));\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class ShowDialogCommand extends YTNode {\n  static type = 'ShowDialogCommand';\n\n  public inline_content: YTNode | null;\n  public remove_default_padding: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.inline_content = Parser.parseItem(data.panelLoadingStrategy?.inlineContent);\n    this.remove_default_padding = !!data.removeDefaultPadding;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\n\ntype Identifier = {\n  surface: string,\n  tag: string;\n}\n\nexport default class UpdateEngagementPanelContentCommand extends YTNode {\n  static type = 'UpdateEngagementPanelContentCommand';\n\n  public content_source_panel_identifier?: Identifier;\n  public target_panel_identifier?: Identifier;\n  \n  constructor(data: RawNode) {\n    super();\n    this.content_source_panel_identifier = data.contentSourcePanelIdentifier;\n    this.target_panel_identifier = data.targetPanelIdentifier;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AuthorCommentBadge extends YTNode {\n  static type = 'AuthorCommentBadge';\n\n  #data;\n\n  icon_type?: string;\n  tooltip: string;\n  style?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.tooltip = data.iconTooltip;\n\n    // *** For consistency\n    if (this.tooltip === 'Verified') {\n      this.style = 'BADGE_STYLE_TYPE_VERIFIED';\n      data.style = 'BADGE_STYLE_TYPE_VERIFIED';\n    }\n\n    this.#data = data;\n  }\n\n  get orig_badge() {\n    return this.#data;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Text from '../misc/Text.js';\n\nexport default class EmojiPicker extends YTNode {\n  static type = 'EmojiPicker';\n\n  id: string;\n  categories: ObservedArray<YTNode>;\n  category_buttons: ObservedArray<YTNode>;\n  search_placeholder: Text;\n  search_no_results: Text;\n  pick_skin_tone: Text;\n  clear_search_label: string;\n  skin_tone_generic_label: string;\n  skin_tone_light_label: string;\n  skin_tone_medium_light_label: string;\n  skin_tone_medium_label: string;\n  skin_tone_medium_dark_label: string;\n  skin_tone_dark_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.categories = Parser.parseArray(data.categories);\n    this.category_buttons = Parser.parseArray(data.categoryButtons);\n    this.search_placeholder = new Text(data.searchPlaceholderText);\n    this.search_no_results = new Text(data.searchNoResultsText);\n    this.pick_skin_tone = new Text(data.pickSkinToneText);\n    this.clear_search_label = data.clearSearchLabel;\n    this.skin_tone_generic_label = data.skinToneGenericLabel;\n    this.skin_tone_light_label = data.skinToneLightLabel;\n    this.skin_tone_medium_light_label = data.skinToneMediumLightLabel;\n    this.skin_tone_medium_label = data.skinToneMediumLabel;\n    this.skin_tone_medium_dark_label = data.skinToneMediumDarkLabel;\n    this.skin_tone_dark_label = data.skinToneDarkLabel;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport EmojiPicker from './EmojiPicker.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentDialog extends YTNode {\n  static type = 'CommentDialog';\n\n  editable_text: Text;\n  author_thumbnail: Thumbnail[];\n  submit_button: Button | null;\n  cancel_button: Button | null;\n  placeholder: Text;\n  emoji_button: Button | null;\n  emoji_picker: EmojiPicker | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.editable_text = new Text(data.editableText);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.submit_button = Parser.parseItem(data.submitButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.placeholder = new Text(data.placeholderText);\n    this.emoji_button = Parser.parseItem(data.emojiButton, Button);\n    this.emoji_picker = Parser.parseItem(data.emojiPicker, EmojiPicker);\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode, type ObservedArray } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentReplies extends YTNode {\n  static type = 'CommentReplies';\n\n  contents: ObservedArray<YTNode>;\n  view_replies: Button | null;\n  hide_replies: Button | null;\n  view_replies_creator_thumbnail: Thumbnail[];\n  has_channel_owner_replied: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.view_replies = Parser.parseItem(data.viewReplies, Button);\n    this.hide_replies = Parser.parseItem(data.hideReplies, Button);\n    this.view_replies_creator_thumbnail = Thumbnail.fromResponse(data.viewRepliesCreatorThumbnail);\n    this.has_channel_owner_replied = !!data.viewRepliesCreatorThumbnail;\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentReplyDialog extends YTNode {\n  static type = 'CommentReplyDialog';\n\n  reply_button: Button | null;\n  cancel_button: Button | null;\n  author_thumbnail: Thumbnail[];\n  placeholder: Text;\n  error_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.reply_button = Parser.parseItem(data.replyButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.placeholder = new Text(data.placeholderText);\n    this.error_message = new Text(data.errorMessage);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentsSimplebox extends YTNode {\n  static type = 'CommentsSimplebox';\n\n  simplebox_avatar: Thumbnail[];\n  simplebox_placeholder: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.simplebox_avatar = Thumbnail.fromResponse(data.simpleboxAvatar);\n    this.simplebox_placeholder = new Text(data.simpleboxPlaceholder);\n  }\n}", "import Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentsEntryPointTeaser extends YTNode {\n  static type = 'CommentsEntryPointTeaser';\n\n  teaser_avatar?: Thumbnail[];\n  teaser_content?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'teaserAvatar')) {\n      this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar);\n    }\n\n    if (Reflect.has(data, 'teaserContent')) {\n      this.teaser_content = new Text(data.teaserContent);\n    }\n  }\n}", "import Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport CommentsSimplebox from './CommentsSimplebox.js';\nimport CommentsEntryPointTeaser from './CommentsEntryPointTeaser.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\n\nexport default class CommentsEntryPointHeader extends YTNode {\n  static type = 'CommentsEntryPointHeader';\n\n  header?: Text;\n  comment_count?: Text;\n  teaser_avatar?: Thumbnail[];\n  teaser_content?: Text;\n  content_renderer?: CommentsEntryPointTeaser | CommentsSimplebox | null;\n  simplebox_placeholder?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'headerText')) {\n      this.header = new Text(data.headerText);\n    }\n\n    if (Reflect.has(data, 'commentCount')) {\n      this.comment_count = new Text(data.commentCount);\n    }\n\n    if (Reflect.has(data, 'teaserAvatar') || Reflect.has(data, 'simpleboxAvatar')) {\n      this.teaser_avatar = Thumbnail.fromResponse(data.teaserAvatar || data.simpleboxAvatar);\n    }\n\n    if (Reflect.has(data, 'teaserContent')) {\n      this.teaser_content = new Text(data.teaserContent);\n    }\n\n    if (Reflect.has(data, 'contentRenderer')) {\n      this.content_renderer = Parser.parseItem(data.contentRenderer, [ CommentsEntryPointTeaser, CommentsSimplebox ]);\n    }\n\n    if (Reflect.has(data, 'simpleboxPlaceholder')) {\n      this.simplebox_placeholder = new Text(data.simpleboxPlaceholder);\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport SortFilterSubMenu from '../SortFilterSubMenu.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport type CustomEmoji = {\n  emoji_id: string;\n  shortcuts: string[];\n  search_terms: string[];\n  image: Thumbnail[];\n  is_custom_emoji: boolean;\n}\n\nexport default class CommentsHeader extends YTNode {\n  static type = 'CommentsHeader';\n\n  public title: Text;\n  public count: Text;\n  public comments_count: Text;\n  public create_renderer;\n  public sort_menu: SortFilterSubMenu | null;\n  public custom_emojis?: CustomEmoji[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.titleText);\n    this.count = new Text(data.countText);\n    this.comments_count = new Text(data.commentsCount);\n    this.create_renderer = Parser.parseItem(data.createRenderer);\n    this.sort_menu = Parser.parseItem(data.sortMenu, SortFilterSubMenu);\n\n    if (Reflect.has(data, 'customEmojis')) {\n      this.custom_emojis = data.customEmojis.map((emoji: RawNode) => ({\n        emoji_id: emoji.emojiId,\n        shortcuts: emoji.shortcuts,\n        search_terms: emoji.searchTerms,\n        image: Thumbnail.fromResponse(emoji.image),\n        is_custom_emoji: emoji.isCustomEmoji\n      }));\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\nimport Thumbnail from '../misc/Thumbnail.js';\n\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class CommentSimplebox extends YTNode {\n  static type = 'CommentSimplebox';\n\n  submit_button: Button | null;\n  cancel_button: Button | null;\n  author_thumbnail: Thumbnail[];\n  placeholder: Text;\n  avatar_size: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.submit_button = Parser.parseItem(data.submitButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.author_thumbnail = Thumbnail.fromResponse(data.authorThumbnail);\n    this.placeholder = new Text(data.placeholderText);\n    this.avatar_size = data.avatarSize;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\n\nimport type { RawNode } from '../../index.js';\n\nexport default class VoiceReplyContainerView extends YTNode {\n  static type = 'VoiceReplyContainerView';\n\n  voice_reply_unavailable_text : Text;\n  transcript_text : Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.voice_reply_unavailable_text = Text.fromAttributed(data.voiceReplyUnavailableText);\n    this.transcript_text = Text.fromAttributed(data.transcriptText);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport Author from '../misc/Author.js';\nimport Text from '../misc/Text.js';\nimport CommentReplyDialog from './CommentReplyDialog.js';\nimport VoiceReplyContainerView from './VoiceReplyContainerView.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport * as ProtoUtils from '../../../utils/ProtoUtils.js';\n\nimport type Actions from '../../../core/Actions.js';\nimport type { ApiResponse } from '../../../core/Actions.js';\nimport type { RawNode } from '../../index.js';\n\n// TODO: Move these types to a different file.\nexport type CommentKeys = {\n  comment: string;\n  comment_surface: string;\n  toolbar_state: string;\n  toolbar_surface: string;\n  shared: string;\n}\n\nexport type MemberBadge = {\n  url: string;\n  a11y: string;\n}\n\nexport default class CommentView extends YTNode {\n  static type = 'CommentView';\n\n  #actions?: Actions;\n\n  public like_command?: NavigationEndpoint;\n  public dislike_command?: NavigationEndpoint;\n  public unlike_command?: NavigationEndpoint;\n  public undislike_command?: NavigationEndpoint;\n  public reply_command?: NavigationEndpoint;\n  public prepare_account_command?: NavigationEndpoint;\n\n  public comment_id: string;\n  public is_pinned: boolean;\n  public keys: CommentKeys;\n\n  public content?: Text;\n  public published_time?: string;\n  public author_is_channel_owner?: boolean;\n  public creator_thumbnail_url?: string;\n  public like_button_a11y?: string;\n  public like_count?: string;\n  public like_count_liked?: string;\n  public like_count_a11y?: string;\n  public like_active_tooltip?: string;\n  public like_inactive_tooltip?: string;\n  public dislike_active_tooltip?: string;\n  public dislike_inactive_tooltip?: string;\n  public heart_active_tooltip?: string;\n  public reply_count?: string;\n  public reply_count_a11y?: string;\n  public is_member?: boolean;\n  public member_badge?: MemberBadge;\n  public author?: Author;\n\n  public is_liked?: boolean;\n  public is_disliked?: boolean;\n  public is_hearted?: boolean;\n\n  public voice_reply_container?: VoiceReplyContainerView | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.comment_id = data.commentId;\n    this.is_pinned = !!data.pinnedText;\n\n    this.keys = {\n      comment: data.commentKey,\n      comment_surface: data.commentSurfaceKey,\n      toolbar_state: data.toolbarStateKey,\n      toolbar_surface: data.toolbarSurfaceKey,\n      shared: data.sharedKey\n    };\n  }\n\n  applyMutations(comment?: RawNode, toolbar_state?: RawNode, toolbar_surface?: RawNode, comment_surface?: RawNode) {\n    if (comment) {\n      this.content = Text.fromAttributed(comment.properties.content);\n      this.published_time = comment.properties.publishedTime;\n      this.author_is_channel_owner = !!comment.author.isCreator;\n      this.creator_thumbnail_url = comment.toolbar.creatorThumbnailUrl;\n      \n      this.like_count = comment.toolbar.likeCountNotliked ? comment.toolbar.likeCountNotliked : '0';\n      this.like_count_liked = comment.toolbar.likeCountLiked ? comment.toolbar.likeCountLiked : '0';\n      this.like_count_a11y = comment.toolbar.likeCountA11y;\n      this.like_active_tooltip = comment.toolbar.likeActiveTooltip;\n      this.like_inactive_tooltip = comment.toolbar.likeInactiveTooltip;\n      this.dislike_active_tooltip = comment.toolbar.dislikeActiveTooltip;\n      this.dislike_inactive_tooltip = comment.toolbar.dislikeInactiveTooltip;\n      this.like_button_a11y = comment.toolbar.likeButtonA11y;\n      this.heart_active_tooltip = comment.toolbar.heartActiveTooltip;\n      this.reply_count_a11y = comment.toolbar.replyCountA11y;\n      this.reply_count = comment.toolbar.replyCount ? comment.toolbar.replyCount : '0';\n\n      this.is_member = !!comment.author.sponsorBadgeUrl;\n\n      if (Reflect.has(comment.author, 'sponsorBadgeUrl')) {\n        this.member_badge = {\n          url: comment.author.sponsorBadgeUrl,\n          a11y: comment.author.A11y\n        };\n      }\n\n      this.author = new Author({\n        simpleText: comment.author.displayName,\n        navigationEndpoint: comment.avatar.endpoint\n      }, comment.author, comment.avatar.image, comment.author.channelId);\n    }\n\n    if (toolbar_state) {\n      this.is_hearted = toolbar_state.heartState === 'TOOLBAR_HEART_STATE_HEARTED';\n      this.is_liked = toolbar_state.likeState === 'TOOLBAR_LIKE_STATE_LIKED';\n      this.is_disliked = toolbar_state.likeState === 'TOOLBAR_LIKE_STATE_DISLIKED';\n    }\n\n    if (toolbar_surface) {\n      if ('prepareAccountCommand' in toolbar_surface) {\n        this.prepare_account_command = new NavigationEndpoint(toolbar_surface.prepareAccountCommand);\n      } else {\n        this.like_command = new NavigationEndpoint(toolbar_surface.likeCommand);\n        this.dislike_command = new NavigationEndpoint(toolbar_surface.dislikeCommand);\n        this.unlike_command = new NavigationEndpoint(toolbar_surface.unlikeCommand);\n        this.undislike_command = new NavigationEndpoint(toolbar_surface.undislikeCommand);\n        this.reply_command = new NavigationEndpoint(toolbar_surface.replyCommand);\n      }\n    }\n\n    if (comment_surface) {\n      if ('voiceReplyContainerViewModel' in comment_surface) {\n        this.voice_reply_container = Parser.parseItem(comment_surface.voiceReplyContainerViewModel, VoiceReplyContainerView);\n      }\n    }\n  }\n\n  /**\n   * Likes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the like command is not found.\n   */\n  async like(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.like_command)\n      throw new InnertubeError('Like command not found.');\n\n    if (this.is_liked)\n      throw new InnertubeError('This comment is already liked.', { comment_id: this.comment_id });\n\n    return this.like_command.call(this.#actions);\n  }\n\n  /**\n   * Dislikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the dislike command is not found.\n   */\n  async dislike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.dislike_command)\n      throw new InnertubeError('Dislike command not found.');\n\n    if (this.is_disliked)\n      throw new InnertubeError('This comment is already disliked.', { comment_id: this.comment_id });\n\n    return this.dislike_command.call(this.#actions);\n  }\n\n  /**\n   * Unlikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the unlike command is not found.\n   */\n  async unlike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.unlike_command)\n      throw new InnertubeError('Unlike command not found.');\n\n    if (!this.is_liked)\n      throw new InnertubeError('This comment is not liked.', { comment_id: this.comment_id });\n\n    return this.unlike_command.call(this.#actions);\n  }\n\n  /**\n   * Undislikes the comment.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the undislike command is not found.\n   */\n  async undislike(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.undislike_command)\n      throw new InnertubeError('Undislike command not found.');\n\n    if (!this.is_disliked)\n      throw new InnertubeError('This comment is not disliked.', { comment_id: this.comment_id });\n\n    return this.undislike_command.call(this.#actions);\n  }\n\n  /**\n   * Replies to the comment.\n   * @param comment_text - The text of the reply.\n   * @returns A promise that resolves to the API response.\n   * @throws If the Actions instance is not set for this comment or if the reply command is not found.\n   */\n  async reply(comment_text: string): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.reply_command)\n      throw new InnertubeError('Reply command not found.');\n\n    const dialog = this.reply_command.dialog?.as(CommentReplyDialog);\n\n    if (!dialog)\n      throw new InnertubeError('Reply dialog not found.');\n\n    const reply_button = dialog.reply_button;\n\n    if (!reply_button)\n      throw new InnertubeError('Reply button not found in the dialog.');\n\n    if (!reply_button.endpoint)\n      throw new InnertubeError('Reply button endpoint not found.');\n\n    return reply_button.endpoint.call(this.#actions, { commentText: comment_text });\n  }\n\n  /**\n   * Translates the comment to the specified target language.\n   * @param target_language - The target language to translate the comment to, e.g. 'en', 'ja'.\n   * @returns Resolves to an ApiResponse object with the translated content, if available.\n   * @throws if the Actions instance is not set for this comment or if the comment content is not found.\n   */\n  async translate(target_language: string): Promise<ApiResponse & { content?: string }> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this comment.');\n\n    if (!this.content)\n      throw new InnertubeError('Comment content not found.', { comment_id: this.comment_id });\n\n    // Emojis must be removed otherwise InnerTube throws a 400 status code at us.\n    const text = this.content.toString().replace(/[^\\p{L}\\p{N}\\p{P}\\p{Z}]/gu, '');\n\n    const payload = { text, target_language };\n\n    const action = ProtoUtils.encodeCommentActionParams(22, payload);\n    const response = await this.#actions.execute('comment/perform_comment_action', { action });\n\n    // XXX: Should move this to Parser#parseResponse\n    const mutations = response.data.frameworkUpdates?.entityBatchUpdate?.mutations;\n    const content = mutations?.[0]?.payload?.commentEntityPayload?.translatedContent?.content;\n\n    return { ...response, content };\n  }\n\n  setActions(actions: Actions | undefined) {\n    this.#actions = actions;\n  }\n}", "\nimport { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport ContinuationItem from '../ContinuationItem.js';\nimport CommentView from './CommentView.js';\nimport CommentReplies from './CommentReplies.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport { observe, YTNode } from '../../helpers.js';\n\nimport type { RawNode } from '../../index.js';\nimport type Actions from '../../../core/Actions.js';\nimport type { Memo, ObservedArray } from '../../helpers.js';\n\nexport default class CommentThread extends YTNode {\n  static type = 'CommentThread';\n  \n  public comment: CommentView | null;\n  public replies?: ObservedArray<CommentView>;\n  public comment_replies_data: CommentReplies | null;\n  public is_moderated_elq_comment: boolean;\n  public has_replies: boolean;\n  \n  #actions?: Actions;\n  #continuation?: ContinuationItem;\n\n  constructor(data: RawNode) {\n    super();\n    this.comment = Parser.parseItem(data.commentViewModel, CommentView);\n    this.comment_replies_data = Parser.parseItem(data.replies, CommentReplies);\n    this.is_moderated_elq_comment = data.isModeratedElqComment;\n    this.has_replies = !!this.comment_replies_data;\n  }\n\n  get has_continuation(): boolean {\n    if (!this.replies)\n      throw new InnertubeError('Cannot determine if there is a continuation because this thread\\'s replies have not been loaded.');\n    return !!this.#continuation;\n  }\n\n  /**\n   * Retrieves replies to this comment thread.\n   */\n  async getReplies(): Promise<CommentThread> {\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this thread.');\n\n    if (!this.comment_replies_data)\n      throw new InnertubeError('This comment has no replies.', this);\n\n    const continuation = this.comment_replies_data.contents?.firstOfType(ContinuationItem);\n\n    if (!continuation)\n      throw new InnertubeError('Replies continuation not found.');\n\n    const response = await continuation.endpoint.call(this.#actions, { parse: true });\n\n    if (!response.on_response_received_endpoints_memo)\n      throw new InnertubeError('Unexpected response.', response);\n\n    this.replies = this.#getPatchedReplies(response.on_response_received_endpoints_memo);\n    this.#continuation = response.on_response_received_endpoints_memo.getType(ContinuationItem)[0];\n\n    return this;\n  }\n\n  /**\n   * Retrieves next batch of replies.\n   */\n  async getContinuation(): Promise<CommentThread> {\n    if (!this.replies)\n      throw new InnertubeError('Cannot retrieve continuation because this thread\\'s replies have not been loaded.');\n\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    if (!this.#actions)\n      throw new InnertubeError('Actions instance not set for this thread.');\n\n    const load_more_button = this.#continuation.button?.as(Button);\n\n    if (!load_more_button)\n      throw new InnertubeError('\"Load more\" button not found.');\n\n    const response = await load_more_button.endpoint.call(this.#actions, { parse: true });\n\n    if (!response.on_response_received_endpoints_memo)\n      throw new InnertubeError('Unexpected response.', response);\n\n    this.replies = this.#getPatchedReplies(response.on_response_received_endpoints_memo);\n    this.#continuation = response.on_response_received_endpoints_memo.getType(ContinuationItem)[0];\n\n    return this;\n  }\n\n  setActions(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  #getPatchedReplies(data: Memo): ObservedArray<CommentView> {\n    return observe(data.getType(CommentView).map((comment) => {\n      comment.setActions(this.#actions);\n      return comment;\n    }));\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class PdgCommentChip extends YTNode {\n  static type = 'PdgCommentChip';\n\n  text: Text;\n  color_pallette: {\n    background_color?: string;\n    foreground_title_color?: string;\n  };\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.chipText);\n    this.color_pallette = {\n      background_color: data.chipColorPalette?.backgroundColor,\n      foreground_title_color: data.chipColorPalette?.foregroundTitleColor\n    };\n\n    if (Reflect.has(data, 'chipIcon') && Reflect.has(data.chipIcon, 'iconType')) {\n      this.icon_type = data.chipIcon.iconType;\n    }\n  }\n}", "import Thumbnail from '../misc/Thumbnail.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class SponsorCommentBadge extends YTNode {\n  static type = 'SponsorCommentBadge';\n\n  custom_badge: Thumbnail[];\n  tooltip: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.custom_badge = Thumbnail.fromResponse(data.customBadge);\n    this.tooltip = data.tooltip;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class CompactChannel extends YTNode {\n  static type = 'CompactChannel';\n\n  title: Text;\n  channel_id: string;\n  thumbnail: Thumbnail[];\n  display_name: Text;\n  video_count: Text;\n  subscriber_count: Text;\n  endpoint: NavigationEndpoint;\n  tv_banner: Thumbnail[];\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.channel_id = data.channelId;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.display_name = new Text(data.displayName);\n    this.video_count = new Text(data.videoCountText);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.tv_banner = Thumbnail.fromResponse(data.tvBanner);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistCustomThumbnail extends YTNode {\n  static type = 'PlaylistCustomThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistVideoThumbnail extends YTNode {\n  static type = 'PlaylistVideoThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport PlaylistCustomThumbnail from './PlaylistCustomThumbnail.js';\nimport PlaylistVideoThumbnail from './PlaylistVideoThumbnail.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Playlist extends YTNode {\n  static type = 'Playlist';\n\n  id: string;\n  title: Text;\n  author: Text | Author;\n  thumbnails: Thumbnail[];\n  thumbnail_renderer?: PlaylistVideoThumbnail | PlaylistCustomThumbnail;\n  video_count: Text;\n  video_count_short: Text;\n  first_videos: ObservedArray<YTNode>;\n  share_url: string | null;\n  menu: YTNode;\n  badges: ObservedArray<YTNode>;\n  endpoint: NavigationEndpoint;\n  thumbnail_overlays;\n  view_playlist?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    this.author = data.shortBylineText?.simpleText ?\n      new Text(data.shortBylineText) :\n      new Author(data.longBylineText, data.ownerBadges, null);\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail || { thumbnails: data.thumbnails.map((th: any) => th.thumbnails).flat(1) });\n    this.video_count = new Text(data.thumbnailText);\n    this.video_count_short = new Text(data.videoCountShortText);\n    this.first_videos = Parser.parseArray(data.videos);\n    this.share_url = data.shareUrl || null;\n    this.menu = Parser.parseItem(data.menu);\n    this.badges = Parser.parseArray(data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n\n    if (Reflect.has(data, 'thumbnailRenderer')) {\n      this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer, [ PlaylistVideoThumbnail, PlaylistCustomThumbnail ]) || undefined;\n    }\n\n    if (Reflect.has(data, 'viewPlaylistText')) {\n      this.view_playlist = new Text(data.viewPlaylistText);\n    }\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nexport default class CompactMix extends Playlist {\n  static type = 'CompactMix';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Author from './misc/Author.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Menu from './menus/Menu.js';\nimport { timeToSeconds } from '../../utils/Utils.js';\n\nexport default class CompactMovie extends YTNode {\n  static type = 'CompactMovie';\n\n  id: string;\n  title: Text;\n  top_metadata_items: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  use_vertical_poster: boolean;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    const overlay_time_status = data.thumbnailOverlays\n      .find((overlay: RawNode) => overlay.thumbnailOverlayTimeStatusRenderer)\n      ?.thumbnailOverlayTimeStatusRenderer.text || 'N/A';\n\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n\n    this.top_metadata_items = new Text(data.topMetadataItems);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.shortBylineText);\n\n    const durationText = data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString();\n\n    this.duration = {\n      text: durationText,\n      seconds: timeToSeconds(durationText)\n    };\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges);\n    this.use_vertical_poster = data.useVerticalPoster;\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nclass CompactPlaylist extends Playlist {\n  static type = 'CompactPlaylist';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}\n\nexport default CompactPlaylist;", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class CompactStation extends YTNode {\n  static type = 'CompactStation';\n\n  title: Text;\n  description: Text;\n  video_count: Text;\n  endpoint: NavigationEndpoint;\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.video_count = new Text(data.videoCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../types/index.js';\n\nexport default class CompositeVideoPrimaryInfo extends YTNode {\n  static type = 'CompositeVideoPrimaryInfo';\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  constructor(data: RawNode) {\n    super();\n  }\n}\n", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class ConfirmDialog extends YTNode {\n  static type = 'ConfirmDialog';\n\n  title: Text;\n  confirm_button: Button | null;\n  cancel_button: Button | null;\n  dialog_messages: Text[];\n\n  constructor (data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.confirm_button = Parser.parseItem(data.confirmButton, Button);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.dialog_messages = data.dialogMessages.map((txt: RawNode) => new Text(txt));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport { Parser } from '../index.js';\nimport AvatarStackView from './AvatarStackView.js';\n\nexport type MetadataRow = {\n  metadata_parts?: {\n    text: Text | null;\n    avatar_stack: AvatarStackView | null;\n    enable_truncation?: boolean;\n  }[];\n};\n\nexport default class ContentMetadataView extends YTNode {\n  static type = 'ContentMetadataView';\n\n  public metadata_rows: MetadataRow[];\n  public delimiter: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.metadata_rows = data.metadataRows.map((row: RawNode) => ({\n      metadata_parts: row.metadataParts?.map((part: RawNode) => ({\n        text: part.text ? Text.fromAttributed(part.text) : null,\n        avatar_stack: Parser.parseItem(part.avatarStack, AvatarStackView),\n        enable_truncation: data.enableTruncation\n      }))\n    }));\n    this.delimiter = data.delimiter;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Message extends YTNode {\n  static type = 'Message';\n\n  text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Message from './Message.js';\n\nexport default class ConversationBar extends YTNode {\n  static type = 'ConversationBar';\n\n  availability_message: Message | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.availability_message = Parser.parseItem(data.availabilityMessage, Message);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\n\nexport default class CopyLink extends YTNode {\n  static type = 'CopyLink';\n\n  public copy_button: Button | null;\n  public short_url: string;\n  public style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.copy_button = Parser.parseItem(data.copyButton, Button);\n    this.short_url = data.shortUrl;\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport type Option = {\n  title: Text;\n  subtitle: Text;\n  leading_image: Thumbnail;\n  value: {\n    privacy_status_value?: string;\n  };\n  on_tap: NavigationEndpoint;\n  is_selected: boolean;\n};\n\nexport default class DropdownView extends YTNode {\n  static type = 'DropdownView';\n\n  public label: Text;\n  public placeholder_text: Text;\n  public disabled: boolean;\n  public options?: Option[];\n  public dropdown_type: string;\n  public id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.placeholder_text = new Text(data.placeholderText);\n    this.disabled = !!data.disabled;\n    this.dropdown_type = data.type;\n    this.id = data.id;\n\n    if (Reflect.has(data, 'options')) {\n      this.options = data.options.map((option: RawNode) => ({\n        title: new Text(option.title),\n        subtitle: new Text(option.subtitle),\n        leading_image: Thumbnail.fromResponse(option.leadingImage),\n        value: { privacy_status_value: option.value?.privacyStatusValue },\n        on_tap: new NavigationEndpoint(option.onTap),\n        is_selected: !!option.isSelected\n      }));\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport type DisplayProperties = {\n  isMultiline: boolean;\n  disableNewLines: boolean;\n};\n\nexport type ContentProperties = {\n  labelText: string;\n  placeholderText: string;\n  maxCharacterCount: number;\n};\n\nexport type InitialState = {\n  isFocused: boolean;\n};\n\nexport type FormFieldMetadata = {\n  formId: string;\n  fieldId: string;\n};\n\nexport default class TextFieldView extends YTNode {\n  static type = 'TextFieldView';\n\n  public display_properties?: DisplayProperties;\n  public content_properties?: ContentProperties;\n  public initial_state?: InitialState;\n  public form_field_metadata?: FormFieldMetadata;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'displayProperties')) {\n      this.display_properties = {\n        isMultiline: !!data.displayProperties.isMultiline,\n        disableNewLines: !!data.displayProperties.disableNewLines\n      };\n    }\n\n    if (Reflect.has(data, 'contentProperties')) {\n      this.content_properties = {\n        labelText: data.contentProperties.labelText,\n        placeholderText: data.contentProperties.placeholderText,\n        maxCharacterCount: data.contentProperties.maxCharacterCount\n      };\n    }\n\n    if (Reflect.has(data, 'initialState')) {\n      this.initial_state = {\n        isFocused: !!data.initialState.isFocused\n      };\n    }\n\n    if (Reflect.has(data, 'formFieldMetadata')) {\n      this.form_field_metadata = {\n        formId: data.formFieldMetadata.formId,\n        fieldId: data.formFieldMetadata.fieldId\n      };\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DropdownView from './DropdownView.js';\nimport TextFieldView from './TextFieldView.js';\n\nexport default class CreatePlaylistDialogFormView extends YTNode {\n  static type = 'CreatePlaylistDialogFormView';\n\n  public playlist_title: TextFieldView | null;\n  public playlist_visibility: DropdownView | null;\n  public disable_playlist_collaborate: boolean;\n  public create_playlist_params_collaboration_enabled: string;\n  public create_playlist_params_collaboration_disabled: string;\n  public video_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_title = Parser.parseItem(data.playlistTitle, TextFieldView);\n    this.playlist_visibility = Parser.parseItem(data.playlistVisibility, DropdownView);\n    this.disable_playlist_collaborate = !!data.disablePlaylistCollaborate;\n    this.create_playlist_params_collaboration_enabled = data.createPlaylistParamsCollaborationEnabled;\n    this.create_playlist_params_collaboration_disabled = data.createPlaylistParamsCollaborationDisabled;\n    this.video_ids = data.videoIds;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AvatarView from './AvatarView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class DecoratedAvatarView extends YTNode {\n  static type = 'DecoratedAvatarView';\n\n  public avatar: AvatarView | null;\n  public a11y_label: string;\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.avatar = Parser.parseItem(data.avatar, AvatarView);\n    this.a11y_label = data.a11yLabel;\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class HeatMarker extends YTNode {\n  static type = 'HeatMarker';\n\n  time_range_start_millis: number;\n  marker_duration_millis: number;\n  heat_marker_intensity_score_normalized: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.time_range_start_millis = Number.parseInt(data.startMillis, 10);\n    this.marker_duration_millis = Number.parseInt(data.durationMillis, 10);\n    this.heat_marker_intensity_score_normalized = data.intensityScoreNormalized;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class TimedMarkerDecoration extends YTNode {\n  static type = 'TimedMarkerDecoration';\n\n  visible_time_range_start_millis: number;\n  visible_time_range_end_millis: number;\n  decoration_time_millis: number;\n  label: Text;\n  icon: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.visible_time_range_start_millis = data.visibleTimeRangeStartMillis;\n    this.visible_time_range_end_millis = data.visibleTimeRangeEndMillis;\n    this.decoration_time_millis = data.decorationTimeMillis;\n    this.label = new Text(data.label);\n    this.icon = data.icon;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport HeatMarker from './HeatMarker.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport TimedMarkerDecoration from './TimedMarkerDecoration.js';\n\nexport default class Heatmap extends YTNode {\n  static type = 'Heatmap';\n\n  max_height_dp: number;\n  min_height_dp: number;\n  show_hide_animation_duration_millis: number;\n  heat_markers: ObservedArray<HeatMarker>;\n  heat_markers_decorations: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.max_height_dp = data.maxHeightDp;\n    this.min_height_dp = data.minHeightDp;\n    this.show_hide_animation_duration_millis = data.showHideAnimationDurationMillis;\n    this.heat_markers = Parser.parseArray(data.heatMarkers, HeatMarker);\n    this.heat_markers_decorations = Parser.parseArray(data.heatMarkersDecorations, TimedMarkerDecoration);\n  }\n}", "import { YTNode, observe, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Chapter from './Chapter.js';\nimport Heatmap from './Heatmap.js';\n\nexport class Marker extends YTNode {\n  static type = 'Marker';\n\n  marker_key: string;\n  value: {\n    heatmap?: Heatmap | null;\n    chapters?: Chapter[];\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.marker_key = data.key;\n\n    this.value = {};\n\n    if (Reflect.has(data, 'value')) {\n      if (Reflect.has(data.value, 'heatmap')) {\n        this.value.heatmap = Parser.parseItem(data.value.heatmap, Heatmap);\n      }\n\n      if (Reflect.has(data.value, 'chapters')) {\n        this.value.chapters = Parser.parseArray(data.value.chapters, Chapter);\n      }\n    }\n  }\n}\n\nexport default class MultiMarkersPlayerBar extends YTNode {\n  static type = 'MultiMarkersPlayerBar';\n\n  markers_map: ObservedArray<Marker>;\n\n  constructor(data: RawNode) {\n    super();\n    this.markers_map = observe(data.markersMap?.map((marker: {\n      key: string;\n      value: {\n        [key: string]: RawNode\n      }\n    }) => new Marker(marker)) || []);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport MultiMarkersPlayerBar from './MultiMarkersPlayerBar.js';\n\nexport default class DecoratedPlayerBar extends YTNode {\n  static type = 'DecoratedPlayerBar';\n\n  player_bar: MultiMarkersPlayerBar | null;\n  player_bar_action_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.player_bar = Parser.parseItem(data.playerBar, MultiMarkersPlayerBar);\n    this.player_bar_action_button = Parser.parseItem(data.playerBarActionButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class DefaultPromoPanel extends YTNode {\n  static type = 'DefaultPromoPanel';\n\n  title: Text;\n  description: Text;\n  endpoint: NavigationEndpoint;\n  large_form_factor_background_thumbnail: YTNode;\n  small_form_factor_background_thumbnail: YTNode;\n  scrim_color_values: number[];\n  min_panel_display_duration_ms: number;\n  min_video_play_duration_ms: number;\n  scrim_duration: number;\n  metadata_order: string;\n  panel_layout: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.large_form_factor_background_thumbnail = Parser.parseItem(data.largeFormFactorBackgroundThumbnail);\n    this.small_form_factor_background_thumbnail = Parser.parseItem(data.smallFormFactorBackgroundThumbnail);\n    this.scrim_color_values = data.scrimColorValues;\n    this.min_panel_display_duration_ms = data.minPanelDisplayDurationMs;\n    this.min_video_play_duration_ms = data.minVideoPlayDurationMs;\n    this.scrim_duration = data.scrimDuration;\n    this.metadata_order = data.metadataOrder;\n    this.panel_layout = data.panelLayout;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport EngagementPanelSectionList from './EngagementPanelSectionList.js';\nimport Text from './misc/Text.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class DescriptionPreviewView extends YTNode {\n  static type = 'DescriptionPreviewView';\n\n  public description?: Text;\n  public max_lines?: number;\n  public truncation_text?: Text;\n  public always_show_truncation_text: boolean;\n  public more_endpoint?: {\n    show_engagement_panel_endpoint: {\n      engagement_panel: EngagementPanelSectionList | null,\n      engagement_panel_popup_type: string;\n      identifier: {\n        surface: string,\n        tag: string\n      }\n    }\n  };\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'description'))\n      this.description = Text.fromAttributed(data.description);\n\n    if (Reflect.has(data, 'maxLines'))\n      this.max_lines = parseInt(data.maxLines);\n\n    if (Reflect.has(data, 'truncationText'))\n      this.truncation_text = Text.fromAttributed(data.truncationText);\n    \n    this.always_show_truncation_text = !!data.alwaysShowTruncationText;\n\n    // @TODO: Do something about this.\n    if (data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint) {\n      const endpoint = data.rendererContext.commandContext?.onTap?.innertubeCommand?.showEngagementPanelEndpoint;\n\n      this.more_endpoint = {\n        show_engagement_panel_endpoint: {\n          engagement_panel: Parser.parseItem(endpoint.engagementPanel, EngagementPanelSectionList),\n          engagement_panel_popup_type: endpoint.engagementPanelPresentationConfigs.engagementPanelPopupPresentationConfig.popupType,\n          identifier: {\n            surface: endpoint.identifier.surface,\n            tag: endpoint.identifier.tag\n          }\n        }\n      };\n    }\n    \n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class DialogHeaderView extends YTNode {\n  static type = 'DialogHeaderView';\n\n  public headline: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.headline = Text.fromAttributed(data.headline);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class PanelFooterView extends YTNode {\n  static type = 'PanelFooterView';\n\n  public primary_button: ButtonView | null;\n  public secondary_button: ButtonView | null;\n  public should_hide_divider: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary_button = Parser.parseItem(data.primaryButton, ButtonView);\n    this.secondary_button = Parser.parseItem(data.secondaryButton, ButtonView);\n    this.should_hide_divider = !!data.shouldHideDivider;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PanelFooterView from './PanelFooterView.js';\n\nexport default class FormFooterView extends YTNode {\n  static type = 'FormFooterView';\n\n  public panel_footer: PanelFooterView | null;\n  public form_id: string;\n  public container_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_footer = Parser.parseItem(data.panelFooter, PanelFooterView);\n    this.form_id = data.formId;\n    this.container_type = data.containerType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DialogHeaderView from './DialogHeaderView.js';\nimport FormFooterView from './FormFooterView.js';\nimport CreatePlaylistDialogFormView from './CreatePlaylistDialogFormView.js';\nimport PanelFooterView from './PanelFooterView.js';\n\nexport default class DialogView extends YTNode {\n  static type = 'DialogView';\n\n  public header: DialogHeaderView | null;\n  public footer: FormFooterView | PanelFooterView | null;\n  public custom_content: CreatePlaylistDialogFormView | null;\n\n  constructor (data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, DialogHeaderView);\n    this.footer = Parser.parseItem(data.footer, [ FormFooterView, PanelFooterView ]);\n    this.custom_content = Parser.parseItem(data.customContent, CreatePlaylistDialogFormView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class DidYouMean extends YTNode {\n  static type = 'DidYouMean';\n\n  text: string;\n  corrected_query: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.didYouMean).toString();\n    this.corrected_query = new Text(data.correctedQuery);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.correctedQueryEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class DismissableDialogContentSection extends YTNode {\n  static type = 'DismissableDialogContentSection';\n\n  public title: Text;\n  public subtitle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n  }\n}\n", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport DismissableDialogContentSection from './DismissableDialogContentSection.js';\n\nexport default class DismissableDialog extends YTNode {\n  static type = 'DismissableDialog';\n\n  public title: string;\n  public sections: ObservedArray<DismissableDialogContentSection>;\n  public metadata: YTNode | null;\n  public display_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.sections = Parser.parseArray(data.sections, DismissableDialogContentSection);\n    this.metadata = Parser.parseItem(data.metadata);\n    this.display_style = data.displayStyle;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class DynamicTextView extends YTNode {\n  static type = 'DynamicTextView';\n\n  text: Text;\n  max_lines: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = Text.fromAttributed(data.text);\n    this.max_lines = parseInt(data.maxLines);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ChildElement extends YTNode {\n  static type = 'ChildElement';\n\n  text?: string;\n  properties;\n  child_elements?: ChildElement[];\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'type') && Reflect.has(data.type, 'textType')) {\n      this.text = data.type.textType.text?.content;\n    }\n\n    this.properties = data.properties;\n\n    if (Reflect.has(data, 'childElements')) {\n      this.child_elements = data.childElements.map((el: RawNode) => new ChildElement(el));\n    }\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport ChildElement from './misc/ChildElement.js';\nimport { type ObservedArray, YTNode, observe } from '../helpers.js';\n\nexport default class Element extends YTNode {\n  static type = 'Element';\n\n  model?: YTNode;\n  child_elements?: ObservedArray<ChildElement>;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'elementRenderer')) {\n      return Parser.parseItem(data, Element) as Element;\n    }\n\n    const type = data.newElement.type.componentType;\n\n    this.model = Parser.parseItem(type?.model);\n\n    if (Reflect.has(data, 'newElement') && Reflect.has(data.newElement, 'childElements')) {\n      this.child_elements = observe(data.newElement.childElements?.map((el: RawNode) => new ChildElement(el)) || []);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class EmergencyOnebox extends YTNode {\n  static type = 'EmergencyOnebox';\n\n  title: Text;\n  first_option: YTNode;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.first_option = Parser.parseItem(data.firstOption);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EmojiPickerCategory extends YTNode {\n  static type = 'EmojiPickerCategory';\n\n  category_id: string;\n  title: Text;\n  emoji_ids: string[];\n  image_loading_lazy: boolean;\n  category_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n    this.title = new Text(data.title);\n    this.emoji_ids = data.emojiIds;\n    this.image_loading_lazy = !!data.imageLoadingLazy;\n    this.category_type = data.categoryType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class EmojiPickerCategoryButton extends YTNode {\n  static type = 'EmojiPickerCategoryButton';\n\n  category_id: string;\n  icon_type?: string;\n  tooltip: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n\n    this.tooltip = data.tooltip;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class EmojiPickerUpsellCategory extends YTNode {\n  static type = 'EmojiPickerUpsellCategory';\n\n  category_id: string;\n  title: Text;\n  upsell: Text;\n  emoji_tooltip: string;\n  endpoint: NavigationEndpoint;\n  emoji_ids: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.category_id = data.categoryId;\n    this.title = new Text(data.title);\n    this.upsell = new Text(data.upsell);\n    this.emoji_tooltip = data.emojiTooltip;\n    this.endpoint = new NavigationEndpoint(data.command);\n    this.emoji_ids = data.emojiIds;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { AddToPlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/get_add_to_playlist';\n\nexport default class AddToPlaylistServiceEndpoint extends YTNode implements IEndpoint<AddToPlaylistServiceRequest> {\n  static type = 'AddToPlaylistServiceEndpoint';\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): AddToPlaylistServiceRequest {\n    const request: AddToPlaylistServiceRequest = {};\n\n    request.videoIds = this.#data.videoIds ? this.#data.videoIds : [ this.#data.videoId ];\n    \n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    request.excludeWatchLater = !!this.#data.excludeWatchLater;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport AddToPlaylistServiceEndpoint from './AddToPlaylistServiceEndpoint.js';\n\nexport default class AddToPlaylistEndpoint extends AddToPlaylistServiceEndpoint {\n  static type = 'AddToPlaylistEndpoint';\n\n  constructor (data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { BrowseRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'browse';\n\nexport default class BrowseEndpoint extends YTNode implements IEndpoint<BrowseRequest> {\n  static type = 'BrowseEndpoint';\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): BrowseRequest {\n    const request: BrowseRequest = {};\n\n    if (this.#data.browseId)\n      request.browseId = this.#data.browseId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.query)\n      request.query = this.#data.query;\n\n    if (this.#data.browseId === 'FEsubscriptions') {\n      request.subscriptionSettingsState = this.#data.subscriptionSettingsState || 'MY_SUBS_SETTINGS_STATE_LAYOUT_FORMAT_LIST';\n    }\n\n    if (this.#data.browseId === 'SPaccount_playback') {\n      request.formData = this.#data.formData || {\n        accountSettingsFormData: {\n          flagCaptionsDefaultOff: false,\n          flagAutoCaptionsDefaultOn: false,\n          flagDisableInlinePreview: false,\n          flagAudioDescriptionDefaultOn: false\n        }\n      };\n    }\n\n    if (this.#data.browseId === 'FEwhat_to_watch') {\n      if (this.#data.browseRequestSupportedMetadata)\n        request.browseRequestSupportedMetadata = this.#data.browseRequestSupportedMetadata;\n      if (this.#data.inlineSettingStatus)\n        request.inlineSettingStatus = this.#data.inlineSettingStatus;\n    }\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { CreateCommentRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'comment/create_comment';\n\nexport default class CreateCommentEndpoint extends YTNode implements IEndpoint<CreateCommentRequest> {\n  static type = 'CreateCommentEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): CreateCommentRequest {\n    const request: CreateCommentRequest = {};\n\n    if (this.#data.createCommentParams)\n      request.createCommentParams = this.#data.createCommentParams;\n\n    if (this.#data.commentText)\n      request.commentText = this.#data.commentText;\n\n    if (this.#data.attachedVideoId)\n      request.videoAttachment = { videoId: this.#data.attachedVideoId };\n    else if (this.#data.pollOptions)\n      request.pollAttachment = { choices: this.#data.pollOptions };\n    else if (this.#data.imageBlobId)\n      request.imageAttachment = { encryptedBlobId: this.#data.imageBlobId };\n    else if (this.#data.sharedPostId)\n      request.sharedPostAttachment = { postId: this.#data.sharedPostId };\n\n    if (this.#data.accessRestrictions && typeof this.#data.accessRestrictions === 'number') {\n      const restriction = this.#data.accessRestrictions === 1 ? 'RESTRICTION_TYPE_EVERYONE' : 'RESTRICTION_TYPE_SPONSORS_ONLY';\n      request.accessRestrictions = { restriction };\n    }\n\n    if (this.#data.botguardResponse)\n      request.botguardResponse = this.#data.botguardResponse;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { CreatePlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/create';\n\nexport default class CreatePlaylistServiceEndpoint extends YTNode implements IEndpoint<CreatePlaylistServiceRequest> {\n  static type = 'CreatePlaylistServiceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): CreatePlaylistServiceRequest {\n    const request: CreatePlaylistServiceRequest = {};\n  \n    if (this.#data.title)\n      request.title = this.#data.title;\n\n    if (this.#data.privacyStatus)\n      request.privacyStatus = this.#data.privacyStatus;\n\n    if (this.#data.description)\n      request.description = this.#data.description;\n\n    if (this.#data.videoIds)\n      request.videoIds = this.#data.videoIds;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.sourcePlaylistId)\n      request.sourcePlaylistId = this.#data.sourcePlaylistId;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { DeletePlaylistServiceRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'playlist/delete';\n\nexport default class DeletePlaylistEndpoint extends YTNode implements IEndpoint<DeletePlaylistServiceRequest> {\n  static type = 'DeletePlaylistEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): DeletePlaylistServiceRequest {\n    const request: DeletePlaylistServiceRequest = {};\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.sourcePlaylistId;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { FeedbackRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'feedback';\n\nexport default class FeedbackEndpoint extends YTNode implements IEndpoint<FeedbackRequest> {\n  static type = 'FeedbackEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): FeedbackRequest {\n    const request: FeedbackRequest = {};\n\n    if (this.#data.feedbackToken)\n      request.feedbackTokens = [ this.#data.feedbackToken ];\n\n    if (this.#data.cpn)\n      request.feedbackContext = { cpn: this.#data.cpn };\n\n    request.isFeedbackTokenUnencrypted = !!this.#data.isFeedbackTokenUnencrypted;\n    request.shouldMerge = !!this.#data.shouldMerge;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { GetAccountsListInnertubeRequest, IEndpoint, RawNode } from '../../index.js';\n\nconst API_PATH = 'account/accounts_list';\n\nexport default class GetAccountsListInnertubeEndpoint extends YTNode implements IEndpoint<GetAccountsListInnertubeRequest> {\n  static type = 'GetAccountsListInnertubeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): GetAccountsListInnertubeRequest {\n    const request: GetAccountsListInnertubeRequest = {};\n\n    if (this.#data.requestType) {\n      request.requestType = this.#data.requestType;\n      if (this.#data.requestType === 'ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER' || this.#data.requestType === 'ACCOUNTS_LIST_REQUEST_TYPE_IDENTITY_PROMPT') {\n        if (this.#data.nextUrl)\n          request.nextNavendpoint = {\n            urlEndpoint: {\n              url: this.#data.nextUrl\n            }\n          };\n      }\n    }\n\n    if (this.#data.channelSwitcherQuery)\n      request.channelSwitcherQuery = this.#data.channelSwitcherQuery;\n\n    if (this.#data.triggerChannelCreation)\n      request.triggerChannelCreation = this.#data.triggerChannelCreation;\n\n    if (this.#data.contentOwnerConfig && this.#data.contentOwnerConfig.externalContentOwnerId)\n      request.contentOwnerConfig = this.#data.contentOwnerConfig;\n\n    if (this.#data.obfuscatedSelectedGaiaId)\n      request.obfuscatedSelectedGaiaId = this.#data.obfuscatedSelectedGaiaId;\n\n    if (this.#data.selectedSerializedDelegationContext)\n      request.selectedSerializedDelegationContext = this.#data.selectedSerializedDelegationContext;\n\n    if (this.#data.callCircumstance)\n      request.callCircumstance = this.#data.callCircumstance;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class HideEngagementPanelEndpoint extends YTNode {\n  static type = 'HideEngagementPanelEndpoint';\n\n  public panel_identifier: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_identifier = data.panelIdentifier;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, LikeRequest, RawNode } from '../../index.js';\n\nconst LIKE_API_PATH = 'like/like';\nconst DISLIKE_API_PATH = 'like/dislike';\nconst REMOVE_LIKE_API_PATH = 'like/removelike';\n\nexport default class LikeEndpoint extends YTNode implements IEndpoint<LikeRequest> {\n  static type = 'LikeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return this.#data.status === 'DISLIKE' ?\n      DISLIKE_API_PATH : this.#data.status === 'INDIFFERENT' ?\n        REMOVE_LIKE_API_PATH : LIKE_API_PATH;\n  }\n\n  public buildRequest(): LikeRequest {\n    const request: LikeRequest = {};\n\n    if (this.#data.target)\n      request.target = this.#data.target;\n\n    const params = this.getParams();\n    if (params)\n      request.params = params;\n\n    return request;\n  }\n\n  public getParams(): string | undefined {\n    switch (this.#data.status) {\n      case 'LIKE':\n        return this.#data.likeParams;\n      case 'DISLIKE':\n        return this.#data.dislikeParams;\n      case 'INDIFFERENT':\n        return this.#data.removeLikeParams;\n      default:\n        return undefined;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, LiveChatItemContextMenuRequest } from '../../index.js';\n\nconst API_PATH = 'live_chat/get_item_context_menu';\n\nexport default class LiveChatItemContextMenuEndpoint extends YTNode implements IEndpoint<LiveChatItemContextMenuRequest> {\n  static type = 'LiveChatItemContextMenuEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): LiveChatItemContextMenuRequest {\n    const request: LiveChatItemContextMenuRequest = {};\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, ModifyChannelNotificationPreferenceRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'notification/modify_channel_preference';\n\nexport default class ModifyChannelNotificationPreferenceEndpoint extends YTNode implements IEndpoint<ModifyChannelNotificationPreferenceRequest> {\n  static type = 'ModifyChannelNotificationPreferenceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ModifyChannelNotificationPreferenceRequest {\n    const request: ModifyChannelNotificationPreferenceRequest = {};\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.secondaryParams)\n      request.secondaryParams = this.#data.secondaryParams;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, PerformCommentActionRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'comment/perform_comment_action';\n\nexport default class PerformCommentActionEndpoint extends YTNode implements IEndpoint<PerformCommentActionRequest> {\n  static type = 'PerformCommentActionEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): PerformCommentActionRequest {\n    const request: PerformCommentActionRequest = {};\n\n    if (this.#data.actions)\n      request.actions = this.#data.actions;\n\n    if (this.#data.action)\n      request.actions = [ this.#data.action ];\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, PlaylistEditRequest, RawNode } from '../../index.js';\n\nconst API_PATH = 'browse/edit_playlist';\n\nexport default class PlaylistEditEndpoint extends YTNode implements IEndpoint<PlaylistEditRequest> {\n  static type = 'PlaylistEditEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): PlaylistEditRequest {\n    const request: PlaylistEditRequest = {};\n\n    if (this.#data.actions)\n      request.actions = this.#data.actions;\n \n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, WatchRequest } from '../../index.js';\n\nconst API_PATH = 'player';\n\nexport default class WatchEndpoint extends YTNode implements IEndpoint<WatchRequest> {\n  static type = 'WatchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): WatchRequest {\n    const request: WatchRequest = {};\n\n    if (this.#data.videoId)\n      request.videoId = this.#data.videoId;\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.index !== undefined || this.#data.playlistIndex !== undefined)\n      request.playlistIndex = this.#data.index || this.#data.playlistIndex;\n\n    if (this.#data.playerParams || this.#data.params)\n      request.params = this.#data.playerParams || this.#data.params;\n\n    if (this.#data.startTimeSeconds)\n      request.startTimeSecs = this.#data.startTimeSeconds;\n\n    if (this.#data.overrideMutedAtStart)\n      request.overrideMutedAtStart = this.#data.overrideMutedAtStart;\n\n    request.racyCheckOk = !!this.#data.racyCheckOk;\n    request.contentCheckOk = !!this.#data.contentCheckOk;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport WatchEndpoint from './WatchEndpoint.js';\n\nexport default class PrefetchWatchCommand extends WatchEndpoint {\n  static type = 'PrefetchWatchCommand';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, ReelWatchRequest } from '../../index.js';\n\nconst API_PATH = 'reel/reel_item_watch';\n\nexport default class ReelWatchEndpoint extends YTNode implements IEndpoint<ReelWatchRequest> {\n  static type = 'ReelWatchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ReelWatchRequest {\n    const request: ReelWatchRequest = {};\n\n    if (this.#data.videoId) {\n      request.playerRequest = {\n        videoId: this.#data.videoId\n      };\n    }\n    \n    if (request.playerRequest) {\n      if (this.#data.playerParams)\n        request.playerRequest.params = this.#data.playerParams;\n\n      if (this.#data.racyCheckOk)\n        request.playerRequest.racyCheckOk = !!this.#data.racyCheckOk;\n\n      if (this.#data.contentCheckOk)\n        request.playerRequest.contentCheckOk = !!this.#data.contentCheckOk;\n    }\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.inputType)\n      request.inputType = this.#data.inputType;\n\n    request.disablePlayerResponse = !!this.#data.disablePlayerResponse;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, SearchRequest } from '../../index.js';\n\nconst API_PATH = 'search';\n\nexport default class SearchEndpoint extends YTNode implements IEndpoint<SearchRequest> {\n  static type = 'SearchEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): SearchRequest {\n    const request: SearchRequest = {};\n    \n    if (this.#data.query)\n      request.query = this.#data.query;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.webSearchboxStatsUrl)\n      request.webSearchboxStatsUrl = this.#data.webSearchboxStatsUrl;\n\n    if (this.#data.suggestStats)\n      request.suggestStats = this.#data.suggestStats;\n  \n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, ShareEntityServiceRequest } from '../../index.js';\n\nconst API_PATH = 'share/get_share_panel';\n\nexport default class ShareEntityServiceEndpoint extends YTNode implements IEndpoint<ShareEntityServiceRequest> {\n  static type = 'ShareEntityServiceEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): ShareEntityServiceRequest {\n    const request: ShareEntityServiceRequest = {};\n\n    if (this.#data.serializedShareEntity)\n      request.serializedSharedEntity = this.#data.serializedShareEntity;\n\n    if (this.#data.clientParams)\n      request.clientParams = this.#data.clientParams;\n\n    return request;\n  }\n}", "import type { RawNode } from '../../index.js';\nimport ShareEntityServiceEndpoint from './ShareEntityServiceEndpoint.js';\n\nexport default class ShareEndpoint extends ShareEntityServiceEndpoint {\n  static type = 'ShareEndpoint';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport ShareEntityServiceEndpoint from './ShareEntityServiceEndpoint.js';\n\nexport default class ShareEntityEndpoint extends ShareEntityServiceEndpoint {\n  static type = 'ShareEntityEndpoint';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowEngagementPanelEndpoint extends YTNode {\n  static type = 'ShowEngagementPanelEndpoint';\n\n  public panel_identifier: string;\n  public source_panel_identifier?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_identifier = data.panelIdentifier;\n    this.source_panel_identifier = data.sourcePanelIdentifier;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class SignalServiceEndpoint extends YTNode {\n  static type = 'SignalServiceEndpoint';\n\n  public actions?: ObservedArray<YTNode>;\n  public signal?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Array.isArray(data.actions)) {\n      this.actions = Parser.parseArray(data.actions.map((action: RawNode) => {\n        delete action.clickTrackingParams;\n        return action;\n      }));\n    }\n    this.signal = data.signal;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, SubscribeRequest } from '../../index.js';\n\nconst API_PATH = 'subscription/subscribe';\n\nexport default class SubscribeEndpoint extends YTNode implements IEndpoint<SubscribeRequest> {\n  static type = 'SubscribeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): SubscribeRequest {\n    const request: SubscribeRequest = {};\n\n    if (this.#data.channelIds)\n      request.channelIds = this.#data.channelIds;\n\n    if (this.#data.siloName)\n      request.siloName = this.#data.siloName;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    if (this.#data.botguardResponse)\n      request.botguardResponse = this.#data.botguardResponse;\n\n    if (this.#data.feature)\n      request.clientFeature = this.#data.feature;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, UnsubscribeRequest } from '../../index.js';\n\nconst API_PATH = 'subscription/unsubscribe';\n\nexport default class UnsubscribeEndpoint extends YTNode implements IEndpoint<UnsubscribeRequest> {\n  static type = 'UnsubscribeEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string{\n    return API_PATH;\n  }\n\n  public buildRequest(): UnsubscribeRequest {\n    const request: UnsubscribeRequest = {};\n\n    if (this.#data.channelIds)\n      request.channelIds = this.#data.channelIds;\n\n    if (this.#data.siloName)\n      request.siloName = this.#data.siloName;\n\n    if (this.#data.params)\n      request.params = this.#data.params;\n\n    return request;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { IEndpoint, RawNode, WatchNextRequest } from '../../index.js';\n\nconst API_PATH = 'next';\n\nexport default class WatchNextEndpoint extends YTNode implements IEndpoint<WatchNextRequest> {\n  static type = 'WatchNextEndpoint';\n\n  #data: RawNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.#data = data;\n  }\n\n  public getApiPath(): string {\n    return API_PATH;\n  }\n\n  public buildRequest(): WatchNextRequest {\n    const request: WatchNextRequest = {};\n\n    if (this.#data.videoId)\n      request.videoId = this.#data.videoId;\n\n    if (this.#data.playlistId)\n      request.playlistId = this.#data.playlistId;\n\n    if (this.#data.index !== undefined || this.#data.playlistIndex !== undefined)\n      request.playlistIndex = this.#data.index || this.#data.playlistIndex;\n\n    if (this.#data.playerParams || this.#data.params)\n      request.params = this.#data.playerParams || this.#data.params;\n\n    request.racyCheckOk = !!this.#data.racyCheckOk;\n    request.contentCheckOk = !!this.#data.contentCheckOk;\n\n    return request;\n  }\n}", "import { Parser } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class Endscreen extends YTNode {\n  static type = 'Endscreen';\n\n  elements: ObservedArray<YTNode>;\n  start_ms: string;\n\n  constructor(data: any) {\n    super();\n    this.elements = Parser.parseArray(data.elements);\n    this.start_ms = data.startMs;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class EndscreenElement extends YTNode {\n  static type = 'EndscreenElement';\n\n  style: string;\n  title: Text;\n  endpoint: NavigationEndpoint;\n  image?: Thumbnail[];\n  icon?: Thumbnail[];\n  metadata?: Text;\n  call_to_action?: Text;\n  hovercard_button?: YTNode;\n  is_subscribe?: boolean;\n  playlist_length?: Text;\n  thumbnail_overlays?: ObservedArray<YTNode>;\n  left: number;\n  top: number;\n  width: number;\n  aspect_ratio: number;\n  start_ms: number;\n  end_ms: number;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.style = data.style;\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n\n    if (Reflect.has(data, 'image')) {\n      this.image = Thumbnail.fromResponse(data.image);\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon = Thumbnail.fromResponse(data.icon);\n    }\n\n    if (Reflect.has(data, 'metadata')) {\n      this.metadata = new Text(data.metadata);\n    }\n\n    if (Reflect.has(data, 'callToAction')) {\n      this.call_to_action = new Text(data.callToAction);\n    }\n\n    if (Reflect.has(data, 'hovercardButton')) {\n      this.hovercard_button = Parser.parseItem(data.hovercardButton);\n    }\n\n    if (Reflect.has(data, 'isSubscribe')) {\n      this.is_subscribe = !!data.isSubscribe;\n    }\n\n    if (Reflect.has(data, 'playlistLength')) {\n      this.playlist_length = new Text(data.playlistLength);\n    }\n\n    if (Reflect.has(data, 'thumbnailOverlays')) {\n      this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    }\n\n    this.left = parseFloat(data.left);\n    this.width = parseFloat(data.width);\n    this.top = parseFloat(data.top);\n    this.aspect_ratio = parseFloat(data.aspectRatio);\n    this.start_ms = parseFloat(data.startMs);\n    this.end_ms = parseFloat(data.endMs);\n    this.id = data.id;\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class EndScreenPlaylist extends YTNode {\n  static type = 'EndScreenPlaylist';\n\n  id: string;\n  title: Text;\n  author: Text;\n  endpoint: NavigationEndpoint;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n    this.author = new Text(data.longBylineText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.videoCountText);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class EndScreenVideo extends YTNode {\n  static type = 'EndScreenVideo';\n\n  id: string;\n  title: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n  endpoint: NavigationEndpoint;\n  short_view_count: Text;\n  badges: ObservedArray<YTNode>;\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.shortBylineText, data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.badges = Parser.parseArray(data.badges);\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: data.lengthInSeconds\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ExpandableTab extends YTNode {\n  static type = 'ExpandableTab';\n\n  title: string;\n  endpoint: NavigationEndpoint;\n  selected: boolean;\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.selected = data.selected;\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class ExpandedShelfContents extends YTNode {\n  static type = 'ExpandedShelfContents';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class FancyDismissibleDialog extends YTNode {\n  static type = 'FancyDismissibleDialog';\n\n  dialog_message: Text;\n  confirm_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.dialog_message = new Text(data.dialogMessage);\n    this.confirm_label = new Text(data.confirmLabel);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChipCloudChip from './ChipCloudChip.js';\n\nexport default class FeedFilterChipBar extends YTNode {\n  static type = 'FeedFilterChipBar';\n\n  contents: ObservedArray<ChipCloudChip>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, ChipCloudChip);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nimport type { RawNode } from '../types/index.js';\n\nexport default class FeedNudge extends YTNode {\n  static type = 'FeedNudge';\n\n  title: Text;\n  subtitle: Text;\n  endpoint: NavigationEndpoint;\n  apply_modernized_style: boolean;\n  trim_style: string;\n  background_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.endpoint = new NavigationEndpoint(data.impressionEndpoint);\n    this.apply_modernized_style = data.applyModernizedStyle;\n    this.trim_style = data.trimStyle;\n    this.background_style = data.backgroundStyle;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class FeedTabbedHeader extends YTNode {\n  static type = 'FeedTabbedHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GameDetails extends YTNode {\n  static type = 'GameDetails';\n\n  title: Text;\n  box_art: Thumbnail[];\n  box_art_overlay_text: Text;\n  endpoint: NavigationEndpoint;\n  is_official_box_art: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.box_art = Thumbnail.fromResponse(data.boxArt);\n    this.box_art_overlay_text = new Text(data.boxArtOverlayText);\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.is_official_box_art = !!data.isOfficialBoxArt;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class Grid extends YTNode {\n  static type = 'Grid';\n\n  items: ObservedArray<YTNode>;\n  is_collapsible?: boolean;\n  visible_row_count?: string;\n  target_id?: string;\n  continuation: string | null;\n  header?: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.items = Parser.parseArray(data.items);\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'isCollapsible')) {\n      this.is_collapsible = data.isCollapsible;\n    }\n\n    if (Reflect.has(data, 'visibleRowCount')) {\n      this.visible_row_count = data.visibleRowCount;\n    }\n\n    if (Reflect.has(data, 'targetId')) {\n      this.target_id = data.targetId;\n    }\n\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GridChannel extends YTNode {\n  static type = 'GridChannel';\n\n  id: string;\n  author: Author;\n  subscribers: Text;\n  video_count: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.channelId;\n\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.ownerBadges, data.thumbnail);\n\n    this.subscribers = new Text(data.subscriberCountText);\n    this.video_count = new Text(data.videoCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GridHeader extends YTNode {\n  static type = 'GridHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridMix extends YTNode {\n  static type = 'GridMix';\n\n  id: string;\n  title: Text;\n  author: Text | null;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n  video_count_short: Text;\n  endpoint: NavigationEndpoint;\n  secondary_endpoint: NavigationEndpoint;\n  thumbnail_overlays: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    this.author = data.shortBylineText?.simpleText ?\n      new Text(data.shortBylineText) : data.longBylineText?.simpleText ?\n        new Text(data.longBylineText) : null;\n\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.videoCountText);\n    this.video_count_short = new Text(data.videoCountShortText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.secondary_endpoint = new NavigationEndpoint(data.secondaryNavigationEndpoint);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridMovie extends YTNode {\n  static type = 'GridMovie';\n\n  id: string;\n  title: Text;\n  thumbnails: Thumbnail[];\n  duration: Text | null;\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<MetadataBadge>;\n  metadata: Text;\n  thumbnail_overlays: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    const length_alt = data.thumbnailOverlays.find((overlay: RawNode) => overlay.hasOwnProperty('thumbnailOverlayTimeStatusRenderer'))?.thumbnailOverlayTimeStatusRenderer;\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.duration = data.lengthText ? new Text(data.lengthText) : length_alt?.text ? new Text(length_alt.text) : null;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.metadata = new Text(data.metadata);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class GridPlaylist extends YTNode {\n  static type = 'GridPlaylist';\n\n  id: string;\n  title: Text;\n  author?: Author;\n  badges: ObservedArray<YTNode>;\n  endpoint: NavigationEndpoint;\n  view_playlist: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_renderer;\n  sidebar_thumbnails: Thumbnail[] | null;\n  video_count: Text;\n  video_count_short: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'shortBylineText')) {\n      this.author = new Author(data.shortBylineText, data.ownerBadges);\n    }\n\n    this.badges = Parser.parseArray(data.ownerBadges);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.view_playlist = new Text(data.viewPlaylistText);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer);\n    this.sidebar_thumbnails = [].concat(...data.sidebarThumbnails?.map((thumbnail: any) => Thumbnail.fromResponse(thumbnail)) || []) || null;\n    this.video_count = new Text(data.thumbnailText);\n    this.video_count_short = new Text(data.videoCountShortText);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class GridShelfView extends YTNode {\n  static type = 'GridShelfView';\n\n  public contents: ObservedArray<YTNode>;\n  public header: YTNode | null;\n  public content_aspect_ratio: string;\n  public enable_vertical_expansion: boolean;\n  public show_more_button: ButtonView | null;\n  public show_less_button: ButtonView | null;\n  public min_collapsed_item_count: number;\n  \n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.header = Parser.parseItem(data.header);\n    this.content_aspect_ratio = data.contentAspectRatio;\n    this.enable_vertical_expansion = data.enableVerticalExpansion;\n    this.show_more_button = Parser.parseItem(data.showMoreButton, ButtonView);\n    this.show_less_button = Parser.parseItem(data.showLessButton, ButtonView);\n    this.min_collapsed_item_count = data.minCollapsedItemCount;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ShowCustomThumbnail extends YTNode {\n  static type = 'ShowCustomThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayBottomPanel extends YTNode {\n  static type = 'ThumbnailOverlayBottomPanel';\n\n  text?: Text;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'text')) {\n      this.text = new Text(data.text);\n    }\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport * as Parser from '../parser.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ShowCustomThumbnail from './ShowCustomThumbnail.js';\nimport ThumbnailOverlayBottomPanel from './ThumbnailOverlayBottomPanel.js';\n\nexport default class GridShow extends YTNode {\n  static type = 'GridShow';\n\n  title: Text;\n  thumbnail_renderer: ShowCustomThumbnail | null;\n  endpoint: NavigationEndpoint;\n  long_byline_text: Text;\n  thumbnail_overlays: ObservedArray<ThumbnailOverlayBottomPanel> | null;\n  author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer, ShowCustomThumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.long_byline_text = new Text(data.longBylineText);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays, ThumbnailOverlayBottomPanel);\n    this.author = new Author(data.shortBylineText, undefined);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class GridVideo extends YTNode {\n  static type = 'GridVideo';\n\n  public video_id: string;\n  public title: Text;\n  public thumbnails: Thumbnail[];\n  public thumbnail_overlays: ObservedArray<YTNode>;\n  public rich_thumbnail: YTNode;\n  public published: Text;\n  public duration: Text | null;\n  public author: Author;\n  public views: Text;\n  public short_view_count: Text;\n  public endpoint: NavigationEndpoint;\n  public menu: Menu | null;\n  public buttons?: ObservedArray<YTNode>;\n  public upcoming?: Date;\n  public upcoming_text?: Text;\n  public is_reminder_set?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    const length_alt = data.thumbnailOverlays.find((overlay: RawNode) => overlay.hasOwnProperty('thumbnailOverlayTimeStatusRenderer'))?.thumbnailOverlayTimeStatusRenderer;\n\n    this.video_id = data.videoId;\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.rich_thumbnail = Parser.parseItem(data.richThumbnail);\n    this.published = new Text(data.publishedTimeText);\n    this.duration = data.lengthText ? new Text(data.lengthText) : length_alt?.text ? new Text(length_alt.text) : null;\n    this.author = data.shortBylineText && new Author(data.shortBylineText, data.ownerBadges);\n    this.views = new Text(data.viewCountText);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.menu = Parser.parseItem(data.menu, Menu);\n\n    if (Reflect.has(data, 'buttons')) {\n      this.buttons = Parser.parseArray(data.buttons);\n    }\n\n    if (Reflect.has(data, 'upcomingEventData')) {\n      this.upcoming = new Date(Number(`${data.upcomingEventData.startTime}000`));\n      this.upcoming_text = new Text(data.upcomingEventData.upcomingEventText);\n      this.is_reminder_set = !!data.upcomingEventData?.isReminderSet;\n    }\n  }\n\n  /**\n   * @deprecated Use {@linkcode video_id} instead.\n   */\n  get id(): string {\n    return this.video_id;\n  }\n\n  get is_upcoming(): boolean {\n    return Boolean(this.upcoming && this.upcoming > new Date());\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideEntry extends YTNode {\n  static type = 'GuideEntry';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n  icon_type?: string;\n  thumbnails?: Thumbnail[];\n  badges?: any;\n  is_primary: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.formattedTitle);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint);\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    }\n\n    // (LuanRT) XXX: Check this property's data and parse it.\n    if (Reflect.has(data, 'badges')) {\n      this.badges = data.badges;\n    }\n\n    this.is_primary = !!data.isPrimary;\n  }\n}", "import * as Parser from '../parser.js';\nimport GuideEntry from './GuideEntry.js';\nimport type { RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class GuideCollapsibleEntry extends YTNode {\n  static type = 'GuideCollapsibleEntry';\n\n  expander_item: GuideEntry | null;\n  collapser_item: GuideEntry | null;\n  expandable_items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.expander_item = Parser.parseItem(data.expanderItem, GuideEntry);\n    this.collapser_item = Parser.parseItem(data.collapserItem, GuideEntry);\n    this.expandable_items = Parser.parseArray(data.expandableItems);\n  }\n}", "import * as Parser from '../parser.js';\nimport type { RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class GuideCollapsibleSectionEntry extends YTNode {\n  static type = 'GuideCollapsibleSectionEntry';\n\n  header_entry: YTNode;\n  expander_icon: string;\n  collapser_icon: string;\n  section_items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_entry = Parser.parseItem(data.headerEntry);\n    this.expander_icon = data.expanderIcon.iconType;\n    this.collapser_icon = data.collapserIcon.iconType;\n    this.section_items = Parser.parseArray(data.sectionItems);\n  }\n}", "import GuideEntry from './GuideEntry.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideDownloadsEntry extends GuideEntry {\n  static type = 'GuideDownloadsEntry';\n\n  always_show: boolean;\n\n  constructor(data: RawNode) {\n    super(data.entryRenderer.guideEntryRenderer);\n    this.always_show = !!data.alwaysShow;\n  }\n}", "import Text from './misc/Text.js';\nimport * as Parser from '../parser.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class GuideSection extends YTNode {\n  static type = 'GuideSection';\n\n  title?: Text;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'formattedTitle')) {\n      this.title = new Text(data.formattedTitle);\n    }\n\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import GuideSection from './GuideSection.js';\n\nexport default class GuideSubscriptionsSection extends GuideSection {\n  static type = 'GuideSubscriptionsSection';\n}", "import { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\nimport type { RawNode } from '../index.js';\n\nexport default class HashtagHeader extends YTNode {\n  static type = 'HashtagHeader';\n\n  hashtag: Text;\n  hashtag_info: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.hashtag = new Text(data.hashtag);\n    this.hashtag_info = new Text(data.hashtagInfoText);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Thumbnail } from '../misc.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class HashtagTile extends YTNode {\n  static type = 'HashtagTile';\n\n  hashtag: Text;\n  hashtag_info_text: Text;\n  hashtag_thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  hashtag_background_color: number;\n  hashtag_video_count: Text;\n  hashtag_channel_count: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.hashtag = new Text(data.hashtag);\n    this.hashtag_info_text = new Text(data.hashtagInfoText);\n    this.hashtag_thumbnail = Thumbnail.fromResponse(data.hashtagThumbnail);\n    this.endpoint = new NavigationEndpoint(data.onTapCommand);\n    this.hashtag_background_color = data.hashtagBackgroundColor;\n    this.hashtag_video_count = new Text(data.hashtagVideoCount);\n    this.hashtag_channel_count = new Text(data.hashtagChannelCount);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class HeroPlaylistThumbnail extends YTNode {\n  static type = 'HeroPlaylistThumbnail';\n\n  thumbnails: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode, observe } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport class Panel extends YTNode {\n  static type = 'Panel';\n\n  thumbnail?: {\n    image: Thumbnail[];\n    endpoint: NavigationEndpoint;\n    on_long_press_endpoint: NavigationEndpoint;\n    content_mode: string;\n    crop_options: string;\n  };\n\n  background_image: {\n    image: Thumbnail[];\n    gradient_image: Thumbnail[];\n  };\n\n  strapline: string;\n  title: string;\n  description: string;\n  text_on_tap_endpoint: NavigationEndpoint;\n\n  cta: {\n    icon_name: string;\n    title: string;\n    endpoint: NavigationEndpoint;\n    accessibility_text: string;\n    state: string;\n  };\n\n  constructor(data: RawNode) {\n    super();\n\n    if (data.thumbnail) {\n      this.thumbnail = {\n        image: Thumbnail.fromResponse(data.thumbnail.image),\n        endpoint: new NavigationEndpoint(data.thumbnail.onTap),\n        on_long_press_endpoint: new NavigationEndpoint(data.thumbnail.onLongPress),\n        content_mode: data.thumbnail.contentMode,\n        crop_options: data.thumbnail.cropOptions\n      };\n    }\n\n    this.background_image = {\n      image: Thumbnail.fromResponse(data.backgroundImage.image),\n      gradient_image: Thumbnail.fromResponse(data.backgroundImage.gradientImage)\n    };\n\n    this.strapline = data.strapline;\n    this.title = data.title;\n    this.description = data.description;\n\n    this.cta = {\n      icon_name: data.cta.iconName,\n      title: data.cta.title,\n      endpoint: new NavigationEndpoint(data.cta.onTap),\n      accessibility_text: data.cta.accessibilityText,\n      state: data.cta.state\n    };\n\n    this.text_on_tap_endpoint = new NavigationEndpoint(data.textOnTap);\n  }\n}\n\nexport default class HighlightsCarousel extends YTNode {\n  static type = 'HighlightsCarousel';\n\n  panels: Panel[];\n\n  constructor(data: RawNode) {\n    super();\n    this.panels = observe(data.highlightsCarousel.panels.map((el: RawNode) => new Panel(el)));\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SearchSuggestion extends YTNode {\n  static type = 'SearchSuggestion';\n\n  suggestion: Text;\n  endpoint: NavigationEndpoint;\n  icon_type?: string;\n  service_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.suggestion = new Text(data.suggestion);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'serviceEndpoint')) {\n      this.service_endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    }\n  }\n}", "import type { RawNode } from '../index.js';\nimport SearchSuggestion from './SearchSuggestion.js';\n\nexport default class HistorySuggestion extends SearchSuggestion {\n  static type = 'HistorySuggestion';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Button from './Button.js';\n\nexport default class HorizontalMovieList extends YTNode {\n  static type = 'HorizontalMovieList';\n\n  items: ObservedArray<YTNode>;\n  previous_button: Button | null;\n  next_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.previous_button = Parser.parseItem(data.previousButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class IconLink extends YTNode {\n  static type = 'IconLink';\n\n  icon_type: string;\n  tooltip?: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.icon_type = data.icon?.iconType;\n\n    if (Reflect.has(data, 'tooltip')) {\n      this.tooltip = new Text(data.tooltip).toString();\n    }\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ImageBannerView extends YTNode {\n  static type = 'ImageBannerView';\n\n  image: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class IncludingResultsFor extends YTNode {\n  static type = 'IncludingResultsFor';\n\n  including_results_for: Text;\n  corrected_query: Text;\n  corrected_query_endpoint: NavigationEndpoint;\n  search_only_for?: Text;\n  original_query?: Text;\n  original_query_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.including_results_for = new Text(data.includingResultsFor);\n    this.corrected_query = new Text(data.correctedQuery);\n    this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);\n    this.search_only_for = Reflect.has(data, 'searchOnlyFor') ? new Text(data.searchOnlyFor) : undefined;\n    this.original_query = Reflect.has(data, 'originalQuery') ? new Text(data.originalQuery) : undefined;\n    this.original_query_endpoint = Reflect.has(data, 'originalQueryEndpoint') ? new NavigationEndpoint(data.originalQueryEndpoint) : undefined;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport type { AttributedText } from './misc/Text.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class InfoPanelContent extends YTNode {\n  static type = 'InfoPanelContent';\n\n  title: Text;\n  source: Text;\n  paragraphs?: Text[];\n  attributed_paragraphs?: Text[];\n  thumbnail: Thumbnail[];\n  source_endpoint: NavigationEndpoint;\n  truncate_paragraphs: boolean;\n  background: string;\n  inline_link_icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.source = new Text(data.source);\n\n    if (Reflect.has(data, 'paragraphs'))\n      this.paragraphs = data.paragraphs.map((p: RawNode) => new Text(p));\n\n    if (Reflect.has(data, 'attributedParagraphs'))\n      this.attributed_paragraphs = data.attributedParagraphs.map((p: AttributedText) => Text.fromAttributed(p));\n\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.source_endpoint = new NavigationEndpoint(data.sourceEndpoint);\n    this.truncate_paragraphs = !!data.truncateParagraphs;\n    this.background = data.background;\n\n    if (Reflect.has(data, 'inlineLinkIcon') && Reflect.has(data.inlineLinkIcon, 'iconType')) {\n      this.inline_link_icon_type = data.inlineLinkIcon.iconType;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport InfoPanelContent from './InfoPanelContent.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class InfoPanelContainer extends YTNode {\n  static type = 'InfoPanelContainer';\n\n  title: Text;\n  menu: Menu | null;\n  content: InfoPanelContent | null;\n  header_endpoint?: NavigationEndpoint;\n  background: string;\n  title_style?: string;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.content = Parser.parseItem(data.content, InfoPanelContent);\n\n    if (data.headerEndpoint)\n      this.header_endpoint = new NavigationEndpoint(data.headerEndpoint);\n\n    this.background = data.background;\n    this.title_style = data.titleStyle;\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon?.iconType;\n    }\n  }\n}", "import Button from './Button.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class InteractiveTabbedHeader extends YTNode {\n  static type = 'InteractiveTabbedHeader';\n\n  header_type: string;\n  title: Text;\n  description: Text;\n  metadata: Text;\n  badges: MetadataBadge[];\n  box_art: Thumbnail[];\n  banner: Thumbnail[];\n  buttons: ObservedArray<SubscribeButton | Button>;\n  auto_generated: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_type = data.type;\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.metadata = new Text(data.metadata);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.box_art = Thumbnail.fromResponse(data.boxArt);\n    this.banner = Thumbnail.fromResponse(data.banner);\n    this.buttons = Parser.parseArray(data.buttons, [ SubscribeButton, Button ]);\n    this.auto_generated = new Text(data.autoGenerated);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ItemSectionHeader extends YTNode {\n  static type = 'ItemSectionHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class ItemSectionTab extends YTNode {\n  static type = 'Tab';\n\n  title: Text;\n  selected: boolean;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.selected = !!data.selected;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ItemSectionTab from './ItemSectionTab.js';\nimport Text from './misc/Text.js';\n\nexport default class ItemSectionTabbedHeader extends YTNode {\n  static type = 'ItemSectionTabbedHeader';\n\n  title: Text;\n  tabs: ObservedArray<ItemSectionTab>;\n  end_items?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.tabs = Parser.parseArray(data.tabs, ItemSectionTab);\n    if (Reflect.has(data, 'endItems')) {\n      this.end_items = Parser.parseArray(data.endItems);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, YTNodes, type RawNode } from '../index.js';\n\nexport default class SortFilterHeader extends YTNode {\n  static type = 'SortFilterHeader';\n\n  filter_menu: YTNodes.SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.filter_menu = Parser.parseItem(data.filterMenu, YTNodes.SortFilterSubMenu);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ItemSectionHeader from './ItemSectionHeader.js';\nimport ItemSectionTabbedHeader from './ItemSectionTabbedHeader.js';\nimport CommentsHeader from './comments/CommentsHeader.js';\nimport SortFilterHeader from './SortFilterHeader.js';\nimport FeedFilterChipBar from './FeedFilterChipBar.js';\n\nexport default class ItemSection extends YTNode {\n  static type = 'ItemSection';\n\n  header: CommentsHeader | ItemSectionHeader | ItemSectionTabbedHeader | SortFilterHeader | FeedFilterChipBar | null;\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n  continuation?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, [ CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader, SortFilterHeader, FeedFilterChipBar ]);\n    this.contents = Parser.parseArray(data.contents);\n\n    if (data.targetId || data.sectionIdentifier) {\n      this.target_id = data.targetId || data.sectionIdentifier;\n    }\n\n    if (data.continuations) {\n      this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChat extends YTNode {\n  static type = 'LiveChat';\n\n  header: YTNode;\n  initial_display_state: string;\n  continuation: string;\n\n  client_messages: {\n    reconnect_message: Text;\n    unable_to_reconnect_message: Text;\n    fatal_error: Text;\n    reconnected_message: Text;\n    generic_error: Text;\n  };\n\n  is_replay: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.initial_display_state = data.initialDisplayState;\n    this.continuation = data.continuations[0]?.reloadContinuationData?.continuation;\n\n    this.client_messages = {\n      reconnect_message: new Text(data.clientMessages.reconnectMessage),\n      unable_to_reconnect_message: new Text(data.clientMessages.unableToReconnectMessage),\n      fatal_error: new Text(data.clientMessages.fatalError),\n      reconnected_message: new Text(data.clientMessages.reconnectedMessage),\n      generic_error: new Text(data.clientMessages.genericError)\n    };\n\n    this.is_replay = !!data.isReplay;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatBannerHeader extends YTNode {\n  static type = 'LiveChatBannerHeader';\n\n  text: Text;\n  icon_type?: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport LiveChatBannerHeader from './LiveChatBannerHeader.js';\n\nexport default class LiveChatBanner extends YTNode {\n  static type = 'LiveChatBanner';\n\n  header: LiveChatBannerHeader | null;\n  contents: YTNode;\n  action_id: string;\n  viewer_is_creator?: boolean;\n  target_id: string;\n  is_stackable: boolean;\n  background_type?: string;\n  banner_type: string;\n  banner_properties_is_ephemeral?: boolean;\n  banner_properties_auto_collapse_delay_seconds?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, LiveChatBannerHeader);\n    this.contents = Parser.parseItem(data.contents);\n    this.action_id = data.actionId;\n\n    if (Reflect.has(data, 'viewerIsCreator')) {\n      this.viewer_is_creator = data.viewerIsCreator;\n    }\n\n    this.target_id = data.targetId;\n    this.is_stackable = data.isStackable;\n\n    if (Reflect.has(data, 'backgroundType')) {\n      this.background_type = data.backgroundType;\n    }\n\n    this.banner_type = data.bannerType;\n\n    if (\n      Reflect.has(data, 'bannerProperties') &&\n      Reflect.has(data.bannerProperties, 'isEphemeral')\n    ) {\n      this.banner_properties_is_ephemeral = Boolean(data.bannerProperties.isEphemeral);\n    }\n\n    if (\n      Reflect.has(data, 'bannerProperties') &&\n      Reflect.has(data.bannerProperties, 'autoCollapseDelay') &&\n      Reflect.has(data.bannerProperties.autoCollapseDelay, 'seconds')\n    ) {\n      this.banner_properties_auto_collapse_delay_seconds = data.bannerProperties.autoCollapseDelay.seconds;\n    }\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport LiveChatBanner from './items/LiveChatBanner.js';\n\nexport default class AddBannerToLiveChatCommand extends YTNode {\n  static type = 'AddBannerToLiveChatCommand';\n\n  banner: LiveChatBanner | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.banner = Parser.parseItem(data.bannerRenderer, LiveChatBanner);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AddChatItemAction extends YTNode {\n  static type = 'AddChatItemAction';\n\n  item: YTNode;\n  client_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.item = Parser.parseItem(data.item);\n    if (Reflect.has(data, 'clientId')) {\n      this.client_id = data.clientId;\n    }\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class AddLiveChatTickerItemAction extends YTNode {\n  static type = 'AddLiveChatTickerItemAction';\n\n  item: YTNode;\n  duration_sec: string; // TODO: check this assumption.\n\n  constructor(data: RawNode) {\n    super();\n    this.item = Parser.parseItem(data.item);\n    this.duration_sec = data.durationSec;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class DimChatItemAction extends YTNode {\n  static type = 'DimChatItemAction';\n\n  client_assigned_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.client_assigned_id = data.clientAssignedId;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { type RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\n\nexport default class BumperUserEduContentView extends YTNode {\n  static type = 'BumperUserEduContentView';\n  \n  text: Text;\n  image_name: string;\n  image_color: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = Text.fromAttributed(data.text);\n    this.image_name = data.image.sources[0].clientResource.imageName;\n    this.image_color = data.image.sources[0].clientResource.imageColor;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class CreatorHeartView extends YTNode {\n  static type = 'CreatorHeartView';\n\n  creator_thumbnail: Thumbnail[];\n  hearted_icon_name: string;\n  unhearted_icon_name: string;\n  unhearted_icon_processor: {\n    border_image_processor: {\n      image_tint: {\n        color: number\n      }\n    }\n  };\n  hearted_hover_text: string;\n  hearted_accessibility_label: string;\n  unhearted_accessibility_label: string;\n  engagement_state_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.creator_thumbnail = Thumbnail.fromResponse(data.creatorThumbnail);\n    this.hearted_icon_name = data.heartedIcon.sources[0].clientResource.imageName;\n    this.unhearted_icon_name = data.unheartedIcon.sources[0].clientResource.imageName;\n    this.unhearted_icon_processor = {\n      border_image_processor: {\n        image_tint: {\n          color: data.unheartedIcon.processor.borderImageProcessor.imageTint.color\n        }\n      }\n    };\n    this.hearted_hover_text = data.heartedHoverText;\n    this.hearted_accessibility_label = data.heartedAccessibilityLabel;\n    this.unhearted_accessibility_label = data.unheartedAccessibilityLabel;\n    this.engagement_state_key = data.engagementStateKey;\n  }\n}", "import { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nimport { YTNode, type ObservedArray } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatAutoModMessage extends YTNode {\n  static type = 'LiveChatAutoModMessage';\n\n  menu_endpoint?: NavigationEndpoint;\n  moderation_buttons: ObservedArray<Button>;\n  auto_moderated_item: YTNode;\n  header_text: Text;\n  timestamp: number;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.moderation_buttons = Parser.parseArray(data.moderationButtons, Button);\n    this.auto_moderated_item = Parser.parseItem(data.autoModeratedItem);\n    this.header_text = new Text(data.headerText);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.id = data.id;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\nimport ToggleButtonView from '../../ToggleButtonView.js';\n\nexport default class LiveChatBannerChatSummary extends YTNode {\n  static type = 'LiveChatBannerChatSummary';\n\n  id: string;\n  chat_summary: Text;\n  icon_type: string;\n  like_feedback_button: ToggleButtonView | null;\n  dislike_feedback_button: ToggleButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.liveChatSummaryId;\n    this.chat_summary = new Text(data.chatSummary);\n    this.icon_type = data.icon.iconType;\n    this.like_feedback_button = Parser.parseItem(data.likeFeedbackButton, ToggleButtonView);\n    this.dislike_feedback_button = Parser.parseItem(data.dislikeFeedbackButton, ToggleButtonView);\n  }\n}\n", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatBannerPoll extends YTNode {\n  static type = 'LiveChatBannerPoll';\n\n  poll_question: Text;\n  author_photo: Thumbnail[];\n\n  choices: {\n    option_id: string;\n    text: string;\n  }[];\n\n  collapsed_state_entity_key: string;\n  live_chat_poll_state_entity_key: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_question = new Text(data.pollQuestion);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n\n    this.choices = data.pollChoices.map((choice: RawNode) => ({\n      option_id: choice.pollOptionId,\n      text: new Text(choice.text).toString() // XXX: This toString should probably not be used here.\n    }));\n\n    this.collapsed_state_entity_key = data.collapsedStateEntityKey;\n    this.live_chat_poll_state_entity_key = data.liveChatPollStateEntityKey;\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatBannerRedirect extends YTNode {\n  static type = 'LiveChatBannerRedirect';\n\n  banner_message: Text;\n  author_photo: Thumbnail[];\n  inline_action_button: Button | null;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.banner_message = new Text(data.bannerMessage);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.inline_action_button = Parser.parseItem(data.inlineActionButton, Button);\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport BumperUserEduContentView from './BumperUserEduContentView.js';\n\nexport default class LiveChatItemBumperView extends YTNode {\n  static type = 'LiveChatItemBumperView';\n  \n  content: BumperUserEduContentView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, BumperUserEduContentView);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatMembershipItem extends YTNode {\n  static type = 'LiveChatMembershipItem';\n\n  id: string;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text?: Text;\n  header_primary_text?: Text;\n  header_subtext: Text;\n  message?: Text;\n  author: Author;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText);\n    }\n\n    if (Reflect.has(data, 'headerPrimaryText')) {\n      this.header_primary_text = new Text(data.headerPrimaryText);\n    }\n\n    this.header_subtext = new Text(data.headerSubtext);\n\n    if (Reflect.has(data, 'message')) {\n      this.message = new Text(data.message);\n    }\n\n    this.author = new Author(data.authorName, data.authorBadges, data.authorPhoto, data.authorExternalChannelId);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatModeChangeMessage extends YTNode {\n  static type = 'LiveChatModeChangeMessage';\n\n  id: string;\n  icon_type: string;\n  text: Text;\n  subtext: Text;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.icon_type = data.icon.iconType;\n    this.text = new Text(data.text);\n    this.subtext = new Text(data.subtext);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n    this.timestamp_text = new Text(data.timestampText);\n  }\n}\n", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport ButtonView from '../../ButtonView.js';\nimport Text from '../../misc/Text.js';\n\nexport default class PdgReplyButtonView extends YTNode {\n  static type = 'PdgReplyButtonView';\n\n  reply_button: ButtonView | null;\n  reply_count_entity_key: string;\n  reply_count_placeholder: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.reply_button = Parser.parseItem(data.replyButton, ButtonView);\n    this.reply_count_entity_key = data.replyCountEntityKey;\n    this.reply_count_placeholder = Text.fromAttributed(data.replyCountPlaceholder);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport CreatorHeartView from './CreatorHeartView.js';\nimport LiveChatItemBumperView from './LiveChatItemBumperView.js';\nimport PdgReplyButtonView from './PdgReplyButtonView.js';\n\nexport default class LiveChatPaidMessage extends YTNode {\n  static type = 'LiveChatPaidMessage';\n\n  id: string;\n  message: Text;\n  author: Author;\n  author_name_text_color: number;\n  header_background_color: number;\n  header_text_color: number;\n  body_background_color: number;\n  body_text_color: number;\n  purchase_amount: string;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  timestamp: number;\n  timestamp_usec: string;\n  timestamp_text?: string;\n  timestamp_color: number;\n  header_overlay_image?: Thumbnail[];\n  text_input_background_color: number;\n  lower_bumper: LiveChatItemBumperView | null;\n  creator_heart_button: CreatorHeartView | null;\n  is_v2_style: boolean;\n  reply_button: PdgReplyButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.message = new Text(data.message);\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.author_name_text_color = data.authorNameTextColor;\n    this.header_background_color = data.headerBackgroundColor;\n    this.header_text_color = data.headerTextColor;\n    this.body_background_color = data.bodyBackgroundColor;\n    this.body_text_color = data.bodyTextColor;\n    this.purchase_amount = new Text(data.purchaseAmountText).toString();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText).toString();\n    }\n\n    this.timestamp_color = data.timestampColor;\n\n    if (Reflect.has(data, 'headerOverlayImage')) {\n      this.header_overlay_image = Thumbnail.fromResponse(data.headerOverlayImage);\n    }\n\n    this.text_input_background_color = data.textInputBackgroundColor;\n    this.lower_bumper = Parser.parseItem(data.lowerBumper, LiveChatItemBumperView);\n    this.creator_heart_button = Parser.parseItem(data.creatorHeartButton, CreatorHeartView);\n    this.is_v2_style = data.isV2Style;\n    this.reply_button = Parser.parseItem(data.replyButton, PdgReplyButtonView);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class LiveChatPaidSticker extends YTNode {\n  static type = 'LiveChatPaidSticker';\n\n  id: string;\n  author: Author;\n  money_chip_background_color: number;\n  money_chip_text_color: number;\n  background_color: number;\n  author_name_text_color: number;\n  sticker: Thumbnail[];\n  sticker_accessibility_label: string;\n  sticker_display_width: number;\n  sticker_display_height: number;\n  purchase_amount: string;\n  menu_endpoint: NavigationEndpoint;\n  context_menu: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  timestamp: number;\n  timestamp_usec: string;\n  is_v2_style: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.money_chip_background_color = data.moneyChipBackgroundColor;\n    this.money_chip_text_color = data.moneyChipTextColor;\n    this.background_color = data.backgroundColor;\n    this.author_name_text_color = data.authorNameTextColor;\n    this.sticker = Thumbnail.fromResponse(data.sticker);\n    this.sticker_accessibility_label = data.sticker.accessibility.accessibilityData.label;\n    this.sticker_display_width = data.stickerDisplayWidth;\n    this.sticker_display_height = data.stickerDisplayHeight;\n    this.purchase_amount = new Text(data.purchaseAmountText).toString();\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu = this.menu_endpoint;\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n    this.is_v2_style = data.isV2Style;\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatPlaceholderItem extends YTNode {\n  static type = 'LiveChatPlaceholderItem';\n\n  id: string;\n  timestamp: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n  }\n}", "import { Parser } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\n\nexport default class LiveChatProductItem extends YTNode {\n  static type = 'LiveChatProductItem';\n\n  title: string;\n  accessibility_title: string;\n  thumbnail: Thumbnail[];\n  price: string;\n  vendor_name: string;\n  from_vendor_text: string;\n  information_button: YTNode;\n  endpoint: NavigationEndpoint;\n  creator_message: string;\n  creator_name: string;\n  author_photo: Thumbnail[];\n  information_dialog: YTNode;\n  is_verified: boolean;\n  creator_custom_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.accessibility_title = data.accessibilityTitle;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.vendor_name = data.vendorName;\n    this.from_vendor_text = data.fromVendorText;\n    this.information_button = Parser.parseItem(data.informationButton);\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.creator_message = data.creatorMessage;\n    this.creator_name = data.creatorName;\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.information_dialog = Parser.parseItem(data.informationDialog);\n    this.is_verified = data.isVerified;\n    this.creator_custom_message = new Text(data.creatorCustomMessage);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport Text from '../../misc/Text.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatRestrictedParticipation extends YTNode {\n  static type = 'LiveChatRestrictedParticipation';\n\n  message: Text;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.message = new Text(data.message);\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n    // TODO: parse onClickCommand\n  }\n}", "import type { RawNode } from '../index.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatAuthorBadge extends MetadataBadge {\n  static type = 'LiveChatAuthorBadge';\n\n  custom_thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super(data);\n    this.custom_thumbnail = Thumbnail.fromResponse(data.customThumbnail);\n  }\n}", "import { Parser } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport type { ObservedArray } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport LiveChatAuthorBadge from '../../LiveChatAuthorBadge.js';\n\nexport default class LiveChatSponsorshipsHeader extends YTNode {\n  static type = 'LiveChatSponsorshipsHeader';\n\n  author_name: Text;\n  author_photo: Thumbnail[];\n  author_badges: ObservedArray<LiveChatAuthorBadge> | null;\n  primary_text: Text;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n  image: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.author_name = new Text(data.authorName);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.author_badges = Parser.parseArray(data.authorBadges, LiveChatAuthorBadge);\n    this.primary_text = new Text(data.primaryText);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    this.image = Thumbnail.fromResponse(data.image);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport LiveChatSponsorshipsHeader from './LiveChatSponsorshipsHeader.js';\n\nexport default class LiveChatSponsorshipsGiftPurchaseAnnouncement extends YTNode {\n  static type = 'LiveChatSponsorshipsGiftPurchaseAnnouncement';\n\n  id: string;\n  timestamp_usec: string;\n  author_external_channel_id: string;\n  header: LiveChatSponsorshipsHeader | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp_usec = data.timestampUsec;\n    this.author_external_channel_id = data.authorExternalChannelId;\n    this.header = Parser.parseItem(data.header, LiveChatSponsorshipsHeader);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatSponsorshipsGiftRedemptionAnnouncement extends YTNode {\n  static type = 'LiveChatSponsorshipsGiftRedemptionAnnouncement';\n\n  id: string;\n  timestamp_usec: string;\n  timestamp_text: Text;\n  author: Author;\n  message: Text;\n  menu_endpoint: NavigationEndpoint;\n  context_menu_accessibility_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.timestamp_usec = data.timestampUsec;\n    this.timestamp_text = new Text(data.timestampText);\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    this.message = new Text(data.message);\n    this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n  }\n}", "import { type ObservedArray, YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport ButtonView from '../../ButtonView.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatTextMessage extends YTNode {\n  static type = 'LiveChatTextMessage';\n\n  id: string;\n  message: Text;\n  inline_action_buttons: ObservedArray<Button>;\n  timestamp: number;\n  timestamp_usec: number;\n  timestamp_text?: string;\n  author: Author;\n  menu_endpoint?: NavigationEndpoint;\n  context_menu_accessibility_label?: string;\n  before_content_buttons: ObservedArray<ButtonView>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.message = new Text(data.message);\n    this.inline_action_buttons = Parser.parseArray(data.inlineActionButtons, Button);\n    this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n    this.timestamp_usec = data.timestampUsec;\n\n    if (Reflect.has(data, 'timestampText')) {\n      this.timestamp_text = new Text(data.timestampText).toString();\n    }\n\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    if (Reflect.has(data, 'contextMenuEndpoint')) {\n      this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    }\n\n    if (\n      Reflect.has(data, 'contextMenuAccessibility') &&\n      Reflect.has(data.contextMenuAccessibility, 'accessibilityData') &&\n      Reflect.has(data.contextMenuAccessibility.accessibilityData, 'label')\n    ) {\n      this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    }\n\n    this.before_content_buttons = Parser.parseArray(data.beforeContentButtons, ButtonView);\n  }\n}", "import Author from '../../misc/Author.js';\nimport { Parser } from '../../../index.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nimport { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\n\nexport default class LiveChatTickerPaidMessageItem extends YTNode {\n  static type = 'LiveChatTickerPaidMessageItem';\n\n  id: string;\n  author: Author;\n  amount?: Text;\n  amount_text_color: number;\n  start_background_color: number;\n  end_background_color: number;\n  duration_sec: number;\n  full_duration_sec: number;\n  show_item: YTNode;\n  show_item_endpoint: NavigationEndpoint;\n  animation_origin: string;\n  open_engagement_panel_command: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    this.author = new Author(\n      data.authorName || data.authorUsername,\n      data.authorBadges,\n      data.authorPhoto,\n      data.authorExternalChannelId\n    );\n\n    if (Reflect.has(data, 'amount')) {\n      this.amount = new Text(data.amount);\n    }\n\n    this.amount_text_color = data.amountTextColor;\n    this.start_background_color = data.startBackgroundColor;\n    this.end_background_color = data.endBackgroundColor;\n    this.duration_sec = data.durationSec;\n    this.full_duration_sec = data.fullDurationSec;\n    this.show_item = Parser.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);\n    this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);\n    this.animation_origin = data.animationOrigin;\n    this.open_engagement_panel_command = new NavigationEndpoint(data.openEngagementPanelCommand);\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport { Parser, type RawNode } from '../../../index.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\n\nexport default class LiveChatTickerPaidStickerItem extends YTNode {\n  static type = 'LiveChatTickerPaidStickerItem';\n\n  id: string;\n  author_external_channel_id: string;\n  author_photo: Thumbnail[];\n  start_background_color: number;\n  end_background_color: number;\n  duration_sec: number;\n  full_duration_sec: number;\n  show_item: YTNode;\n  show_item_endpoint: NavigationEndpoint;\n  ticker_thumbnails: {\n    thumbnails: Thumbnail[],\n    label?: string,\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.author_external_channel_id = data.authorExternalChannelId;\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.start_background_color = data.startBackgroundColor;\n    this.end_background_color = data.endBackgroundColor;\n    this.duration_sec = data.durationSec;\n    this.full_duration_sec = data.fullDurationSec;\n    this.show_item = Parser.parseItem(data.showItemEndpoint?.showLiveChatItemEndpoint?.renderer);\n    this.show_item_endpoint = new NavigationEndpoint(data.showItemEndpoint);\n\n    this.ticker_thumbnails = data.tickerThumbnails.map((item: any) => ({\n      thumbnails: Thumbnail.fromResponse(item),\n      label: item?.accessibility?.accessibilityData?.label\n    }));\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport Author from '../../misc/Author.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatTickerSponsorItem extends YTNode {\n  static type = 'LiveChatTickerSponsorItem';\n\n  id: string;\n  detail: Text;\n  author: Author;\n  duration_sec: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.detail = new Text(data.detailText);\n    this.author = new Author(\n      data.authorName,\n      data.authorBadges,\n      data.sponsorPhoto,\n      data.authorExternalChannelId\n    );\n    this.duration_sec = data.durationSec;\n    // TODO: Parse remaining props.\n  }\n}", "import { Parser } from '../../../index.js';\nimport type { RawNode } from '../../../index.js';\nimport { YTNode } from '../../../helpers.js';\nimport NavigationEndpoint from '../../NavigationEndpoint.js';\nimport Text from '../../misc/Text.js';\n\nexport default class LiveChatViewerEngagementMessage extends YTNode {\n  static type = 'LiveChatViewerEngagementMessage';\n\n  id: string;\n  timestamp?: number;\n  timestamp_usec?: string;\n  icon_type?: string;\n  message: Text;\n  action_button: YTNode | null;\n  menu_endpoint?: NavigationEndpoint;\n  context_menu_accessibility_label?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n\n    if (Reflect.has(data, 'timestampUsec')) {\n      this.timestamp = Math.floor(parseInt(data.timestampUsec) / 1000);\n      this.timestamp_usec = data.timestampUsec;\n    }\n\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.message = new Text(data.message);\n    this.action_button = Parser.parseItem(data.actionButton);\n\n    if (Reflect.has(data, 'contextMenuEndpoint')) {\n      this.menu_endpoint = new NavigationEndpoint(data.contextMenuEndpoint);\n    }\n\n    if (\n      Reflect.has(data, 'contextMenuAccessibility') &&\n      Reflect.has(data.contextMenuAccessibility, 'accessibilityData') &&\n      Reflect.has(data.contextMenuAccessibility.accessibilityData, 'label')\n    ) {\n      this.context_menu_accessibility_label = data.contextMenuAccessibility.accessibilityData.label;\n    }\n  }\n}", "import { YTNode } from '../../../helpers.js';\nimport type { RawNode } from '../../../index.js';\nimport { Parser } from '../../../index.js';\nimport Button from '../../Button.js';\nimport Text from '../../misc/Text.js';\nimport Thumbnail from '../../misc/Thumbnail.js';\n\nexport default class PollHeader extends YTNode {\n  static type = 'PollHeader';\n\n  poll_question: Text;\n  thumbnails: Thumbnail[];\n  metadata: Text;\n  live_chat_poll_type: string;\n  context_menu_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_question = new Text(data.pollQuestion);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.metadata = new Text(data.metadataText);\n    this.live_chat_poll_type = data.liveChatPollType;\n    this.context_menu_button = Parser.parseItem(data.contextMenuButton, Button);\n  }\n}", "import { Parser } from '../../index.js';\nimport { type SuperParsedResult, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class LiveChatActionPanel extends YTNode {\n  static type = 'LiveChatActionPanel';\n\n  id: string;\n  contents: SuperParsedResult<YTNode>;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.id;\n    this.contents = Parser.parse(data.contents);\n    this.target_id = data.targetId;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MarkChatItemAsDeletedAction extends YTNode {\n  static type = 'MarkChatItemAsDeletedAction';\n\n  deleted_state_message: Text;\n  target_item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.deleted_state_message = new Text(data.deletedStateMessage);\n    this.target_item_id = data.targetItemId;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MarkChatItemsByAuthorAsDeletedAction extends YTNode {\n  static type = 'MarkChatItemsByAuthorAsDeletedAction';\n\n  deleted_state_message: Text;\n  external_channel_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.deleted_state_message = new Text(data.deletedStateMessage);\n    this.external_channel_id = data.externalChannelId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveBannerForLiveChatCommand extends YTNode {\n  static type = 'RemoveBannerForLiveChatCommand';\n\n  target_action_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_action_id = data.targetActionId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveChatItemAction extends YTNode {\n  static type = 'RemoveChatItemAction';\n\n  target_item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_item_id = data.targetItemId;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class RemoveChatItemByAuthorAction extends YTNode {\n  static type = 'RemoveChatItemByAuthorAction';\n\n  external_channel_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.external_channel_id = data.externalChannelId;\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ReplaceChatItemAction extends YTNode {\n  static type = 'ReplaceChatItemAction';\n\n  target_item_id: string;\n  replacement_item: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_item_id = data.targetItemId;\n    this.replacement_item = Parser.parseItem(data.replacementItem);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class ReplaceLiveChatAction extends YTNode {\n  static type = 'ReplaceLiveChatAction';\n\n  to_replace: string;\n  replacement: YTNode | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.to_replace = data.toReplace;\n    this.replacement = Parser.parseItem(data.replacement);\n  }\n}\n", "import { Parser } from '../../index.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ReplayChatItemAction extends YTNode {\n  static type = 'ReplayChatItemAction';\n\n  actions: ObservedArray<YTNode>;\n  video_offset_time_msec: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parseArray(data.actions?.map((action: RawNode) => {\n      delete action.clickTrackingParams;\n      return action;\n    }));\n\n    this.video_offset_time_msec = data.videoOffsetTimeMsec;\n  }\n}", "import { Parser } from '../../index.js';\nimport LiveChatActionPanel from './LiveChatActionPanel.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatActionPanelAction extends YTNode {\n  static type = 'ShowLiveChatActionPanelAction';\n\n  panel_to_show: LiveChatActionPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.panel_to_show = Parser.parseItem(data.panelToShow, LiveChatActionPanel);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatDialogAction extends YTNode {\n  static type = 'ShowLiveChatDialogAction';\n\n  dialog: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.dialog = Parser.parseItem(data.dialog);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class ShowLiveChatTooltipCommand extends YTNode {\n  static type = 'ShowLiveChatTooltipCommand';\n\n  tooltip: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.tooltip = Parser.parseItem(data.tooltip);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateDateTextAction extends YTNode {\n  static type = 'UpdateDateTextAction';\n\n  date_text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.date_text = new Text(data.dateText).toString();\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateDescriptionAction extends YTNode {\n  static type = 'UpdateDescriptionAction';\n\n  description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.description = new Text(data.description);\n  }\n}", "import { Parser } from '../../index.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateLiveChatPollAction extends YTNode {\n  static type = 'UpdateLiveChatPollAction';\n\n  poll_to_update: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.poll_to_update = Parser.parseItem(data.pollToUpdate);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateTitleAction extends YTNode {\n  static type = 'UpdateTitleAction';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateToggleButtonTextAction extends YTNode {\n  static type = 'UpdateToggleButtonTextAction';\n\n  default_text: string;\n  toggled_text: string;\n  button_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.default_text = new Text(data.defaultText).toString();\n    this.toggled_text = new Text(data.toggledText).toString();\n    this.button_id = data.buttonId;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class UpdateViewershipAction extends YTNode {\n  static type = 'UpdateViewershipAction';\n\n  view_count: Text;\n  extra_short_view_count: Text;\n  original_view_count: number;\n  unlabeled_view_count_value: Text;\n  is_live: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    const view_count_renderer = data.viewCount.videoViewCountRenderer;\n    this.view_count = new Text(view_count_renderer.viewCount);\n    this.extra_short_view_count = new Text(view_count_renderer.extraShortViewCount);\n    this.original_view_count = parseInt(view_count_renderer.originalViewCount);\n    this.unlabeled_view_count_value = new Text(view_count_renderer.unlabeledViewCountValue);\n    this.is_live = view_count_renderer.isLive;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChatDialog extends YTNode {\n  static type = 'LiveChatDialog';\n\n  confirm_button: Button | null;\n  dialog_messages: Text[];\n\n  constructor (data: RawNode) {\n    super();\n    this.confirm_button = Parser.parseItem(data.confirmButton, Button);\n    this.dialog_messages = data.dialogMessages.map((el: RawNode) => new Text(el));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport SortFilterSubMenu from './SortFilterSubMenu.js';\nimport Menu from './menus/Menu.js';\n\nexport default class LiveChatHeader extends YTNode {\n  static type = 'LiveChatHeader';\n\n  overflow_menu: Menu | null;\n  collapse_button: Button | null;\n  view_selector: SortFilterSubMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.overflow_menu = Parser.parseItem(data.overflowMenu, Menu);\n    this.collapse_button = Parser.parseItem(data.collapseButton, Button);\n    this.view_selector = Parser.parseItem(data.viewSelector, SortFilterSubMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\n\nexport default class LiveChatItemList extends YTNode {\n  static type = 'LiveChatItemList';\n\n  max_items_to_display: string;\n  more_comments_below_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.max_items_to_display = data.maxItemsToDisplay;\n    this.more_comments_below_button = Parser.parseItem(data.moreCommentsBelowButton, Button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatMessageInput extends YTNode {\n  static type = 'LiveChatMessageInput';\n\n  author_name: Text;\n  author_photo: Thumbnail[];\n  send_button: Button | null;\n  target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.author_name = new Text(data.authorName);\n    this.author_photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.send_button = Parser.parseItem(data.sendButton, Button);\n    this.target_id = data.targetId;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class LiveChatParticipant extends YTNode {\n  static type = 'LiveChatParticipant';\n\n  name: Text;\n  photo: Thumbnail[];\n  badges: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.name = new Text(data.authorName);\n    this.photo = Thumbnail.fromResponse(data.authorPhoto);\n    this.badges = Parser.parseArray(data.authorBadges);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport LiveChatParticipant from './LiveChatParticipant.js';\nimport Text from './misc/Text.js';\n\nexport default class LiveChatParticipantsList extends YTNode {\n  static type = 'LiveChatParticipantsList';\n\n  title: Text;\n  participants: ObservedArray<LiveChatParticipant>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.participants = Parser.parseArray(data.participants, LiveChatParticipant);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ContentMetadataView from './ContentMetadataView.js';\nimport DecoratedAvatarView from './DecoratedAvatarView.js';\nimport Text from './misc/Text.js';\nimport ButtonView from './ButtonView.js';\n\nexport default class LockupMetadataView extends YTNode {\n  static type = 'LockupMetadataView';\n\n  public title: Text;\n  public metadata: ContentMetadataView | null;\n  public image: DecoratedAvatarView | null;\n  public menu_button: ButtonView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Text.fromAttributed(data.title);\n    this.metadata = Parser.parseItem(data.metadata, ContentMetadataView);\n    this.image = Parser.parseItem(data.image, DecoratedAvatarView);\n    this.menu_button = Parser.parseItem(data.menuButton, ButtonView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ThumbnailView from './ThumbnailView.js';\nimport CollectionThumbnailView from './CollectionThumbnailView.js';\nimport LockupMetadataView from './LockupMetadataView.js';\nimport RendererContext from './misc/RendererContext.js';\n\nexport default class LockupView extends YTNode {\n  static type = 'LockupView';\n\n  public content_image: CollectionThumbnailView | ThumbnailView | null;\n  public metadata: LockupMetadataView | null;\n  public content_id: string;\n  public content_type: 'UNSPECIFIED' | 'VIDEO' | 'PLAYLIST' | 'SHORT' | 'CHANNEL' | 'ALBUM' | 'PRODUCT' | 'GAME' | 'CLIP' | 'PODCAST' | 'SOURCE' | 'SHOPPING_COLLECTION' | 'MOVIE';\n  public renderer_context: RendererContext;\n\n  constructor(data: RawNode) {\n    super();\n    this.content_image = Parser.parseItem(data.contentImage, [ CollectionThumbnailView, ThumbnailView ]);\n    this.metadata = Parser.parseItem(data.metadata, LockupMetadataView);\n    this.content_id = data.contentId;\n    this.content_type = data.contentType.replace('LOCKUP_CONTENT_TYPE_', '');\n    this.renderer_context = new RendererContext(data.rendererContext);\n  }\n}", "import { YTNode, type ObservedArray, observe } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport HeatMarker from './HeatMarker.js';\nimport TimedMarkerDecoration from './TimedMarkerDecoration.js';\nimport Heatmap from './Heatmap.js';\nimport * as Parser from '../parser.js';\n\n/**\n * Represents a list of markers for a video. Can contain different types of markers:\n * - MARKER_TYPE_HEATMAP: Heat map markers showing audience engagement data\n * - Other marker types may exist but are not currently handled\n */\nexport default class MacroMarkersListEntity extends YTNode {\n  static type = 'MacroMarkersListEntity';\n\n  marker_entity_key: string;\n  external_video_id: string;\n  /** The type of markers in this entity (e.g., 'MARKER_TYPE_HEATMAP') */\n  marker_type: string;\n  markers: ObservedArray<HeatMarker>;\n  max_height_dp: number;\n  min_height_dp: number;\n  show_hide_animation_duration_millis: number;\n  timed_marker_decorations: ObservedArray<TimedMarkerDecoration>;\n\n  // Store raw API data for use in toHeatmap\n  private raw_api_markers: RawNode[];\n  private raw_api_decorations: RawNode[];\n\n  constructor(data: RawNode) {\n    super();\n    this.marker_entity_key = data.key;\n    this.external_video_id = data.externalVideoId;\n    this.marker_type = data.markersList?.markerType || '';\n\n    // Store raw API data\n    this.raw_api_markers = data.markersList?.markers || [];\n    this.raw_api_decorations = data.markersList?.markersDecoration?.timedMarkerDecorations || [];\n\n    // Parse markers array using the updated HeatMarker constructor\n    this.markers = observe(\n      this.raw_api_markers.map((marker: RawNode) => new HeatMarker(marker))\n    );\n\n    // Extract metadata\n    const heatmapMetadata = data.markersList?.markersMetadata?.heatmapMetadata;\n    this.max_height_dp = heatmapMetadata?.maxHeightDp || 40;\n    this.min_height_dp = heatmapMetadata?.minHeightDp || 4;\n    this.show_hide_animation_duration_millis =\n      heatmapMetadata?.showHideAnimationDurationMillis || 200;\n\n    // Parse timed marker decorations\n    // Assuming TimedMarkerDecoration constructor handles raw API decoration objects correctly\n    this.timed_marker_decorations = observe(\n      this.raw_api_decorations.map(\n        (decoration: RawNode) => new TimedMarkerDecoration(decoration)\n      )\n    );\n  }\n\n  /**\n  * Checks if this MacroMarkersListEntity represents heatmap data.\n  * Only heatmap markers can be converted to Heatmap objects.\n  */\n  isHeatmap(): boolean {\n    return this.marker_type === 'MARKER_TYPE_HEATMAP';\n  }\n\n  /**\n  * Converts this MacroMarkersListEntity to a Heatmap object\n  * for compatibility with existing code. Only works for heatmap markers.\n  * @returns Heatmap object if this entity contains heatmap data, null otherwise\n  */\n  toHeatmap(): Heatmap | null {\n    if (!this.isHeatmap()) {\n      return null;\n    }\n\n    const wrappedHeatMarkers = this.raw_api_markers.map((marker) => ({ HeatMarker: marker }));\n    const wrappedDecorations = this.raw_api_decorations.map((decoration) => ({ TimedMarkerDecoration: decoration }));\n\n    const heatmapRawPayload = {\n      maxHeightDp: this.max_height_dp,\n      minHeightDp: this.min_height_dp,\n      showHideAnimationDurationMillis: this.show_hide_animation_duration_millis,\n      heatMarkers: wrappedHeatMarkers,\n      heatMarkersDecorations: wrappedDecorations\n    };\n\n    return Parser.parseItem({ Heatmap: heatmapRawPayload }, Heatmap);\n  }\n}\n", "import Button from '../Button.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MenuNavigationItem extends Button {\n  static type = 'MenuNavigationItem';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport MenuNavigationItem from './MenuNavigationItem.js';\nimport MenuServiceItem from './MenuServiceItem.js';\n\nexport default class MenuPopup extends YTNode {\n  static type = 'MenuPopup';\n\n  items: ObservedArray<MenuNavigationItem | MenuServiceItem>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items, [ MenuNavigationItem, MenuServiceItem ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class Notification extends YTNode {\n  static type = 'Notification';\n\n  thumbnails: Thumbnail[];\n  video_thumbnails: Thumbnail[];\n  short_message: Text;\n  sent_time: Text;\n  notification_id: string;\n  endpoint: NavigationEndpoint;\n  record_click_endpoint: NavigationEndpoint;\n  menu: YTNode;\n  read: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);\n    this.short_message = new Text(data.shortMessage);\n    this.sent_time = new Text(data.sentTimeText);\n    this.notification_id = data.notificationId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.record_click_endpoint = new NavigationEndpoint(data.recordClickEndpoint);\n    this.menu = Parser.parseItem(data.contextualMenu);\n    this.read = data.read;\n  }\n}", "import { type ObservedArray, YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ContinuationItem from '../ContinuationItem.js';\nimport Message from '../Message.js';\nimport Notification from '../Notification.js';\nimport Text from '../misc/Text.js';\n\nexport default class MultiPageMenuNotificationSection extends YTNode {\n  static type = 'MultiPageMenuNotificationSection';\n\n  public notification_section_title?: Text;\n  public items: ObservedArray<Notification | Message | ContinuationItem>;\n\n  constructor(data: RawNode) {\n    super();\n    \n    if ('notificationSectionTitle' in data) {\n      this.notification_section_title = new Text(data.notificationSectionTitle);\n    }\n    \n    this.items = Parser.parseArray(data.items, [ Notification, Message, ContinuationItem ]);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class MusicMenuItemDivider extends YTNode {\n  static type = 'MusicMenuItemDivider';\n\n  // eslint-disable-next-line\n  constructor(_data: RawNode) {\n    super();\n    // XXX: Should check if this ever has any data.\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport Text from '../misc/Text.js';\n\nexport default class MusicMultiSelectMenuItem extends YTNode {\n  static type = 'MusicMultiSelectMenuItem';\n\n  title: string;\n  form_item_entity_key: string;\n  selected_icon_type?: string;\n  endpoint?: NavigationEndpoint;\n  selected: boolean;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title).toString();\n    this.form_item_entity_key = data.formItemEntityKey;\n\n    if (Reflect.has(data, 'selectedIcon')) {\n      this.selected_icon_type = data.selectedIcon.iconType;\n    }\n\n    // @TODO: Check if there any other endpoints we can parse.\n    if (Reflect.has(data, 'selectedCommand')) {\n      this.endpoint = new NavigationEndpoint(data.selectedCommand);\n    }\n\n    this.selected = !!this.endpoint;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Text from '../misc/Text.js';\nimport MusicMenuItemDivider from './MusicMenuItemDivider.js';\nimport MusicMultiSelectMenuItem from './MusicMultiSelectMenuItem.js';\n\nexport default class MusicMultiSelectMenu extends YTNode {\n  static type = 'MusicMultiSelectMenu';\n\n  title?: Text;\n  options: ObservedArray<MusicMultiSelectMenuItem | MusicMenuItemDivider>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title') && Reflect.has(data.title, 'musicMenuTitleRenderer')) {\n      this.title = new Text(data.title.musicMenuTitleRenderer?.primaryText);\n    }\n\n    this.options = Parser.parseArray(data.options, [ MusicMultiSelectMenuItem, MusicMenuItemDivider ]);\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport Text from '../misc/Text.js';\n\nexport default class SimpleMenuHeader extends YTNode {\n  static type = 'SimpleMenuHeader';\n\n  title: Text;\n  buttons: ObservedArray<Button>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.buttons = Parser.parseArray(data.buttons, Button);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MerchandiseItem extends YTNode {\n  static type = 'MerchandiseItem';\n\n  title: string;\n  description: string;\n  thumbnails: Thumbnail[];\n  price: string;\n  vendor_name: string;\n  button_text: string;\n  button_accessibility_text: string;\n  from_vendor_text: string;\n  additional_fees_text: string;\n  region_format: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description;\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.vendor_name = data.vendorName;\n    this.button_text = data.buttonText;\n    this.button_accessibility_text = data.buttonAccessibilityText;\n    this.from_vendor_text = data.fromVendorText;\n    this.additional_fees_text = data.additionalFeesText;\n    this.region_format = data.regionFormat;\n    this.endpoint = new NavigationEndpoint(data.buttonCommand);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class MerchandiseShelf extends YTNode {\n  static type = 'MerchandiseShelf';\n\n  title: string;\n  menu: YTNode;\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.menu = Parser.parseItem(data.actionButton);\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataRow extends YTNode {\n  static type = 'MetadataRow';\n\n  title: Text;\n  contents: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = data.contents.map((content: RawNode) => new Text(content));\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class MetadataRowContainer extends YTNode {\n  static type = 'MetadataRowContainer';\n\n  rows: ObservedArray<YTNode>;\n  collapsed_item_count: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.rows = Parser.parseArray(data.rows);\n    this.collapsed_item_count = data.collapsedItemCount;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MetadataRowHeader extends YTNode {\n  static type = 'MetadataRowHeader';\n\n  content: Text;\n  has_divider_line: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = new Text(data.content);\n    this.has_divider_line = data.hasDividerLine;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MetadataScreen extends YTNode {\n  static type = 'MetadataScreen';\n\n  section_list: YTNode;\n\n  constructor (data: RawNode) {\n    super();\n    this.section_list = Parser.parseItem(data);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MicroformatData extends YTNode {\n  static type = 'MicroformatData';\n\n  url_canonical: string;\n  title: string;\n  description: string;\n  thumbnail: Thumbnail[];\n  site_name: string;\n  app_name: string;\n  android_package: string;\n  ios_app_store_id: string;\n  ios_app_arguments: string;\n  og_type: string;\n  url_applinks_web: string;\n  url_applinks_ios: string;\n  url_applinks_android: string;\n  url_twitter_ios: string;\n  url_twitter_android: string;\n  twitter_card_type: string;\n  twitter_site_handle: string;\n  schema_dot_org_type: string;\n  noindex: string;\n  is_unlisted: boolean;\n  is_family_safe: boolean;\n  tags: string[];\n  available_countries: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.url_canonical = data.urlCanonical;\n    this.title = data.title;\n    this.description = data.description;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.site_name = data.siteName;\n    this.app_name = data.appName;\n    this.android_package = data.androidPackage;\n    this.ios_app_store_id = data.iosAppStoreId;\n    this.ios_app_arguments = data.iosAppArguments;\n    this.og_type = data.ogType;\n    this.url_applinks_web = data.urlApplinksWeb;\n    this.url_applinks_ios = data.urlApplinksIos;\n    this.url_applinks_android = data.urlApplinksAndroid;\n    this.url_twitter_ios = data.urlTwitterIos;\n    this.url_twitter_android = data.urlTwitterAndroid;\n    this.twitter_card_type = data.twitterCardType;\n    this.twitter_site_handle = data.twitterSiteHandle;\n    this.schema_dot_org_type = data.schemaDotOrgType;\n    this.noindex = data.noindex;\n    this.is_unlisted = data.unlisted;\n    this.is_family_safe = data.familySafe;\n    this.tags = data.tags;\n    this.available_countries = data.availableCountries;\n    // XXX: linkAlternatives?\n  }\n}", "import type { RawNode } from '../index.js';\nimport Playlist from './Playlist.js';\n\nexport default class Mix extends Playlist {\n  static type = 'Mix';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class ModalWithTitleAndButton extends YTNode {\n  static type = 'ModalWithTitleAndButton';\n\n  title: Text;\n  content: Text;\n  button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.content = new Text(data.content);\n    this.button = Parser.parseItem(data.button, Button);\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Movie extends YTNode {\n  static type = 'Movie';\n\n  id: string;\n  title: Text;\n  description_snippet?: Text;\n  top_metadata_items: Text;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  endpoint: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  use_vertical_poster: boolean;\n  show_action_menu: boolean;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    const overlay_time_status = data.thumbnailOverlays\n      .find((overlay: RawNode) => overlay.thumbnailOverlayTimeStatusRenderer)\n      ?.thumbnailOverlayTimeStatusRenderer.text || 'N/A';\n\n    this.id = data.videoId;\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'descriptionSnippet')) {\n      this.description_snippet = new Text(data.descriptionSnippet);\n    }\n\n    this.top_metadata_items = new Text(data.topMetadataItems);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.longBylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail);\n\n    this.duration = {\n      text: data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString(),\n      seconds: timeToSeconds(data.lengthText ? new Text(data.lengthText).toString() : new Text(overlay_time_status).toString())\n    };\n\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.badges = Parser.parseArray(data.badges);\n    this.use_vertical_poster = data.useVerticalPoster;\n    this.show_action_menu = data.showActionMenu;\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MovingThumbnail extends YTNode {\n  static type = 'MovingThumbnail';\n\n  constructor(data: RawNode) {\n    super();\n    return data.movingThumbnailDetails?.thumbnails.map((thumbnail: RawNode) => new Thumbnail(thumbnail)).sort((a: any, b: any) => b.width - a.width);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicCardShelfHeaderBasic extends YTNode {\n  static type = 'MusicCardShelfHeaderBasic';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class MusicInlineBadge extends YTNode {\n  static type = 'MusicInlineBadge';\n\n  public icon_type: string;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.icon_type = data.icon.iconType;\n    \n    if ('accessibilityData' in data\n      && 'accessibilityData' in data.accessibilityData) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibilityData.accessibilityData)\n      };\n    }\n  }\n  \n  get label(): string | undefined {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class MusicPlayButton extends YTNode {\n  static type = 'MusicPlayButton';\n\n  public endpoint: NavigationEndpoint;\n  public play_icon_type: string;\n  public pause_icon_type: string;\n  public icon_color: string;\n  public accessibility_play_data?: AccessibilitySupportedDatas;\n  public accessibility_pause_data?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.playNavigationEndpoint);\n    this.play_icon_type = data.playIcon.iconType;\n    this.pause_icon_type = data.pauseIcon.iconType;\n\n    if ('accessibilityPlayData' in data\n      && 'accessibilityData' in data.accessibilityPlayData) {\n      this.accessibility_play_data = {\n        accessibility_data: new AccessibilityData(data.accessibilityPlayData.accessibilityData)\n      };\n    }\n\n    if ('accessibilityPauseData' in data\n      && 'accessibilityData' in data.accessibilityPauseData) {\n      this.accessibility_pause_data = {\n        accessibility_data: new AccessibilityData(data.accessibilityPauseData.accessibilityData)\n      };\n    }\n\n    this.icon_color = data.iconColor;\n  }\n  \n  get play_label(): string | undefined {\n    return this.accessibility_play_data?.accessibility_data?.label;\n  }\n  \n  get pause_label(): string | undefined {\n    return this.accessibility_pause_data?.accessibility_data?.label;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport MusicPlayButton from './MusicPlayButton.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicItemThumbnailOverlay extends YTNode {\n  static type = 'MusicItemThumbnailOverlay';\n\n  content: MusicPlayButton | null;\n  content_position: string;\n  display_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, MusicPlayButton);\n    this.content_position = data.contentPosition;\n    this.display_style = data.displayStyle;\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicThumbnail extends YTNode {\n  static type = 'MusicThumbnail';\n\n  contents: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport MusicCardShelfHeaderBasic from './MusicCardShelfHeaderBasic.js';\nimport MusicInlineBadge from './MusicInlineBadge.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class MusicCardShelf extends YTNode {\n  static type = 'MusicCardShelf';\n\n  thumbnail: MusicThumbnail | null;\n  title: Text;\n  subtitle: Text;\n  buttons: ObservedArray<Button>;\n  menu: Menu | null;\n  on_tap: NavigationEndpoint;\n  header: MusicCardShelfHeaderBasic | null;\n  end_icon_type?: string;\n  subtitle_badges: ObservedArray<MusicInlineBadge>;\n  thumbnail_overlay: MusicItemThumbnailOverlay | null;\n  contents?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.buttons = Parser.parseArray(data.buttons, Button);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.on_tap = new NavigationEndpoint(data.onTap);\n    this.header = Parser.parseItem(data.header, MusicCardShelfHeaderBasic);\n\n    if (Reflect.has(data, 'endIcon') && Reflect.has(data.endIcon, 'iconType')) {\n      this.end_icon_type = data.endIcon.iconType;\n    }\n\n    this.subtitle_badges = Parser.parseArray(data.subtitleBadges, MusicInlineBadge);\n    this.thumbnail_overlay = Parser.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);\n\n    if (Reflect.has(data, 'contents')) {\n      this.contents = Parser.parseArray(data.contents);\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport IconLink from './IconLink.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicCarouselShelfBasicHeader extends YTNode {\n  static type = 'MusicCarouselShelfBasicHeader';\n\n  title: Text;\n  strapline?: Text;\n  thumbnail?: MusicThumbnail | null;\n  more_content?: Button | null;\n  end_icons?: ObservedArray<IconLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'strapline')) {\n      this.strapline = new Text(data.strapline);\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    }\n\n    if (Reflect.has(data, 'moreContentButton')) {\n      this.more_content = Parser.parseItem(data.moreContentButton, Button);\n    }\n\n    if (Reflect.has(data, 'endIcons')) {\n      this.end_icons = Parser.parseArray(data.endIcons, IconLink);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nimport Menu from './menus/Menu.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class MusicMultiRowListItem extends YTNode {\n  static type = 'MusicMultiRowListItem';\n\n  thumbnail: MusicThumbnail | null;\n  overlay: MusicItemThumbnailOverlay | null;\n  on_tap: NavigationEndpoint;\n  menu: Menu | null;\n  subtitle: Text;\n  title: Text;\n  second_title?: Text;\n  description?: Text;\n  display_style?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.overlay = Parser.parseItem(data.overlay, MusicItemThumbnailOverlay);\n    this.on_tap = new NavigationEndpoint(data.onTap);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.subtitle = new Text(data.subtitle);\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'secondTitle')) {\n      this.second_title = new Text(data.secondTitle);\n    }\n\n    if (Reflect.has(data, 'description')) {\n      this.description = new Text(data.description);\n    }\n\n    if (Reflect.has(data, 'displayStyle')) {\n      this.display_style = data.displayStyle;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicNavigationButton extends YTNode {\n  static type = 'MusicNavigationButton';\n\n  button_text: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.button_text = new Text(data.buttonText).toString();\n    this.endpoint = new NavigationEndpoint(data.clickCommand);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicResponsiveListItemFixedColumn extends YTNode {\n  static type = 'musicResponsiveListItemFlexColumnRenderer';\n\n  title: Text;\n  display_priority: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.text);\n    this.display_priority = data.displayPriority;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicResponsiveListItemFlexColumn extends YTNode {\n  static type = 'MusicResponsiveListItemFlexColumn';\n\n  title: Text;\n  display_priority: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.text);\n    this.display_priority = data.displayPriority;\n  }\n}", "// TODO: Clean up and refactor this.\n\nimport { YTNode } from '../helpers.js';\nimport { isTextRun, timeToSeconds } from '../../utils/Utils.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport type TextRun from './misc/TextRun.js';\n\nimport { Parser } from '../index.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport MusicResponsiveListItemFixedColumn from './MusicResponsiveListItemFixedColumn.js';\nimport MusicResponsiveListItemFlexColumn from './MusicResponsiveListItemFlexColumn.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\ninterface PlaylistItemData {\n  video_id: string;\n  playlist_set_video_id: string;\n}\n\nexport default class MusicResponsiveListItem extends YTNode {\n  static type = 'MusicResponsiveListItem';\n\n  flex_columns: ObservedArray<MusicResponsiveListItemFlexColumn>;\n  fixed_columns: ObservedArray<MusicResponsiveListItemFixedColumn>;\n\n  endpoint?: NavigationEndpoint;\n  item_type: 'album' | 'playlist' | 'artist' | 'library_artist' | 'non_music_track' | 'video' | 'song' | 'endpoint' | 'unknown' | 'podcast_show' | undefined;\n  index?: Text;\n  thumbnail?: MusicThumbnail | null;\n  badges;\n  menu?: Menu | null;\n  overlay?: MusicItemThumbnailOverlay | null;\n\n  id?: string;\n  title?: string;\n  duration?: {\n    text: string;\n    seconds: number;\n  };\n\n  album?: {\n    id?: string,\n    name: string,\n    endpoint?: NavigationEndpoint\n  };\n\n  artists?: {\n    name: string,\n    channel_id?: string,\n    endpoint?: NavigationEndpoint\n  }[];\n\n  views?: string;\n  authors?: {\n    name: string,\n    channel_id?: string\n    endpoint?: NavigationEndpoint\n  }[];\n\n  name?: string;\n  subtitle?: Text;\n  subscribers?: string;\n  song_count?: string;\n\n  // TODO: these might be replaceable with Author class\n  author?: {\n    name: string,\n    channel_id?: string\n    endpoint?: NavigationEndpoint\n  };\n  item_count?: string;\n  year?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.flex_columns = Parser.parseArray(data.flexColumns, MusicResponsiveListItemFlexColumn);\n    this.fixed_columns = Parser.parseArray(data.fixedColumns, MusicResponsiveListItemFixedColumn);\n\n    const playlist_item_data: PlaylistItemData = {\n      video_id: data?.playlistItemData?.videoId || null,\n      playlist_set_video_id: data?.playlistItemData?.playlistSetVideoId || null\n    };\n\n    if (Reflect.has(data, 'navigationEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    }\n\n    let page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;\n\n    if (!page_type) {\n      const is_non_music_track = this.flex_columns.find(\n        (col) => col.title.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE'\n      );\n\n      if (is_non_music_track) {\n        page_type = 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE';\n      }\n    }\n\n    switch (page_type) {\n      case 'MUSIC_PAGE_TYPE_ALBUM':\n        this.item_type = 'album';\n        this.#parseAlbum();\n        break;\n      case 'MUSIC_PAGE_TYPE_PLAYLIST':\n        this.item_type = 'playlist';\n        this.#parsePlaylist();\n        break;\n      case 'MUSIC_PAGE_TYPE_ARTIST':\n      case 'MUSIC_PAGE_TYPE_USER_CHANNEL':\n        this.item_type = 'artist';\n        this.#parseArtist();\n        break;\n      case 'MUSIC_PAGE_TYPE_LIBRARY_ARTIST':\n        this.item_type = 'library_artist';\n        this.#parseLibraryArtist();\n        break;\n      case 'MUSIC_PAGE_TYPE_NON_MUSIC_AUDIO_TRACK_PAGE':\n        this.item_type = 'non_music_track';\n        this.#parseNonMusicTrack(playlist_item_data);\n        break;\n      case 'MUSIC_PAGE_TYPE_PODCAST_SHOW_DETAIL_PAGE':\n        this.item_type = 'podcast_show';\n        this.#parsePodcastShow();\n        break;\n      default:\n        if (this.flex_columns[1]) {\n          this.#parseVideoOrSong(playlist_item_data);\n        } else {\n          this.#parseOther();\n        }\n    }\n\n    if (Reflect.has(data, 'index')) {\n      this.index = new Text(data.index);\n    }\n\n    if (Reflect.has(data, 'thumbnail')) {\n      this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    }\n\n    if (Reflect.has(data, 'badges')) {\n      this.badges = Parser.parseArray(data.badges);\n    }\n\n    if (Reflect.has(data, 'menu')) {\n      this.menu = Parser.parseItem(data.menu, Menu);\n    }\n\n    if (Reflect.has(data, 'overlay')) {\n      this.overlay = Parser.parseItem(data.overlay, MusicItemThumbnailOverlay);\n    }\n  }\n\n  #parseOther() {\n    this.title = this.flex_columns[0].title.toString();\n\n    if (this.endpoint) {\n      this.item_type = 'endpoint';\n    } else {\n      this.item_type = 'unknown';\n    }\n  }\n\n  #parseVideoOrSong(playlist_item_data: PlaylistItemData) {\n    const music_video_type = (this.flex_columns.at(0)?.title.runs?.at(0) as TextRun)?.endpoint?.payload?.watchEndpointMusicSupportedConfigs?.watchEndpointMusicConfig?.musicVideoType;\n    switch (music_video_type) {\n      case 'MUSIC_VIDEO_TYPE_UGC':\n      case 'MUSIC_VIDEO_TYPE_OMV':\n        this.item_type = 'video';\n        this.#parseVideo(playlist_item_data);\n        break;\n      case 'MUSIC_VIDEO_TYPE_ATV':\n        this.item_type = 'song';\n        this.#parseSong(playlist_item_data);\n        break;\n      default:\n        this.#parseOther();\n    }\n  }\n\n  #parseSong(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const duration_text = this.flex_columns.at(1)?.title.runs?.find(\n      (run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text || this.fixed_columns[0]?.title?.toString();\n\n    if (duration_text) {\n      this.duration = {\n        text: duration_text,\n        seconds: timeToSeconds(duration_text)\n      };\n    }\n\n    const album_run =\n      this.flex_columns.at(1)?.title.runs?.find(\n        (run) =>\n          (isTextRun(run) && run.endpoint) &&\n          run.endpoint.payload.browseId.startsWith('MPR')\n      ) ||\n      this.flex_columns.at(2)?.title.runs?.find(\n        (run) =>\n          (isTextRun(run) && run.endpoint) &&\n          run.endpoint.payload.browseId.startsWith('MPR')\n      );\n\n    if (album_run && isTextRun(album_run)) {\n      this.album = {\n        id: album_run.endpoint?.payload?.browseId,\n        name: album_run.text,\n        endpoint: album_run.endpoint\n      };\n    }\n\n    const artist_runs = this.flex_columns.at(1)?.title.runs?.filter(\n      (run) => (isTextRun(run) && run.endpoint) && run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (artist_runs) {\n      this.artists = artist_runs.map((run) => ({\n        name: run.text,\n        channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : undefined,\n        endpoint: isTextRun(run) ? run.endpoint : undefined\n      }));\n    }\n  }\n\n  #parseVideo(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id;\n    this.title = this.flex_columns[0].title.toString();\n    this.views = this.flex_columns.at(1)?.title.runs?.find((run) => run.text.match(/(.*?) views/))?.toString();\n\n    const author_runs = this.flex_columns.at(1)?.title.runs?.filter(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_runs) {\n      this.authors = author_runs.map((run) => {\n        return {\n          name: run.text,\n          channel_id: isTextRun(run) ? run.endpoint?.payload?.browseId : undefined,\n          endpoint: isTextRun(run) ? run.endpoint : undefined\n        };\n      });\n    }\n\n    const duration_text = this.flex_columns[1].title.runs?.find(\n      (run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text || this.fixed_columns[0]?.title.runs?.find((run) => (/^\\d+$/).test(run.text.replace(/:/g, '')))?.text;\n\n    if (duration_text) {\n      this.duration = {\n        text: duration_text,\n        seconds: timeToSeconds(duration_text)\n      };\n    }\n  }\n\n  #parseArtist() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.name = this.flex_columns[0].title.toString();\n    this.subtitle = this.flex_columns.at(1)?.title;\n    this.subscribers = this.subtitle?.runs?.find((run) => (/^(\\d*\\.)?\\d+[M|K]? subscribers?$/i).test(run.text))?.text || '';\n  }\n\n  #parseLibraryArtist() {\n    this.name = this.flex_columns[0].title.toString();\n    this.subtitle = this.flex_columns.at(1)?.title;\n    this.song_count = this.subtitle?.runs?.find((run) => (/^\\d+(,\\d+)? songs?$/i).test(run.text))?.text || '';\n  }\n\n  #parseNonMusicTrack(playlist_item_data: PlaylistItemData) {\n    this.id = playlist_item_data.video_id || this.endpoint?.payload?.videoId;\n    this.title = this.flex_columns[0].title.toString();\n  }\n\n  #parsePodcastShow() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n  }\n\n  #parseAlbum() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const author_run = this.flex_columns.at(1)?.title.runs?.find(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_run && isTextRun(author_run)) {\n      this.author = {\n        name: author_run.text,\n        channel_id: author_run.endpoint?.payload?.browseId,\n        endpoint: author_run.endpoint\n      };\n    }\n\n    this.year = this.flex_columns.at(1)?.title.runs?.find(\n      (run) => (/^[12][0-9]{3}$/).test(run.text)\n    )?.text;\n  }\n\n  #parsePlaylist() {\n    this.id = this.endpoint?.payload?.browseId;\n    this.title = this.flex_columns[0].title.toString();\n\n    const item_count_run = this.flex_columns.at(1)?.title\n      .runs?.find((run) => run.text.match(/\\d+ (song|songs)/));\n\n    this.item_count = item_count_run ? item_count_run.text : undefined;\n\n    const author_run = this.flex_columns.at(1)?.title.runs?.find(\n      (run) =>\n        (isTextRun(run) && run.endpoint) &&\n        run.endpoint.payload.browseId.startsWith('UC')\n    );\n\n    if (author_run && isTextRun(author_run)) {\n      this.author = {\n        name: author_run.text,\n        channel_id: author_run.endpoint?.payload?.browseId,\n        endpoint: author_run.endpoint\n      };\n    }\n  }\n\n  get thumbnails() {\n    return this.thumbnail?.contents || [];\n  }\n}", "// TODO: Refactor this.\n\nimport { YTNode, type SuperParsedResult } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicItemThumbnailOverlay from './MusicItemThumbnailOverlay.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicTwoRowItem extends YTNode {\n  static type = 'MusicTwoRowItem';\n\n  title: Text;\n  endpoint: NavigationEndpoint;\n  id: string | undefined;\n  subtitle: Text;\n  badges: SuperParsedResult<YTNode> | null;\n  item_type: string;\n  subscribers?: string;\n  item_count?: string | null;\n  year?: string;\n  views?: string;\n\n  artists?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  }[];\n\n  author?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  };\n\n  thumbnail: Thumbnail[];\n  thumbnail_overlay: MusicItemThumbnailOverlay | null;\n  menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.id =\n      this.endpoint?.payload?.browseId ||\n      this.endpoint?.payload?.videoId;\n\n    this.subtitle = new Text(data.subtitle);\n    this.badges = Parser.parse(data.subtitleBadges);\n\n    const page_type = this.endpoint?.payload?.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType;\n\n    switch (page_type) {\n      case 'MUSIC_PAGE_TYPE_ARTIST':\n        this.item_type = 'artist';\n        break;\n      case 'MUSIC_PAGE_TYPE_PLAYLIST':\n        this.item_type = 'playlist';\n        break;\n      case 'MUSIC_PAGE_TYPE_ALBUM':\n        this.item_type = 'album';\n        break;\n      default:\n        if (this.endpoint?.metadata?.api_url === '/next') {\n          this.item_type = 'endpoint';\n        } else if (this.subtitle.runs?.[0]) {\n          if (this.subtitle.runs[0].text !== 'Song') {\n            this.item_type = 'video';\n          } else {\n            this.item_type = 'song';\n          }\n        } else if (this.endpoint) {\n          this.item_type = 'endpoint';\n        } else {\n          this.item_type = 'unknown';\n        }\n        break;\n    }\n\n    if (this.item_type == 'artist') {\n      this.subscribers = this.subtitle.runs?.find((run) => (/^(\\d*\\.)?\\d+[M|K]? subscribers?$/i).test(run.text))?.text || '';\n    } else if (this.item_type == 'playlist') {\n      const item_count_run = this.subtitle.runs?.find((run) => run.text.match(/\\d+ songs|song/));\n      this.item_count = item_count_run ? (item_count_run as TextRun).text : null;\n    } else if (this.item_type == 'album') {\n      const artists = this.subtitle.runs?.filter((run: any) => run.endpoint?.payload?.browseId.startsWith('UC'));\n      if (artists) {\n        this.artists = artists.map((artist: any) => ({\n          name: artist.text,\n          channel_id: artist.endpoint?.payload?.browseId,\n          endpoint: artist.endpoint\n        }));\n      }\n      this.year = this.subtitle.runs?.slice(-1)[0].text;\n      if (isNaN(Number(this.year)))\n        delete this.year;\n    } else if (this.item_type == 'video') {\n      this.views = this?.subtitle.runs?.find((run) => run?.text.match(/(.*?) views/))?.text || 'N/A';\n\n      const author = this.subtitle.runs?.find((run: any) => run.endpoint?.payload?.browseId?.startsWith('UC'));\n      if (author) {\n        this.author = {\n          name: (author as TextRun)?.text,\n          channel_id: (author as TextRun)?.endpoint?.payload?.browseId,\n          endpoint: (author as TextRun)?.endpoint\n        };\n      }\n    } else if (this.item_type == 'song') {\n      const artists = this.subtitle.runs?.filter((run: any) => run.endpoint?.payload?.browseId.startsWith('UC'));\n      if (artists) {\n        this.artists = artists.map((artist: any) => ({\n          name: (artist as TextRun)?.text,\n          channel_id: (artist as TextRun)?.endpoint?.payload?.browseId,\n          endpoint: (artist as TextRun)?.endpoint\n        }));\n      }\n    }\n\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnailRenderer.musicThumbnailRenderer.thumbnail);\n    this.thumbnail_overlay = Parser.parseItem(data.thumbnailOverlay, MusicItemThumbnailOverlay);\n    this.menu = Parser.parseItem(data.menu, Menu);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport MusicCarouselShelfBasicHeader from './MusicCarouselShelfBasicHeader.js';\nimport MusicMultiRowListItem from './MusicMultiRowListItem.js';\nimport MusicNavigationButton from './MusicNavigationButton.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport MusicTwoRowItem from './MusicTwoRowItem.js';\n\nexport default class MusicCarouselShelf extends YTNode {\n  static type = 'MusicCarouselShelf';\n\n  header: MusicCarouselShelfBasicHeader | null;\n  contents: ObservedArray<MusicTwoRowItem | MusicResponsiveListItem | MusicMultiRowListItem | MusicNavigationButton>;\n  num_items_per_column?: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header, MusicCarouselShelfBasicHeader);\n    this.contents = Parser.parseArray(data.contents, [ MusicTwoRowItem, MusicResponsiveListItem, MusicMultiRowListItem, MusicNavigationButton ]);\n\n    if (Reflect.has(data, 'numItemsPerColumn')) {\n      this.num_items_per_column = parseInt(data.numItemsPerColumn);\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicDescriptionShelf extends YTNode {\n  static type = 'MusicDescriptionShelf';\n\n  description: Text;\n  max_collapsed_lines?: string;\n  max_expanded_lines?: string;\n  footer: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.description = new Text(data.description);\n\n    if (Reflect.has(data, 'maxCollapsedLines')) {\n      this.max_collapsed_lines = data.maxCollapsedLines;\n    }\n\n    if (Reflect.has(data, 'maxExpandedLines')) {\n      this.max_expanded_lines = data.maxExpandedLines;\n    }\n\n    this.footer = new Text(data.footer);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport type NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicDetailHeader extends YTNode {\n  static type = 'MusicDetailHeader';\n\n  title: Text;\n  description: Text;\n  subtitle: Text;\n  second_subtitle: Text;\n  year: string;\n  song_count: string;\n  total_duration: string;\n  thumbnails: Thumbnail[];\n  badges: ObservedArray<YTNode>;\n  author?: {\n    name: string;\n    channel_id: string | undefined;\n    endpoint: NavigationEndpoint | undefined;\n  };\n  menu: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.subtitle = new Text(data.subtitle);\n    this.second_subtitle = new Text(data.secondSubtitle);\n    this.year = this.subtitle.runs?.find((run) => (/^[12][0-9]{3}$/).test(run.text))?.text || '';\n    this.song_count = this.second_subtitle.runs?.[0]?.text || '';\n    this.total_duration = this.second_subtitle.runs?.[2]?.text || '';\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail.croppedSquareThumbnailRenderer.thumbnail);\n    this.badges = Parser.parseArray(data.subtitleBadges);\n\n    const author = this.subtitle.runs?.find((run) => (run as TextRun)?.endpoint?.payload?.browseId.startsWith('UC'));\n\n    if (author) {\n      this.author = {\n        name: (author as TextRun).text,\n        channel_id: (author as TextRun).endpoint?.payload?.browseId,\n        endpoint: (author as TextRun).endpoint\n      };\n    }\n\n    this.menu = Parser.parseItem(data.menu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicDownloadStateBadge extends YTNode {\n  static type = 'MusicDownloadStateBadge';\n\n  playlist_id: string;\n  supported_download_states: string[];\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_id = data.playlistId;\n    this.supported_download_states = data.supportedDownloadStates;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicEditablePlaylistDetailHeader extends YTNode {\n  static type = 'MusicEditablePlaylistDetailHeader';\n\n  header: YTNode;\n  edit_header: YTNode;\n  playlist_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.edit_header = Parser.parseItem(data.editHeader);\n    this.playlist_id = data.playlistId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Element from './Element.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicElementHeader extends YTNode {\n  static type = 'MusicElementHeader';\n\n  element: Element | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.element = Reflect.has(data, 'elementRenderer') ? Parser.parseItem(data, Element) : null;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicHeader extends YTNode {\n  static type = 'MusicHeader';\n\n  header?: YTNode;\n  title?: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'header')) {\n      this.header = Parser.parseItem(data.header);\n    }\n\n    if (Reflect.has(data, 'title')) {\n      this.title = new Text(data.title);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport Button from './Button.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport ToggleButton from './ToggleButton.js';\n\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicImmersiveHeader extends YTNode {\n  static type = 'MusicImmersiveHeader';\n\n  public title: Text;\n  public menu: Menu | null;\n  public more_button: ToggleButton | null;\n  public play_button: Button | null;\n  public share_endpoint?: NavigationEndpoint;\n  public start_radio_button: Button | null;\n  public subscription_button: SubscribeButton | null;\n  public description: Text;\n  public thumbnail: MusicThumbnail | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.more_button = Parser.parseItem(data.moreButton, ToggleButton);\n    this.play_button = Parser.parseItem(data.playButton, Button);\n\n    if ('shareEndpoint' in data)\n      this.share_endpoint = new NavigationEndpoint(data.shareEndpoint);\n    \n    this.start_radio_button = Parser.parseItem(data.startRadioButton, Button);\n    this.subscription_button = Parser.parseItem(data.subscriptionButton, SubscribeButton);\n    this.description = new Text(data.description);\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nclass ActionButton {\n  static type = 'ActionButton';\n\n  icon_name: string;\n  endpoint: NavigationEndpoint;\n  a11y_text: string;\n  style: string;\n\n  constructor(data: RawNode) {\n    this.icon_name = data.iconName;\n    this.endpoint = new NavigationEndpoint(data.onTap);\n    this.a11y_text = data.a11yText;\n    this.style = data.style;\n  }\n}\n\nclass Panel {\n  static type = 'Panel';\n\n  image: Thumbnail[];\n\n  content_mode: string;\n  crop_options: string;\n  image_aspect_ratio: string;\n  caption: string;\n  action_buttons: ActionButton[];\n\n  constructor (data: RawNode) {\n    this.image = Thumbnail.fromResponse(data.image.image);\n    this.content_mode = data.image.contentMode;\n    this.crop_options = data.image.cropOptions;\n    this.image_aspect_ratio = data.imageAspectRatio;\n    this.caption = data.caption;\n    this.action_buttons = data.actionButtons.map((el: RawNode) => new ActionButton(el));\n  }\n}\n\nexport default class MusicLargeCardItemCarousel extends YTNode {\n  static type = 'MusicLargeCardItemCarousel';\n\n  panels: Panel[];\n  header;\n\n  constructor(data: RawNode) {\n    super();\n    // TODO: check this\n    this.header = data.shelf.header;\n    this.panels = data.shelf.panels.map((el: RawNode) => new Panel(el));\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Dropdown from './Dropdown.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicPlaylistEditHeader extends YTNode {\n  static type = 'MusicPlaylistEditHeader';\n\n  title: Text;\n  edit_title: Text;\n  edit_description: Text;\n  privacy: string;\n  playlist_id: string;\n  endpoint: NavigationEndpoint;\n  privacy_dropdown: Dropdown | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.edit_title = new Text(data.editTitle);\n    this.edit_description = new Text(data.editDescription);\n    this.privacy = data.privacy;\n    this.playlist_id = data.playlistId;\n    this.endpoint = new NavigationEndpoint(data.collaborationSettingsCommand);\n    this.privacy_dropdown = Parser.parseItem(data.privacyDropdown, Dropdown);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport ContinuationItem from './ContinuationItem.js';\n\nexport default class MusicPlaylistShelf extends YTNode {\n  static type = 'MusicPlaylistShelf';\n\n  public playlist_id: string;\n  public contents: ObservedArray<MusicResponsiveListItem | ContinuationItem>;\n  public collapsed_item_count: number;\n  public continuation: string | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.playlist_id = data.playlistId;\n    this.contents = Parser.parseArray(data.contents, [ MusicResponsiveListItem, ContinuationItem ]);\n    this.collapsed_item_count = data.collapsedItemCount;\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation || null;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport type TextRun from './misc/TextRun.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistPanelVideo extends YTNode {\n  static type = 'PlaylistPanelVideo';\n\n  title: Text;\n  thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  selected: boolean;\n  video_id: string;\n\n  duration: {\n    text: string;\n    seconds: number\n  };\n\n  author: string;\n\n  album?: {\n    id?: string;\n    name: string;\n    year?: string;\n    endpoint?: NavigationEndpoint;\n  };\n\n  artists?: {\n    name: string;\n    channel_id?: string;\n    endpoint?: NavigationEndpoint;\n  }[];\n\n  badges: ObservedArray<YTNode>;\n  menu: YTNode;\n  set_video_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title);\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.selected = data.selected;\n    this.video_id = data.videoId;\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: timeToSeconds(new Text(data.lengthText).toString())\n    };\n\n    const album = new Text(data.longBylineText).runs?.find((run: any) => run.endpoint?.payload?.browseId?.startsWith('MPR'));\n    const artists = new Text(data.longBylineText).runs?.filter((run: any) => run.endpoint?.payload?.browseId?.startsWith('UC'));\n\n    this.author = new Text(data.shortBylineText).toString();\n\n    if (album) {\n      this.album = {\n        id: (album as TextRun).endpoint?.payload?.browseId,\n        name: (album as TextRun).text,\n        year: new Text(data.longBylineText).runs?.slice(-1)[0].text,\n        endpoint: (album as TextRun).endpoint\n      };\n    }\n\n    if (artists) {\n      this.artists = artists.map((artist) => ({\n        name: (artist as TextRun).text,\n        channel_id: (artist as TextRun).endpoint?.payload?.browseId,\n        endpoint: (artist as TextRun).endpoint\n      }));\n    }\n\n    this.badges = Parser.parseArray(data.badges);\n    this.menu = Parser.parseItem(data.menu);\n    this.set_video_id = data.playlistSetVideoId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode, observe } from '../helpers.js';\nimport PlaylistPanelVideo from './PlaylistPanelVideo.js';\n\nexport default class PlaylistPanelVideoWrapper extends YTNode {\n  static type = 'PlaylistPanelVideoWrapper';\n\n  primary: PlaylistPanelVideo | null;\n  counterpart?: ObservedArray<PlaylistPanelVideo>;\n\n  constructor(data: RawNode) {\n    super();\n    this.primary = Parser.parseItem(data.primaryRenderer, PlaylistPanelVideo);\n\n    if (Reflect.has(data, 'counterpart')) {\n      this.counterpart = observe(data.counterpart.map((item: RawNode) => Parser.parseItem(item.counterpartRenderer, PlaylistPanelVideo)) || []);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport AutomixPreviewVideo from './AutomixPreviewVideo.js';\nimport PlaylistPanelVideo from './PlaylistPanelVideo.js';\nimport PlaylistPanelVideoWrapper from './PlaylistPanelVideoWrapper.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistPanel extends YTNode {\n  static type = 'PlaylistPanel';\n\n  title: string;\n  title_text: Text;\n  contents: ObservedArray<PlaylistPanelVideoWrapper | PlaylistPanelVideo | AutomixPreviewVideo>;\n  playlist_id: string;\n  is_infinite: boolean;\n  continuation: string;\n  is_editable: boolean;\n  preview_description: string;\n  num_items_to_show: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.title_text = new Text(data.titleText);\n    this.contents = Parser.parseArray(data.contents, [ PlaylistPanelVideoWrapper, PlaylistPanelVideo, AutomixPreviewVideo ]);\n    this.playlist_id = data.playlistId;\n    this.is_infinite = data.isInfinite;\n    this.continuation = data.continuations?.[0]?.nextRadioContinuationData?.continuation || data.continuations?.[0]?.nextContinuationData?.continuation;\n    this.is_editable = data.isEditable;\n    this.preview_description = data.previewDescription;\n    this.num_items_to_show = data.numItemsToShow;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport PlaylistPanel from './PlaylistPanel.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class MusicQueue extends YTNode {\n  static type = 'MusicQueue';\n\n  content: PlaylistPanel | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content, PlaylistPanel);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport MusicThumbnail from './MusicThumbnail.js';\nimport MusicDescriptionShelf from './MusicDescriptionShelf.js';\nimport MusicInlineBadge from './MusicInlineBadge.js';\nimport MusicPlayButton from './MusicPlayButton.js';\nimport ToggleButton from './ToggleButton.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport DownloadButton from './DownloadButton.js';\n\nimport type { ObservedArray } from '../helpers.js';\n\nexport default class MusicResponsiveHeader extends YTNode {\n  static type = 'MusicResponsiveHeader';\n\n  thumbnail: MusicThumbnail | null;\n  buttons: ObservedArray<DownloadButton | ToggleButton | MusicPlayButton | Button | Menu>;\n  title: Text;\n  subtitle: Text;\n  strapline_text_one: Text;\n  strapline_thumbnail: MusicThumbnail | null;\n  second_subtitle: Text;\n  subtitle_badge?: ObservedArray<MusicInlineBadge> | null;\n  description?: MusicDescriptionShelf | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicThumbnail);\n    this.buttons = Parser.parseArray(data.buttons, [ DownloadButton, ToggleButton, MusicPlayButton, Button, Menu ]);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.strapline_text_one = new Text(data.straplineTextOne);\n    this.strapline_thumbnail = Parser.parseItem(data.straplineThumbnail, MusicThumbnail);\n    this.second_subtitle = new Text(data.secondSubtitle);\n\n    if (Reflect.has(data, 'subtitleBadge')) {\n      this.subtitle_badge = Parser.parseArray(data.subtitleBadge, MusicInlineBadge);\n    }\n\n    if (Reflect.has(data, 'description')) {\n      this.description = Parser.parseItem(data.description, MusicDescriptionShelf);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport MusicResponsiveListItem from './MusicResponsiveListItem.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicShelf extends YTNode {\n  static type = 'MusicShelf';\n\n  title: Text;\n  contents: ObservedArray<MusicResponsiveListItem>;\n  endpoint?: NavigationEndpoint;\n  continuation?: string;\n  bottom_text?: Text;\n  bottom_button?: Button | null;\n  subheaders?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = Parser.parseArray(data.contents, MusicResponsiveListItem);\n\n    if (Reflect.has(data, 'bottomEndpoint')) {\n      this.endpoint = new NavigationEndpoint(data.bottomEndpoint);\n    }\n\n    if (Reflect.has(data, 'continuations')) {\n      this.continuation =\n        data.continuations?.[0].nextContinuationData?.continuation ||\n        data.continuations?.[0].reloadContinuationData?.continuation;\n    }\n\n    if (Reflect.has(data, 'bottomText')) {\n      this.bottom_text = new Text(data.bottomText);\n    }\n\n    if (Reflect.has(data, 'bottomButton')) {\n      this.bottom_button = Parser.parseItem(data.bottomButton, Button);\n    }\n\n    if (Reflect.has(data, 'subheaders')) {\n      this.subheaders = Parser.parseArray(data.subheaders);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class MusicSideAlignedItem extends YTNode {\n  static type = 'MusicSideAlignedItem';\n\n  start_items?: ObservedArray<YTNode>;\n  end_items?: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'startItems')) {\n      this.start_items = Parser.parseArray(data.startItems);\n    }\n\n    if (Reflect.has(data, 'endItems')) {\n      this.end_items = Parser.parseArray(data.endItems);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport MusicMultiSelectMenu from './menus/MusicMultiSelectMenu.js';\nimport Text from './misc/Text.js';\n\nexport default class MusicSortFilterButton extends YTNode {\n  static type = 'MusicSortFilterButton';\n\n  title: string;\n  icon_type?: string;\n  menu: MusicMultiSelectMenu | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.title = new Text(data.title).toString();\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    this.menu = Parser.parseItem(data.menu, MusicMultiSelectMenu);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Thumbnail } from '../misc.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicTastebuilderShelfThumbnail extends YTNode {\n  static type = 'MusicTastebuilderShelfThumbnail';\n\n  thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { Parser } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport MusicTastebuilderShelfThumbnail from './MusicTastebuilderShelfThumbnail.js';\n\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class MusicTasteBuilderShelf extends YTNode {\n  static type = 'MusicTasteBuilderShelf';\n\n  thumbnail: MusicTastebuilderShelfThumbnail | null;\n  primary_text: Text;\n  secondary_text: Text;\n  action_button: Button | null;\n  is_visible: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Parser.parseItem(data.thumbnail, MusicTastebuilderShelfThumbnail);\n    this.primary_text = new Text(data.primaryText);\n    this.secondary_text = new Text(data.secondaryText);\n    this.action_button = Parser.parseItem(data.actionButton, Button);\n    this.is_visible = data.isVisible;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Menu from './menus/Menu.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class MusicVisualHeader extends YTNode {\n  static type = 'MusicVisualHeader';\n\n  title: Text;\n  thumbnail: Thumbnail[];\n  menu: Menu | null;\n  foreground_thumbnail: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnail = data.thumbnail ? Thumbnail.fromResponse(data.thumbnail.musicThumbnailRenderer?.thumbnail) : [];\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.foreground_thumbnail = data.foregroundThumbnail ? Thumbnail.fromResponse(data.foregroundThumbnail.musicThumbnailRenderer?.thumbnail) : [];\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport Text from '../misc/Text.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class MobileTopbar extends YTNode {\n  static type = 'MobileTopbar';\n\n  public placeholder_text: Text;\n  public buttons;\n  public logo_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.placeholder_text = new Text(data.placeholderText);\n    this.buttons = Parser.parseArray(data.buttons);\n\n    if (Reflect.has(data, 'logo') && Reflect.has(data.logo, 'iconType'))\n      this.logo_type = data.logo.iconType;\n  }\n}", "import type { ObservedArray } from '../../helpers.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class MultiPageMenuSection extends YTNode {\n  static type = 'MultiPageMenuSection';\n\n  public items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class PivotBar extends YTNode {\n  static type = 'PivotBar';\n\n  public items;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { type RawNode } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from '../misc/AccessibilityData.js';\n\nexport default class PivotBarItem extends YTNode {\n  static type = 'PivotBarItem';\n\n  public pivot_identifier: string;\n  public endpoint: NavigationEndpoint;\n  public title: Text;\n  public accessibility_label?: string;\n  public icon_type?: string;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.pivot_identifier = data.pivotIdentifier;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.title = new Text(data.title);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n    \n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n  }\n  \n  get label() {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\n\nexport default class TopbarMenuButton extends YTNode {\n  static type = 'TopbarMenuButton';\n\n  public icon_type?: string;\n  public menu_renderer: YTNode | null;\n  public target_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon') && Reflect.has(data.icon, 'iconType'))\n      this.icon_type = data.icon.iconType;\n    this.menu_renderer = Parser.parseItem(data.menuRenderer);\n    this.target_id = data.targetId;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class NotificationAction extends YTNode {\n  static type = 'NotificationAction';\n\n  public response_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.response_text = new Text(data.responseText);\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class OpenOnePickAddVideoModalCommand extends YTNode {\n  static type = 'OpenOnePickAddVideoModalCommand';\n\n  list_id: string;\n  modal_title: string;\n  select_button_label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.list_id = data.listId;\n    this.modal_title = data.modalTitle;\n    this.select_button_label = data.selectButtonLabel;\n  }\n}\n", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ContentMetadataView from './ContentMetadataView.js';\nimport ContentPreviewImageView from './ContentPreviewImageView.js';\nimport DecoratedAvatarView from './DecoratedAvatarView.js';\nimport DynamicTextView from './DynamicTextView.js';\nimport FlexibleActionsView from './FlexibleActionsView.js';\nimport DescriptionPreviewView from './DescriptionPreviewView.js';\nimport AttributionView from './AttributionView.js';\nimport ImageBannerView from './ImageBannerView.js';\n\nexport default class PageHeaderView extends YTNode {\n  static type = 'PageHeaderView';\n\n  title: DynamicTextView | null;\n  image: ContentPreviewImageView | DecoratedAvatarView | null;\n  animated_image: ContentPreviewImageView | null;\n  hero_image: ContentPreviewImageView | null;\n  metadata: ContentMetadataView | null;\n  actions: FlexibleActionsView | null;\n  description: DescriptionPreviewView | null;\n  attributation: AttributionView | null;\n  banner: ImageBannerView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Parser.parseItem(data.title, DynamicTextView);\n    this.image = Parser.parseItem(data.image, [ ContentPreviewImageView, DecoratedAvatarView ]);\n    this.animated_image = Parser.parseItem(data.animatedImage, ContentPreviewImageView);\n    this.hero_image = Parser.parseItem(data.heroImage, ContentPreviewImageView);\n    this.metadata = Parser.parseItem(data.metadata, ContentMetadataView);\n    this.actions = Parser.parseItem(data.actions, FlexibleActionsView);\n    this.description = Parser.parseItem(data.description, DescriptionPreviewView);\n    this.attributation = Parser.parseItem(data.attributation, AttributionView);\n    this.banner = Parser.parseItem(data.banner, ImageBannerView);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PageHeaderView from './PageHeaderView.js';\n\nexport default class PageHeader extends YTNode {\n  static type = 'PageHeader';\n\n  page_title: string;\n  content: PageHeaderView | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.page_title = data.pageTitle;\n    this.content = Parser.parseItem(data.content, PageHeaderView);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PageIntroduction extends YTNode {\n  static type = 'PageIntroduction';\n\n  header_text: string;\n  body_text: string;\n  page_title: string;\n  header_icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.header_text = new Text(data.headerText).toString();\n    this.body_text = new Text(data.bodyText).toString();\n    this.page_title = new Text(data.pageTitle).toString();\n    this.header_icon_type = data.headerIcon.iconType;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class PivotButton extends YTNode {\n  static type = 'PivotButton';\n\n  thumbnail: Thumbnail[];\n  endpoint: NavigationEndpoint;\n  content_description: Text;\n  target_id: string;\n  sound_attribution_title: Text;\n  waveform_animation_style: string;\n  background_animation_style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.content_description = new Text(data.contentDescription);\n    this.target_id = data.targetId;\n    this.sound_attribution_title = new Text(data.soundAttributionTitle);\n    this.waveform_animation_style = data.waveformAnimationStyle;\n    this.background_animation_style = data.backgroundAnimationStyle;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class PlayerAnnotationsExpanded extends YTNode {\n  static type = 'PlayerAnnotationsExpanded';\n\n  featured_channel?: {\n    start_time_ms: number;\n    end_time_ms: number;\n    watermark: Thumbnail[];\n    channel_name: string;\n    endpoint: NavigationEndpoint;\n    subscribe_button: YTNode | null;\n  };\n\n  allow_swipe_dismiss: boolean;\n  annotation_id: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    if (Reflect.has(data, 'featuredChannel')) {\n      this.featured_channel = {\n        start_time_ms: data.featuredChannel.startTimeMs,\n        end_time_ms: data.featuredChannel.endTimeMs,\n        watermark: Thumbnail.fromResponse(data.featuredChannel.watermark),\n        channel_name: data.featuredChannel.channelName,\n        endpoint: new NavigationEndpoint(data.featuredChannel.navigationEndpoint),\n        subscribe_button: Parser.parseItem(data.featuredChannel.subscribeButton)\n      };\n    }\n\n    this.allow_swipe_dismiss = data.allowSwipeDismiss;\n    this.annotation_id = data.annotationId;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface CaptionTrackData {\n  base_url: string;\n  name: Text;\n  vss_id: string;\n  language_code: string;\n  kind?: 'asr' | 'frc';\n  is_translatable: boolean;\n}\n\nexport default class PlayerCaptionsTracklist extends YTNode {\n  static type = 'PlayerCaptionsTracklist';\n\n  caption_tracks?: CaptionTrackData[];\n\n  audio_tracks?: {\n    audio_track_id: string;\n    captions_initial_state: string;\n    default_caption_track_index?: number;\n    has_default_track: boolean;\n    visibility: string;\n    caption_track_indices: number[];\n  }[];\n\n  default_audio_track_index?: number;\n\n  translation_languages?: {\n    language_code: string;\n    language_name: Text;\n  }[];\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'captionTracks')) {\n      this.caption_tracks = data.captionTracks.map((ct: any) => ({\n        base_url: ct.baseUrl,\n        name: new Text(ct.name),\n        vss_id: ct.vssId,\n        language_code: ct.languageCode,\n        kind: ct.kind,\n        is_translatable: ct.isTranslatable\n      }));\n    }\n\n    if (Reflect.has(data, 'audioTracks')) {\n      this.audio_tracks = data.audioTracks.map((at: any) => ({\n        audio_track_id: at.audioTrackId,\n        captions_initial_state: at.captionsInitialState,\n        default_caption_track_index: at.defaultCaptionTrackIndex,\n        has_default_track: at.hasDefaultTrack,\n        visibility: at.visibility,\n        caption_track_indices: at.captionTrackIndices\n      }));\n    }\n\n    if (Reflect.has(data, 'defaultAudioTrackIndex')) {\n      this.default_audio_track_index = data.defaultAudioTrackIndex;\n    }\n\n    if (Reflect.has(data, 'translationLanguages')) {\n      this.translation_languages = data.translationLanguages.map((tl: any) => ({\n        language_code: tl.languageCode,\n        language_name: new Text(tl.languageName)\n      }));\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class PlayerOverflow extends YTNode {\n  static type = 'PlayerOverflow';\n\n  endpoint: NavigationEndpoint;\n  enable_listen_first: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.enable_listen_first = data.enableListenFirst;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport PlayerOverflow from './PlayerOverflow.js';\n\nexport default class PlayerControlsOverlay extends YTNode {\n  static type = 'PlayerControlsOverlay';\n\n  overflow: PlayerOverflow | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.overflow = Parser.parseItem(data.overflow, PlayerOverflow);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerErrorMessage extends YTNode {\n  static type = 'PlayerErrorMessage';\n\n  subreason: Text;\n  reason: Text;\n  proceed_button: Button | null;\n  thumbnails: Thumbnail[];\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.subreason = new Text(data.subreason);\n    this.reason = new Text(data.reason);\n    this.proceed_button = Parser.parseItem(data.proceedButton, Button);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlayerLegacyDesktopYpcOffer extends YTNode {\n  static type = 'PlayerLegacyDesktopYpcOffer';\n\n  title: string;\n  thumbnail: string;\n  offer_description: string;\n  offer_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.itemTitle;\n    this.thumbnail = data.itemThumbnail;\n    this.offer_description = data.offerDescription;\n    this.offer_id = data.offerId;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { IRawResponse, RawNode } from '../index.js';\n\nexport default class YpcTrailer extends YTNode {\n  static type = 'YpcTrailer';\n\n  video_message: string;\n  player_response: IRawResponse;\n\n  constructor(data: RawNode) {\n    super();\n    this.video_message = data.fullVideoMessage;\n    this.player_response = data.unserializedPlayerResponse;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport YpcTrailer from './YpcTrailer.js';\n\nexport default class PlayerLegacyDesktopYpcTrailer extends YTNode {\n  static type = 'PlayerLegacyDesktopYpcTrailer';\n\n  video_id: string;\n  title: string;\n  thumbnail: string;\n  offer_headline: string;\n  offer_description: string;\n  offer_id: string;\n  offer_button_text: string;\n  video_message: string;\n  trailer: YpcTrailer | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.video_id = data.trailerVideoId;\n    this.title = data.itemTitle;\n    this.thumbnail = data.itemThumbnail;\n    this.offer_headline = data.offerHeadline;\n    this.offer_description = data.offerDescription;\n    this.offer_id = data.offerId;\n    this.offer_button_text = data.offerButtonText;\n    this.video_message = data.fullVideoMessage;\n    this.trailer = Parser.parseItem(data.ypcTrailer, YpcTrailer);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport interface LiveStoryboardData {\n  type: 'live',\n  template_url: string,\n  thumbnail_width: number,\n  thumbnail_height: number,\n  columns: number,\n  rows: number\n}\n\nexport default class PlayerLiveStoryboardSpec extends YTNode {\n  static type = 'PlayerLiveStoryboardSpec';\n\n  board: LiveStoryboardData;\n\n  constructor(data: RawNode) {\n    super();\n\n    const [ template_url, thumbnail_width, thumbnail_height, columns, rows ] = data.spec.split('#');\n\n    this.board = {\n      type: 'live',\n      template_url,\n      thumbnail_width: parseInt(thumbnail_width, 10),\n      thumbnail_height: parseInt(thumbnail_height, 10),\n      columns: parseInt(columns, 10),\n      rows: parseInt(rows, 10)\n    };\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerMicroformat extends YTNode {\n  static type = 'PlayerMicroformat';\n\n  title: Text;\n  description: Text;\n  thumbnails;\n\n  embed?: {\n    iframe_url: string;\n    flash_url: string;\n    flash_secure_url: string;\n    // TODO: check these\n    width: any;\n    height: any;\n  };\n\n  length_seconds: number;\n\n  channel: {\n    id: string;\n    name: string;\n    url: string;\n  };\n\n  is_family_safe: boolean;\n  is_unlisted: boolean;\n  has_ypc_metadata: boolean;\n  view_count: number;\n  category: string;\n  publish_date: string;\n  upload_date: string;\n  available_countries: string[];\n  start_timestamp: Date | null;\n  end_timestamp: Date | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.description = new Text(data.description);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n\n    if (Reflect.has(data, 'embed')) {\n      this.embed = {\n        iframe_url: data.embed.iframeUrl,\n        flash_url: data.embed.flashUrl,\n        flash_secure_url: data.embed.flashSecureUrl,\n        width: data.embed.width,\n        height: data.embed.height\n      };\n    }\n\n    this.length_seconds = parseInt(data.lengthSeconds);\n\n    this.channel = {\n      id: data.externalChannelId,\n      name: data.ownerChannelName,\n      url: data.ownerProfileUrl\n    };\n\n    this.is_family_safe = !!data.isFamilySafe;\n    this.is_unlisted = !!data.isUnlisted;\n    this.has_ypc_metadata = !!data.hasYpcMetadata;\n    this.view_count = parseInt(data.viewCount);\n    this.category = data.category;\n    this.publish_date = data.publishDate;\n    this.upload_date = data.uploadDate;\n    this.available_countries = data.availableCountries;\n    this.start_timestamp = data.liveBroadcastDetails?.startTimestamp ? new Date(data.liveBroadcastDetails.startTimestamp) : null;\n    this.end_timestamp = data.liveBroadcastDetails?.endTimestamp ? new Date(data.liveBroadcastDetails.endTimestamp) : null;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlayerOverlayAutoplay extends YTNode {\n  static type = 'PlayerOverlayAutoplay';\n\n  title: Text;\n  video_id: string;\n  video_title: Text;\n  short_view_count: Text;\n\n  // @TODO: Find out what these are.\n  prefer_immediate_redirect;\n  count_down_secs_for_fullscreen;\n\n  published: Text;\n  background: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  author: Author;\n  cancel_button: Button | null;\n  next_button: Button | null;\n  close_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.video_id = data.videoId;\n    this.video_title = new Text(data.videoTitle);\n    this.short_view_count = new Text(data.shortViewCountText);\n    this.prefer_immediate_redirect = data.preferImmediateRedirect;\n    this.count_down_secs_for_fullscreen = data.countDownSecsForFullscreen;\n    this.published = new Text(data.publishedTimeText);\n    this.background = Thumbnail.fromResponse(data.background);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.author = new Author(data.byline);\n    this.cancel_button = Parser.parseItem(data.cancelButton, Button);\n    this.next_button = Parser.parseItem(data.nextButton, Button);\n    this.close_button = Parser.parseItem(data.closeButton, Button);\n  }\n}", "import { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\n\nexport default class PlayerOverlayVideoDetails extends YTNode {\n  static type = 'PlayerOverlayVideoDetails';\n\n  public title: Text;\n  public subtitle: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport EndScreenPlaylist from './EndScreenPlaylist.js';\nimport EndScreenVideo from './EndScreenVideo.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchNextEndScreen extends YTNode {\n  static type = 'WatchNextEndScreen';\n\n  results: ObservedArray<EndScreenVideo | EndScreenPlaylist>;\n  title: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.results = Parser.parseArray(data.results, [ EndScreenVideo, EndScreenPlaylist ]);\n    this.title = new Text(data.title).toString();\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport DecoratedPlayerBar from './DecoratedPlayerBar.js';\nimport PlayerOverlayAutoplay from './PlayerOverlayAutoplay.js';\nimport PlayerOverlayVideoDetails from './PlayerOverlayVideoDetails.js';\nimport WatchNextEndScreen from './WatchNextEndScreen.js';\nimport Menu from './menus/Menu.js';\n\nexport default class PlayerOverlay extends YTNode {\n  static type = 'PlayerOverlay';\n\n  public end_screen: WatchNextEndScreen | null;\n  public autoplay: PlayerOverlayAutoplay | null;\n  public share_button: Button | null;\n  public add_to_menu: Menu | null;\n  public fullscreen_engagement: YTNode | null;\n  public actions: ObservedArray<YTNode>;\n  public browser_media_session: YTNode | null;\n  public decorated_player_bar: DecoratedPlayerBar | null;\n  public video_details: PlayerOverlayVideoDetails | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.end_screen = Parser.parseItem(data.endScreen, WatchNextEndScreen);\n    this.autoplay = Parser.parseItem(data.autoplay, PlayerOverlayAutoplay);\n    this.share_button = Parser.parseItem(data.shareButton, Button);\n    this.add_to_menu = Parser.parseItem(data.addToMenu, Menu);\n    this.fullscreen_engagement = Parser.parseItem(data.fullscreenEngagement);\n    this.actions = Parser.parseArray(data.actions);\n    this.browser_media_session = Parser.parseItem(data.browserMediaSession);\n    this.decorated_player_bar = Parser.parseItem(data.decoratedPlayerBarRenderer, DecoratedPlayerBar);\n    this.video_details = Parser.parseItem(data.videoDetails, PlayerOverlayVideoDetails);\n  }\n}", "import Text from './misc/Text.js';\nimport Author from './misc/Author.js';\nimport { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class PlaylistHeader extends YTNode {\n  static type = 'PlaylistHeader';\n\n  id: string;\n  title: Text;\n  subtitle: Text | null;\n  stats: Text[];\n  brief_stats: Text[];\n  author: Author | null;\n  description: Text;\n  num_videos: Text;\n  view_count: Text;\n  can_share: boolean;\n  can_delete: boolean;\n  is_editable: boolean;\n  privacy: string;\n  save_button: YTNode;\n  shuffle_play_button: YTNode;\n  menu: YTNode;\n  banner: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.title = new Text(data.title);\n    this.subtitle = data.subtitle ? new Text(data.subtitle) : null;\n    this.stats = data.stats.map((stat: RawNode) => new Text(stat));\n    this.brief_stats = data.briefStats.map((stat: RawNode) => new Text(stat));\n    this.author = data.ownerText || data.ownerEndpoint ? new Author({ ...data.ownerText, navigationEndpoint: data.ownerEndpoint }, data.ownerBadges, null) : null;\n    this.description = new Text(data.descriptionText);\n    this.num_videos = new Text(data.numVideosText);\n    this.view_count = new Text(data.viewCountText);\n    this.can_share = data.shareData.canShare;\n    this.can_delete = data.editableDetails.canDelete;\n    this.is_editable = data.isEditable;\n    this.privacy = data.privacy;\n    this.save_button = Parser.parseItem(data.saveButton);\n    this.shuffle_play_button = Parser.parseItem(data.shufflePlayButton);\n    this.menu = Parser.parseItem(data.moreActionsMenu);\n    this.banner = Parser.parseItem(data.playlistHeaderBanner);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistInfoCardContent extends YTNode {\n  static type = 'PlaylistInfoCardContent';\n\n  title: Text;\n  thumbnails: Thumbnail[];\n  video_count: Text;\n  channel_name: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.playlistTitle);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.video_count = new Text(data.playlistVideoCount);\n    this.channel_name = new Text(data.channelName);\n    this.endpoint = new NavigationEndpoint(data.action);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class PlaylistMetadata extends YTNode {\n  static type = 'PlaylistMetadata';\n\n  title: string;\n  description: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.description = data.description || null;\n    // XXX: Appindexing should be in microformat.\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class PlaylistSidebar extends YTNode {\n  static type = 'PlaylistSidebar';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: alias for consistency\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistSidebarPrimaryInfo extends YTNode {\n  static type = 'PlaylistSidebarPrimaryInfo';\n\n  public stats: Text[];\n  public thumbnail_renderer: YTNode;\n  public title: Text;\n  public menu: YTNode;\n  public endpoint: NavigationEndpoint;\n  public description: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.stats = data.stats.map((stat: RawNode) => new Text(stat));\n    this.thumbnail_renderer = Parser.parseItem(data.thumbnailRenderer);\n    this.title = new Text(data.title);\n    this.menu = Parser.parseItem(data.menu);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.description = new Text(data.description);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class PlaylistSidebarSecondaryInfo extends YTNode {\n  static type = 'PlaylistSidebarSecondaryInfo';\n\n  owner: YTNode;\n  button: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.owner = Parser.parseItem(data.videoOwner);\n    this.button = Parser.parseItem(data.button);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class PlaylistThumbnailOverlay extends YTNode {\n  static type = 'PlaylistThumbnailOverlay';\n\n  public icon_type?: string;\n  public text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'icon'))\n      this.icon_type = data.icon.iconType;\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport ThumbnailOverlayTimeStatus from './ThumbnailOverlayTimeStatus.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class PlaylistVideo extends YTNode {\n  static type = 'PlaylistVideo';\n\n  id: string;\n  index: Text;\n  title: Text;\n  author: Author;\n  thumbnails: Thumbnail[];\n  thumbnail_overlays: ObservedArray<YTNode>;\n  set_video_id: string | undefined;\n  endpoint: NavigationEndpoint;\n  is_playable: boolean;\n  menu: Menu | null;\n  upcoming?: Date;\n  video_info: Text;\n  accessibility_label?: string;\n  style?: string;\n\n  duration: {\n    text: string;\n    seconds: number;\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.index = new Text(data.index);\n    this.title = new Text(data.title);\n    this.author = new Author(data.shortBylineText);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.thumbnail_overlays = Parser.parseArray(data.thumbnailOverlays);\n    this.set_video_id = data?.setVideoId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.is_playable = data.isPlayable;\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.video_info = new Text(data.videoInfo);\n    this.accessibility_label = data.title.accessibility.accessibilityData.label;\n\n    if (Reflect.has(data, 'style')) {\n      this.style = data.style;\n    }\n\n    const upcoming = data.upcomingEventData && Number(`${data.upcomingEventData.startTime}000`);\n    if (upcoming) {\n      this.upcoming = new Date(upcoming);\n    }\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: parseInt(data.lengthSeconds)\n    };\n  }\n\n  get is_live(): boolean {\n    return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'LIVE';\n  }\n\n  get is_upcoming(): boolean {\n    return this.thumbnail_overlays.firstOfType(ThumbnailOverlayTimeStatus)?.style === 'UPCOMING';\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class PlaylistVideoList extends YTNode {\n  static type = 'PlaylistVideoList';\n\n  id: string;\n  is_editable: boolean;\n  can_reorder: boolean;\n  videos: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.playlistId;\n    this.is_editable = data.isEditable;\n    this.can_reorder = data.canReorder;\n    this.videos = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class Poll extends YTNode {\n  static type = 'Poll';\n\n  choices: {\n    text: Text;\n    select_endpoint: NavigationEndpoint | null;\n    deselect_endpoint: NavigationEndpoint | null;\n    vote_ratio_if_selected: number | null;\n    vote_percentage_if_selected: Text;\n    vote_ratio_if_not_selected: number | null;\n    vote_percentage_if_not_selected: Text;\n    image: Thumbnail[] | null;\n  }[];\n\n  poll_type?: string;\n  total_votes?: Text;\n  live_chat_poll_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.choices = data.choices.map((choice: RawNode) => ({\n      text: new Text(choice.text),\n      select_endpoint: choice.selectServiceEndpoint ? new NavigationEndpoint(choice.selectServiceEndpoint) : null,\n      deselect_endpoint: choice.deselectServiceEndpoint ? new NavigationEndpoint(choice.deselectServiceEndpoint) : null,\n      vote_ratio_if_selected: choice?.voteRatioIfSelected || null,\n      vote_percentage_if_selected: new Text(choice.votePercentageIfSelected),\n      vote_ratio_if_not_selected: choice?.voteRatioIfSelected || null,\n      vote_percentage_if_not_selected: new Text(choice.votePercentageIfSelected),\n      image: choice.image ? Thumbnail.fromResponse(choice.image) : null\n    }));\n\n    if (Reflect.has(data, 'type'))\n      this.poll_type = data.type;\n\n    if (Reflect.has(data, 'totalVotes'))\n      this.total_votes = new Text(data.totalVotes);\n\n    if (Reflect.has(data, 'liveChatPollId'))\n      this.live_chat_poll_id = data.liveChatPollId;\n  }\n}", "import type { RawNode } from '../index.js';\nimport BackstagePost from './BackstagePost.js';\n\nexport default class Post extends BackstagePost {\n  static type = 'Post';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport BackstageImage from './BackstageImage.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class PostMultiImage extends YTNode {\n  static type = 'PostMultiImage';\n\n  images : BackstageImage[];\n\n  constructor(data: RawNode) {\n    super();\n    this.images = Parser.parseArray(data.images, BackstageImage);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class PremiereTrailerBadge extends YTNode {\n  static type = 'PremiereTrailerBadge';\n\n  public label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\n\nexport default class ProductListHeader extends YTNode {\n  static type = 'ProductListHeader';\n\n  title: Text;\n  suppress_padding_disclaimer: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.suppress_padding_disclaimer = !!data.suppressPaddingDisclaimer;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport { Text, Thumbnail } from '../misc.js';\nimport Button from './Button.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ProductListItem extends YTNode {\n  static type = 'ProductListItem';\n\n  title: Text;\n  accessibility_title: string;\n  thumbnail: Thumbnail[];\n  price: string;\n  endpoint: NavigationEndpoint;\n  merchant_name: string;\n  stay_in_app: boolean;\n  view_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.accessibility_title = data.accessibilityTitle;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.price = data.price;\n    this.endpoint = new NavigationEndpoint(data.onClickCommand);\n    this.merchant_name = data.merchantName;\n    this.stay_in_app = !!data.stayInApp;\n    this.view_button = Parser.parseItem(data.viewButton, Button);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class ProfileColumn extends YTNode {\n  static type = 'ProfileColumn';\n\n  public items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class ProfileColumnStats extends YTNode {\n  static type = 'ProfileColumnStats';\n\n  items: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ProfileColumnStatsEntry extends YTNode {\n  static type = 'ProfileColumnStatsEntry';\n\n  label: Text;\n  value: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.value = new Text(data.value);\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ProfileColumnUserInfo extends YTNode {\n  static type = 'ProfileColumnUserInfo';\n\n  title: Text;\n  thumbnails: Thumbnail[];\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class Quiz extends YTNode {\n  static type = 'Quiz';\n\n  choices: {\n    text: Text;\n    is_correct: boolean;\n  }[];\n\n  total_votes: Text;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.choices = data.choices.map((choice: RawNode) => ({\n      text: new Text(choice.text),\n      is_correct: choice.isCorrect\n    }));\n\n    this.total_votes = new Text(data.totalVotes);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class RecognitionShelf extends YTNode {\n  static type = 'RecognitionShelf';\n\n  title: Text;\n  subtitle: Text;\n  avatars: Thumbnail[];\n  button: Button | null;\n  surface: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.avatars = data.avatars.map((avatar: RawNode) => new Thumbnail(avatar));\n    this.button = Parser.parseItem(data.button, Button);\n    this.surface = data.surface;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport AccessibilityData, { type AccessibilitySupportedDatas } from './misc/AccessibilityData.js';\n\nexport default class ReelItem extends YTNode {\n  static type = 'ReelItem';\n\n  public id: string;\n  public title: Text;\n  public thumbnails: Thumbnail[];\n  public views: Text;\n  public endpoint: NavigationEndpoint;\n  public accessibility?: AccessibilitySupportedDatas;\n\n  constructor(data: RawNode) {\n    super();\n    this.id = data.videoId;\n    this.title = new Text(data.headline);\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.views = new Text(data.viewCountText);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    if ('accessibility' in data\n      && 'accessibilityData' in data.accessibility) {\n      this.accessibility = {\n        accessibility_data: new AccessibilityData(data.accessibility.accessibilityData)\n      };\n    }\n  }\n  \n  get label() {\n    return this.accessibility?.accessibility_data?.label;\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class ReelPlayerHeader extends YTNode {\n  static type = 'ReelPlayerHeader';\n\n  reel_title_text: Text;\n  timestamp_text: Text;\n  channel_title_text: Text;\n  channel_thumbnail: Thumbnail[];\n  author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.reel_title_text = new Text(data.reelTitleText);\n    this.timestamp_text = new Text(data.timestampText);\n    this.channel_title_text = new Text(data.channelTitleText);\n    this.channel_thumbnail = Thumbnail.fromResponse(data.channelThumbnail);\n    this.author = new Author(data.channelNavigationEndpoint, undefined);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport InfoPanelContainer from './InfoPanelContainer.js';\nimport LikeButton from './LikeButton.js';\nimport ReelPlayerHeader from './ReelPlayerHeader.js';\nimport PivotButton from './PivotButton.js';\nimport SubscribeButton from './SubscribeButton.js';\n\nexport default class ReelPlayerOverlay extends YTNode {\n  static type = 'ReelPlayerOverlay';\n\n  like_button: LikeButton | null;\n  reel_player_header_supported_renderers: ReelPlayerHeader | null;\n  menu: Menu | null;\n  next_item_button: Button | null;\n  prev_item_button: Button | null;\n  subscribe_button_renderer: Button | SubscribeButton | null;\n  style: string;\n  view_comments_button: Button | null;\n  share_button: Button | null;\n  pivot_button: PivotButton | null;\n  info_panel: InfoPanelContainer | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, LikeButton);\n    this.reel_player_header_supported_renderers = Parser.parseItem(data.reelPlayerHeaderSupportedRenderers, ReelPlayerHeader);\n    this.menu = Parser.parseItem(data.menu, Menu);\n    this.next_item_button = Parser.parseItem(data.nextItemButton, Button);\n    this.prev_item_button = Parser.parseItem(data.prevItemButton, Button);\n    this.subscribe_button_renderer = Parser.parseItem(data.subscribeButtonRenderer, [ Button, SubscribeButton ]);\n    this.style = data.style;\n    this.view_comments_button = Parser.parseItem(data.viewCommentsButton, Button);\n    this.share_button = Parser.parseItem(data.shareButton, Button);\n    this.pivot_button = Parser.parseItem(data.pivotButton, PivotButton);\n    this.info_panel = Parser.parseItem(data.infoPanel, InfoPanelContainer);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class RelatedChipCloud extends YTNode {\n  static type = 'RelatedChipCloud';\n\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class RichGrid extends YTNode {\n  static type = 'RichGrid';\n\n  header: YTNode;\n  contents: ObservedArray<YTNode>;\n  target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    // (Daniel Wykerd) XXX: we don't parse the masthead since it is usually an advertisement\n    // (Daniel Wykerd) XXX: reflowOptions aren't parsed, I think its only used internally for layout\n    this.header = Parser.parseItem(data.header);\n    this.contents = Parser.parseArray(data.contents);\n\n    if (Reflect.has(data, 'targetId'))\n      this.target_id = data.targetId;\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class RichItem extends YTNode {\n  static type = 'RichItem';\n\n  content: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class RichListHeader extends YTNode {\n  static type = 'RichListHeader';\n\n  title: Text;\n  subtitle: Text;\n  title_style?: string;\n  icon_type?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n\n    if (Reflect.has(data, 'titleStyle')) {\n      this.title_style = data.titleStyle.style;\n    }\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n  }\n}", "import Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class RichMetadata extends YTNode {\n  static type = 'RichMetadata';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  subtitle: Text;\n  call_to_action: Text;\n  icon_type?: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.call_to_action = new Text(data.callToAction);\n\n    if (Reflect.has(data, 'callToActionIcon')) {\n      this.icon_type = data.callToActionIcon.iconType;\n    }\n\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class RichMetadataRow extends YTNode {\n  static type = 'RichMetadataRow';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class RichSection extends YTNode {\n  static type = 'RichSection';\n\n  public content: YTNode;\n  public full_bleed: boolean;\n  public target_id?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.content = Parser.parseItem(data.content);\n    this.full_bleed = !!data.fullBleed;\n\n    if ('targetId' in data) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class RichShelf extends YTNode {\n  static type = 'RichShelf';\n\n  public title: Text;\n  public contents: ObservedArray<YTNode>;\n  public endpoint?: NavigationEndpoint;\n  public subtitle?: Text;\n  public is_expanded: boolean;\n  public is_bottom_divider_hidden: boolean;\n  public is_top_divider_hidden: boolean;\n  public layout_sizing?: 'RICH_GRID_LAYOUT_SIZING_UNSPECIFIED'\n    | 'RICH_GRID_LAYOUT_SIZING_STANDARD'\n    | 'RICH_GRID_LAYOUT_SIZING_COMPACT'\n    | 'RICH_GRID_LAYOUT_SIZING_EXTRA_COMPACT'\n    | 'RICH_GRID_LAYOUT_SIZING_TINY';\n  public icon_type?: string;\n  public menu: YTNode | null;\n  public next_button: YTNode | null;\n  public previous_button: YTNode | null;\n  \n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.contents = Parser.parseArray(data.contents);\n\n    this.is_expanded = !!data.is_expanded;\n    this.is_bottom_divider_hidden = !!data.isBottomDividerHidden;\n    this.is_top_divider_hidden = !!data.isTopDividerHidden;\n\n    if ('endpoint' in data) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n\n    if ('subtitle' in data) {\n      this.subtitle = new Text(data.subtitle);\n    }\n\n    if ('layoutSizing' in data) {\n      this.layout_sizing = data.layoutSizing;\n    }\n    \n    if ('icon' in data) {\n      this.icon_type = data.icon.iconType;\n    }\n    \n    this.menu = Parser.parseItem(data.menu);\n    this.next_button = Parser.parseItem(data.nextButton);\n    this.previous_button = Parser.parseItem(data.previousButton);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class SearchFilter extends YTNode {\n  static type = 'SearchFilter';\n\n  label: Text;\n  endpoint: NavigationEndpoint;\n  tooltip: string;\n  status?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.endpoint = new NavigationEndpoint(data.endpoint || data.navigationEndpoint);\n    this.tooltip = data.tooltip;\n\n    if (Reflect.has(data, 'status')) {\n      this.status = data.status;\n    }\n  }\n\n  get disabled(): boolean {\n    return this.status === 'FILTER_STATUS_DISABLED';\n  }\n\n  get selected(): boolean {\n    return this.status === 'FILTER_STATUS_SELECTED';\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Text from './misc/Text.js';\nimport SearchFilter from './SearchFilter.js';\n\nexport default class SearchFilterGroup extends YTNode {\n  static type = 'SearchFilterGroup';\n\n  title: Text;\n  filters: ObservedArray<SearchFilter>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.filters = Parser.parseArray(data.filters, SearchFilter);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SearchFilterGroup from './SearchFilterGroup.js';\nimport Text from './misc/Text.js';\n\nexport default class SearchFilterOptionsDialog extends YTNode {\n  static type = 'SearchFilterOptionsDialog';\n\n  title: Text;\n  groups: ObservedArray<SearchFilterGroup>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.groups = Parser.parseArray(data.groups, SearchFilterGroup);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport ChipCloud from './ChipCloud.js';\n\nexport default class SearchHeader extends YTNode {\n  static type = 'SearchHeader';\n\n  chip_bar: ChipCloud | null;\n  search_filter_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.chip_bar = Parser.parseItem(data.chipBar, ChipCloud);\n    this.search_filter_button = Parser.parseItem(data.searchFilterButton, Button);\n  }\n}", "import { type ObservedArray, YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Text from './misc/Text.js';\nimport SearchFilterGroup from './SearchFilterGroup.js';\nimport ToggleButton from './ToggleButton.js';\n\nexport default class SearchSubMenu extends YTNode {\n  static type = 'SearchSubMenu';\n\n  title?: Text;\n  groups?: ObservedArray<SearchFilterGroup>;\n  button?: ToggleButton | null;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title'))\n      this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'groups'))\n      this.groups = Parser.parseArray(data.groups, SearchFilterGroup);\n\n    if (Reflect.has(data, 'button'))\n      this.button = Parser.parseItem(data.button, ToggleButton);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nexport default class SearchSuggestionsSection extends YTNode {\n  static type = 'SearchSuggestionsSection';\n\n  contents: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class UniversalWatchCard extends YTNode {\n  static type = 'UniversalWatchCard';\n\n  header: YTNode;\n  call_to_action: YTNode;\n  sections: ObservedArray<YTNode>;\n  collapsed_label?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.call_to_action = Parser.parseItem(data.callToAction);\n    this.sections = Parser.parseArray(data.sections);\n    if (Reflect.has(data, 'collapsedLabel')) {\n      this.collapsed_label = new Text(data.collapsedLabel);\n    }\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport UniversalWatchCard from './UniversalWatchCard.js';\n\nexport default class SecondarySearchContainer extends YTNode {\n  static type = 'SecondarySearchContainer';\n\n  public target_id?: string;\n  public contents: ObservedArray<UniversalWatchCard>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents, [ UniversalWatchCard ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SectionHeaderView extends YTNode {\n  static type = 'SectionHeaderView';\n  \n  public headline: Text;\n  \n  constructor(data: RawNode) {\n    super();\n    this.headline = Text.fromAttributed(data.headline);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport Button from './Button.js';\nimport ToggleButton from './ToggleButton.js';\n\nexport default class SegmentedLikeDislikeButton extends YTNode {\n  static type = 'SegmentedLikeDislikeButton';\n\n  like_button: ToggleButton | Button | null;\n  dislike_button: ToggleButton | Button | null;\n\n  constructor (data: RawNode) {\n    super();\n    this.like_button = Parser.parseItem(data.likeButton, [ ToggleButton, Button ]);\n    this.dislike_button = Parser.parseItem(data.dislikeButton, [ ToggleButton, Button ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingBoolean extends YTNode {\n  static type = 'SettingBoolean';\n\n  title?: Text;\n  summary?: Text;\n  enable_endpoint?: NavigationEndpoint;\n  disable_endpoint?: NavigationEndpoint;\n  item_id: string;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'title')) {\n      this.title = new Text(data.title);\n    }\n\n    if (Reflect.has(data, 'summary')) {\n      this.summary = new Text(data.summary);\n    }\n\n    if (Reflect.has(data, 'enableServiceEndpoint')) {\n      this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);\n    }\n\n    if (Reflect.has(data, 'disableServiceEndpoint')) {\n      this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);\n    }\n\n    this.item_id = data.itemId;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SettingsCheckbox extends YTNode {\n  static type = 'SettingsCheckbox';\n\n  title: Text;\n  help_text: Text;\n  enabled: boolean;\n  disabled: boolean;\n  id: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.help_text = new Text(data.helpText);\n    this.enabled = data.enabled;\n    this.disabled = data.disabled;\n    this.id = data.id;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsSwitch extends YTNode {\n  static type = 'SettingsSwitch';\n\n  title: Text;\n  subtitle: Text;\n  enabled: boolean;\n  enable_endpoint: NavigationEndpoint;\n  disable_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n    this.enabled = data.enabled;\n    this.enable_endpoint = new NavigationEndpoint(data.enableServiceEndpoint);\n    this.disable_endpoint = new NavigationEndpoint(data.disableServiceEndpoint);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport ChannelOptions from './ChannelOptions.js';\nimport CopyLink from './CopyLink.js';\nimport Dropdown from './Dropdown.js';\nimport SettingsCheckbox from './SettingsCheckbox.js';\nimport SettingsSwitch from './SettingsSwitch.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsOptions extends YTNode {\n  static type = 'SettingsOptions';\n\n  title: Text;\n  text?: string;\n  options?: ObservedArray<SettingsSwitch | Dropdown | CopyLink | SettingsCheckbox | ChannelOptions>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'text')) {\n      this.text = new Text(data.text).toString();\n    }\n\n    if (Reflect.has(data, 'options')) {\n      this.options = Parser.parseArray(data.options, [\n        SettingsSwitch, Dropdown, CopyLink,\n        SettingsCheckbox, ChannelOptions\n      ]);\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CompactLink from './CompactLink.js';\nimport Text from './misc/Text.js';\n\nexport default class SettingsSidebar extends YTNode {\n  static type = 'SettingsSidebar';\n\n  title: Text;\n  items: ObservedArray<CompactLink>;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.items = Parser.parseArray(data.items, CompactLink);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport { Parser } from '../index.js';\nimport BackstagePost from './BackstagePost.js';\nimport Button from './Button.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Post from './Post.js';\n\nexport default class SharedPost extends YTNode {\n  static type = 'SharedPost';\n\n  public thumbnail: Thumbnail[];\n  public content: Text;\n  public published: Text;\n  public menu: Menu | null;\n  public original_post: BackstagePost | Post | null;\n  public id: string;\n  public endpoint: NavigationEndpoint;\n  public expand_button: Button | null;\n  public author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.content = new Text(data.content);\n    this.published = new Text(data.publishedTimeText);\n    this.menu = Parser.parseItem(data.actionMenu, Menu);\n    this.original_post = Parser.parseItem(data.originalPost, [ BackstagePost, Post ]);\n    this.id = data.postId;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.expand_button = Parser.parseItem(data.expandButton, Button);\n    this.author = new Author(data.displayName, undefined);\n  }\n}", "import { type RawNode, Parser } from '../index.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class SharePanelHeader extends YTNode {\n  static type = 'SharePanelHeader';\n\n  public title: YTNode;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = Parser.parseItem(data.title);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class SharePanelTitleV15 extends YTNode {\n  static type = 'SharePanelTitleV15';\n\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShareTarget extends YTNode {\n  static type = 'ShareTarget';\n\n  public endpoint?: NavigationEndpoint;\n  public service_name: string;\n  public target_id: string;\n  public title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'serviceEndpoint'))\n      this.endpoint = new NavigationEndpoint(data.serviceEndpoint);\n    else if (Reflect.has(data, 'navigationEndpoint'))\n      this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.service_name = data.serviceName;\n    this.target_id = data.targetId;\n    this.title = new Text(data.title);\n  }\n}", "import Text from './misc/Text.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport Button from './Button.js';\n\nexport default class Shelf extends YTNode {\n  static type = 'Shelf';\n\n  title: Text;\n  endpoint?: NavigationEndpoint;\n  content: YTNode | null;\n  icon_type?: string;\n  menu?: YTNode | null;\n  play_all_button?: Button | null;\n  subtitle?: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if (Reflect.has(data, 'endpoint')) {\n      this.endpoint = new NavigationEndpoint(data.endpoint);\n    }\n\n    this.content = Parser.parseItem(data.content);\n\n    if (Reflect.has(data, 'icon')) {\n      this.icon_type = data.icon.iconType;\n    }\n\n    if (Reflect.has(data, 'menu')) {\n      this.menu = Parser.parseItem(data.menu);\n    }\n\n    if (Reflect.has(data, 'playAllButton')) {\n      this.play_all_button = Parser.parseItem(data.playAllButton, Button);\n    }\n\n    if (Reflect.has(data, 'subtitle')) {\n      this.subtitle = new Text(data.subtitle);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser } from '../index.js';\nimport type { RawNode } from '../types/index.js';\nimport BadgeView from './BadgeView.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShortsLockupView extends YTNode {\n  static type = 'ShortsLockupView';\n\n  entity_id: string;\n  accessibility_text: string;\n  thumbnail: Thumbnail[];\n  on_tap_endpoint: NavigationEndpoint;\n  menu_on_tap: NavigationEndpoint;\n  index_in_collection: number;\n  menu_on_tap_a11y_label: string;\n  overlay_metadata: {\n    primary_text?: Text;\n    secondary_text?: Text;\n  };\n  inline_player_data?: NavigationEndpoint;\n  badge?: BadgeView | null;\n\n  constructor(data: RawNode) {\n    super();\n\n    this.entity_id = data.entityId;\n    this.accessibility_text = data.accessibilityText;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.on_tap_endpoint = new NavigationEndpoint(data.onTap);\n    this.menu_on_tap = new NavigationEndpoint(data.menuOnTap);\n    this.index_in_collection = data.indexInCollection;\n    this.menu_on_tap_a11y_label = data.menuOnTapA11yLabel;\n\n    this.overlay_metadata = {\n      primary_text: data.overlayMetadata.primaryText ? Text.fromAttributed(data.overlayMetadata.primaryText) : undefined,\n      secondary_text: data.overlayMetadata.secondaryText ? Text.fromAttributed(data.overlayMetadata.secondaryText) : undefined\n    };\n\n    if (data.inlinePlayerData?.onVisible) {\n      this.inline_player_data = new NavigationEndpoint(data.inlinePlayerData.onVisible);\n    }\n\n    if (data.badge) {\n      this.badge = Parser.parseItem(data.badge, BadgeView);\n    }\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ShowingResultsFor extends YTNode {\n  static type = 'ShowingResultsFor';\n\n  corrected_query: Text;\n  original_query: Text;\n  corrected_query_endpoint: NavigationEndpoint;\n  original_query_endpoint: NavigationEndpoint;\n  search_instead_for: Text;\n  showing_results_for: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.corrected_query = new Text(data.correctedQuery);\n    this.original_query = new Text(data.originalQuery);\n    this.corrected_query_endpoint = new NavigationEndpoint(data.correctedQueryEndpoint);\n    this.original_query_endpoint = new NavigationEndpoint(data.originalQueryEndpoint);\n    this.search_instead_for = new Text(data.searchInsteadFor);\n    this.showing_results_for = new Text(data.showingResultsFor);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class SimpleCardContent extends YTNode {\n  static type = 'SimpleCardContent';\n\n  image: Thumbnail[];\n  title: Text;\n  display_domain: Text;\n  show_link_icon: boolean;\n  call_to_action: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.image = Thumbnail.fromResponse(data.image);\n    this.title = new Text(data.title);\n    this.display_domain = new Text(data.displayDomain);\n    this.show_link_icon = data.showLinkIcon;\n    this.call_to_action = new Text(data.callToAction);\n    this.endpoint = new NavigationEndpoint(data.command);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SimpleCardTeaser extends YTNode {\n  static type = 'SimpleCardTeaser';\n\n  message: Text;\n  prominent: boolean; // @TODO: or string?\n\n  constructor(data: RawNode) {\n    super();\n    this.message = new Text(data.message);\n    this.prominent = data.prominent;\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SimpleTextSection extends YTNode {\n  static type = 'SimpleTextSection';\n\n  lines: Text[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.lines = data.lines.map((line: RawNode) => new Text(line));\n    this.style = data.layoutStyle;\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SingleActionEmergencySupport extends YTNode {\n  static type = 'SingleActionEmergencySupport';\n\n  action_text: Text;\n  nav_text: Text;\n  details: Text;\n  icon_type: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.action_text = new Text(data.actionText);\n    this.nav_text = new Text(data.navigationText);\n    this.details = new Text(data.detailsText);\n    this.icon_type = data.icon.iconType;\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SectionList from './SectionList.js';\nimport MusicQueue from './MusicQueue.js';\nimport RichGrid from './RichGrid.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class Tab extends YTNode {\n  static type = 'Tab';\n\n  title: string;\n  selected: boolean;\n  endpoint: NavigationEndpoint;\n  content: SectionList | MusicQueue | RichGrid | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title || 'N/A';\n    this.selected = !!data.selected;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n    this.content = Parser.parseItem(data.content, [ SectionList, MusicQueue, RichGrid ]);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Tab from './Tab.js';\n\nexport default class SingleColumnBrowseResults extends YTNode {\n  static type = 'SingleColumnBrowseResults';\n\n  tabs: ObservedArray<Tab>;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, Tab);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class SingleColumnMusicWatchNextResults extends YTNode {\n  static type = 'SingleColumnMusicWatchNextResults';\n\n  contents;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data);\n  }\n}", "import Thumbnail from './misc/Thumbnail.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class SingleHeroImage extends YTNode {\n  static type = 'SingleHeroImage';\n\n  thumbnails: Thumbnail[];\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnails = Thumbnail.fromResponse(data.thumbnail);\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class SlimOwner extends YTNode {\n  static type = 'SlimOwner';\n\n  thumbnail: Thumbnail[];\n  title: Text;\n  endpoint: NavigationEndpoint;\n  subscribe_button: SubscribeButton | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.title = new Text(data.title);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, SubscribeButton);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class SlimVideoMetadata extends YTNode {\n  static type = 'SlimVideoMetadata';\n\n  title: Text;\n  collapsed_subtitle: Text;\n  expanded_subtitle: Text;\n  owner: YTNode;\n  description: Text;\n  video_id: string;\n  date: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.collapsed_subtitle = new Text(data.collapsedSubtitle);\n    this.expanded_subtitle = new Text(data.expandedSubtitle);\n    this.owner = Parser.parseItem(data.owner);\n    this.description = new Text(data.description);\n    this.video_id = data.videoId;\n    this.date = new Text(data.dateText);\n  }\n}", "import type { RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport { Text } from '../misc.js';\n\nexport default class StartAt extends YTNode {\n  static type = 'StartAt';\n\n  public start_at_option_label: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.start_at_option_label = new Text(data.startAtOptionLabel);\n  }\n}", "import { YTNode, type SuperParsedResult } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class Tabbed extends YTNode {\n  static type = 'Tabbed';\n\n  contents: SuperParsedResult<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport Tab from './Tab.js';\n\nexport default class TabbedSearchResults extends YTNode {\n  static type = 'TabbedSearchResults';\n\n  tabs: ObservedArray<Tab>;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, Tab);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class TextHeader extends YTNode {\n  static type = 'TextHeader';\n\n  title: Text;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.style = data.style;\n  }\n}", "import { type RawNode, Parser } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\nimport ShareTarget from './ShareTarget.js';\n\nexport default class ThirdPartyShareTargetSection extends YTNode {\n  static type = 'ThirdPartyShareTargetSection';\n\n  public share_targets: ObservedArray<ShareTarget>;\n\n  constructor(data: RawNode) {\n    super();\n    this.share_targets = Parser.parseArray(data.shareTargets, ShareTarget);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class ThumbnailLandscapePortrait extends YTNode {\n  static type = 'ThumbnailLandscapePortrait';\n\n  landscape: Thumbnail[];\n  portrait: Thumbnail[];\n\n  constructor (data: RawNode) {\n    super();\n    this.landscape = Thumbnail.fromResponse(data.landscape);\n    this.portrait = Thumbnail.fromResponse(data.portrait);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayEndorsement extends YTNode {\n  static type = 'ThumbnailOverlayEndorsement';\n\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayHoverText extends YTNode {\n  static type = 'ThumbnailOverlayHoverText';\n\n  text: Text;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.icon_type = data.icon.iconType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayInlineUnplayable extends YTNode {\n  static type = 'ThumbnailOverlayInlineUnplayable';\n\n  text: string;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n    this.icon_type = data.icon.iconType;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayLoadingPreview extends YTNode {\n  static type = 'ThumbnailOverlayLoadingPreview';\n\n  text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayNowPlaying extends YTNode {\n  static type = 'ThumbnailOverlayNowPlaying';\n\n  text: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text).toString();\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayPinking extends YTNode {\n  static type = 'ThumbnailOverlayPinking';\n\n  hack: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.hack = data.hack;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class ThumbnailOverlayPlaybackStatus extends YTNode {\n  static type = 'ThumbnailOverlayPlaybackStatus';\n\n  texts: Text[];\n\n  constructor(data: RawNode) {\n    super();\n    this.texts = data.texts.map((text: RawNode) => new Text(text));\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayResumePlayback extends YTNode {\n  static type = 'ThumbnailOverlayResumePlayback';\n\n  percent_duration_watched: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.percent_duration_watched = data.percentDurationWatched;\n  }\n}\n", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlaySidePanel extends YTNode {\n  static type = 'ThumbnailOverlaySidePanel';\n\n  text: Text;\n  icon_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.text);\n    this.icon_type = data.icon.iconType;\n  }\n}", "import NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ThumbnailOverlayToggleButton extends YTNode {\n  static type = 'ThumbnailOverlayToggleButton';\n\n  is_toggled?: boolean;\n\n  icon_type: {\n    toggled: string;\n    untoggled: string;\n  };\n\n  tooltip: {\n    toggled: string;\n    untoggled: string;\n  };\n\n  toggled_endpoint?: NavigationEndpoint;\n  untoggled_endpoint?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    if (Reflect.has(data, 'isToggled')) {\n      this.is_toggled = data.isToggled;\n    }\n\n    this.icon_type = {\n      toggled: data.toggledIcon.iconType,\n      untoggled: data.untoggledIcon.iconType\n    };\n\n    this.tooltip = {\n      toggled: data.toggledTooltip,\n      untoggled: data.untoggledTooltip\n    };\n\n    if (data.toggledServiceEndpoint)\n      this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n\n    if (data.untoggledServiceEndpoint)\n      this.untoggled_endpoint = new NavigationEndpoint(data.untoggledServiceEndpoint);\n  }\n}", "import Text from './misc/Text.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class TitleAndButtonListHeader extends YTNode {\n  static type = 'TitleAndButtonListHeader';\n\n  title: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n  }\n}", "import { type RawNode } from '../index.js';\nimport { YTNode } from '../helpers.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class ToggleFormField extends YTNode {\n  static type = 'ToggleFormField';\n\n  public label: Text;\n  public toggled: boolean;\n  public toggle_on_action?: NavigationEndpoint;\n  public toggle_off_action?: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.label = new Text(data.label);\n    this.toggled = data.toggled;\n\n    if ('toggleOnAction' in data)\n      this.toggle_on_action = new NavigationEndpoint(data.toggleOnAction);\n\n    if ('toggleOffAction' in data)\n      this.toggle_off_action = new NavigationEndpoint(data.toggleOffAction);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class ToggleMenuServiceItem extends YTNode {\n  static type = 'ToggleMenuServiceItem';\n\n  text: Text;\n  toggled_text: Text;\n  icon_type: string;\n  toggled_icon_type: string;\n  default_endpoint: NavigationEndpoint;\n  toggled_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.text = new Text(data.defaultText);\n    this.toggled_text = new Text(data.toggledText);\n    this.icon_type = data.defaultIcon.iconType;\n    this.toggled_icon_type = data.toggledIcon.iconType;\n    this.default_endpoint = new NavigationEndpoint(data.defaultServiceEndpoint);\n    this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);\n  }\n}", "import Text from './misc/Text.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class Tooltip extends YTNode {\n  static type = 'Tooltip';\n\n  promo_config: {\n    promo_id: string;\n    impression_endpoints: NavigationEndpoint[];\n    accept: NavigationEndpoint;\n    dismiss: NavigationEndpoint;\n  };\n\n  target_id: string;\n  details: Text;\n  suggested_position: string;\n  dismiss_stratedy: string;\n  dwell_time_ms: number;\n\n  constructor(data: RawNode) {\n    super();\n    this.promo_config = {\n      promo_id: data.promoConfig.promoId,\n      impression_endpoints: data.promoConfig.impressionEndpoints\n        .map((endpoint: RawNode) => new NavigationEndpoint(endpoint)),\n      accept: new NavigationEndpoint(data.promoConfig.acceptCommand),\n      dismiss: new NavigationEndpoint(data.promoConfig.dismissCommand)\n    };\n\n    this.target_id = data.targetId;\n    this.details = new Text(data.detailsText);\n    this.suggested_position = data.suggestedPosition.type;\n    this.dismiss_stratedy = data.dismissStrategy.type;\n    this.dwell_time_ms = parseInt(data.dwellTimeMs);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class TopicChannelDetails extends YTNode {\n  static type = 'TopicChannelDetails';\n\n  title: Text;\n  avatar: Thumbnail[];\n  subtitle: Text;\n  subscribe_button: SubscribeButton | null;\n  endpoint: NavigationEndpoint;\n\n  constructor (data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.avatar = Thumbnail.fromResponse(data.thumbnail ?? data.avatar);\n    this.subtitle = new Text(data.subtitle);\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, SubscribeButton);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SectionList from './SectionList.js';\nimport BrowseFeedActions from './BrowseFeedActions.js';\nimport ProfileColumn from './ProfileColumn.js';\nimport Tab from './Tab.js';\nimport ExpandableTab from './ExpandableTab.js';\n\nexport default class TwoColumnBrowseResults extends YTNode {\n  static type = 'TwoColumnBrowseResults';\n\n  public tabs: ObservedArray<Tab | ExpandableTab>;\n  public secondary_contents: SectionList | BrowseFeedActions | ProfileColumn | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.tabs = Parser.parseArray(data.tabs, [ Tab, ExpandableTab ]);\n    this.secondary_contents = Parser.parseItem(data.secondaryContents, [ SectionList, BrowseFeedActions, ProfileColumn ]);\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport SecondarySearchContainer from './SecondarySearchContainer.js';\nimport RichGrid from './RichGrid.js';\nimport SectionList from './SectionList.js';\n\nexport default class TwoColumnSearchResults extends YTNode {\n  static type = 'TwoColumnSearchResults';\n\n  public header: YTNode | null;\n  public primary_contents: RichGrid | SectionList | null;\n  public secondary_contents: SecondarySearchContainer | null;\n  public target_id?: string;\n  \n  constructor(data: RawNode) {\n    super();\n    this.header = Parser.parseItem(data.header);\n    this.primary_contents = Parser.parseItem(data.primaryContents, [ RichGrid, SectionList ]);\n    this.secondary_contents = Parser.parseItem(data.secondaryContents, [ SecondarySearchContainer ]);\n    \n    if ('targetId' in data) {\n      this.target_id = data.targetId;\n    }\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Menu from './menus/Menu.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\ntype AutoplaySet = {\n  autoplay_video: NavigationEndpoint,\n  next_button_video?: NavigationEndpoint\n};\n\nexport default class TwoColumnWatchNextResults extends YTNode {\n  static type = 'TwoColumnWatchNextResults';\n\n  results: ObservedArray<YTNode>;\n  secondary_results: ObservedArray<YTNode>;\n  conversation_bar: YTNode;\n  playlist?: {\n    id: string,\n    title: string,\n    author: Text | Author,\n    contents: YTNode[],\n    current_index: number,\n    is_infinite: boolean,\n    menu: Menu | null\n  };\n  autoplay?: {\n    sets: AutoplaySet[],\n    modified_sets?: AutoplaySet[],\n    count_down_secs?: number\n  };\n\n  constructor(data: RawNode) {\n    super();\n    this.results = Parser.parseArray(data.results?.results.contents);\n    this.secondary_results = Parser.parseArray(data.secondaryResults?.secondaryResults.results);\n    this.conversation_bar = Parser.parseItem(data?.conversationBar);\n\n    const playlistData = data.playlist?.playlist;\n\n    if (playlistData) {\n      this.playlist = {\n        id: playlistData.playlistId,\n        title: playlistData.title,\n        author: playlistData.shortBylineText?.simpleText ?\n          new Text(playlistData.shortBylineText) :\n          new Author(playlistData.longBylineText),\n        contents: Parser.parseArray(playlistData.contents),\n        current_index: playlistData.currentIndex,\n        is_infinite: !!playlistData.isInfinite,\n        menu: Parser.parseItem(playlistData.menu, Menu)\n      };\n    }\n\n    const autoplayData = data.autoplay?.autoplay;\n    if (autoplayData) {\n      this.autoplay = {\n        sets: autoplayData.sets.map((set: RawNode) => this.#parseAutoplaySet(set))\n      };\n      if (autoplayData.modifiedSets) {\n        this.autoplay.modified_sets = autoplayData.modifiedSets.map((set: any) => this.#parseAutoplaySet(set));\n      }\n      if (autoplayData.countDownSecs) {\n        this.autoplay.count_down_secs = autoplayData.countDownSecs;\n      }\n    }\n  }\n\n  #parseAutoplaySet(data: RawNode): AutoplaySet {\n    const result = {\n      autoplay_video: new NavigationEndpoint(data.autoplayVideo)\n    } as AutoplaySet;\n\n    if (data.nextButtonVideo) {\n      result.next_button_video = new NavigationEndpoint(data.nextButtonVideo);\n    }\n\n    return result;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nimport StartAt from './StartAt.js';\nimport CopyLink from './CopyLink.js';\nimport SharePanelHeader from './SharePanelHeader.js';\nimport ThirdPartyShareTargetSection from './ThirdPartyShareTargetSection.js';\n\nexport type ThirdPartyNetworkSection = {\n  share_target_container: ThirdPartyShareTargetSection | null,\n  copy_link_container: CopyLink | null,\n  start_at_container: StartAt | null\n};\n\nexport default class UnifiedSharePanel extends YTNode {\n  static type = 'UnifiedSharePanel';\n\n  public third_party_network_section?: ThirdPartyNetworkSection;\n  public header: SharePanelHeader | null;\n  public share_panel_version: number;\n  public show_loading_spinner?: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    if (data.contents) {\n      const contents = data.contents.find((content: RawNode) => content.thirdPartyNetworkSection);\n\n      if (contents) {\n        this.third_party_network_section = {\n          share_target_container: Parser.parseItem(contents.thirdPartyNetworkSection.shareTargetContainer, ThirdPartyShareTargetSection),\n          copy_link_container: Parser.parseItem(contents.thirdPartyNetworkSection.copyLinkContainer, CopyLink),\n          start_at_container: Parser.parseItem(contents.thirdPartyNetworkSection.startAtContainer, StartAt)\n        };\n      }\n    }\n\n    this.header = Parser.parseItem(data.header, SharePanelHeader);\n    this.share_panel_version = data.sharePanelVersion;\n    \n    if (Reflect.has(data, 'showLoadingSpinner'))\n      this.show_loading_spinner = data.showLoadingSpinner;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Button from './Button.js';\nimport Text from './misc/Text.js';\n\nexport default class UpsellDialog extends YTNode {\n  static type = 'UpsellDialog';\n\n  message_title: Text;\n  message_text: Text;\n  action_button: Button | null;\n  dismiss_button: Button | null;\n  is_visible: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.message_title = new Text(data.dialogMessageTitle);\n    this.message_text = new Text(data.dialogMessageText);\n    this.action_button = Parser.parseItem(data.actionButton, Button);\n    this.dismiss_button = Parser.parseItem(data.dismissButton, Button);\n    this.is_visible = data.isVisible;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class VerticalList extends YTNode {\n  static type = 'VerticalList';\n\n  items: ObservedArray<YTNode>;\n  collapsed_item_count: string; // Number?\n  collapsed_state_button_text: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.collapsed_item_count = data.collapsedItemCount;\n    this.collapsed_state_button_text = new Text(data.collapsedStateButtonText);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\n\nexport default class VerticalWatchCardList extends YTNode {\n  static type = 'VerticalWatchCardList';\n\n  items: ObservedArray<YTNode>;\n  view_all_text: Text;\n  view_all_endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parseArray(data.items);\n    this.view_all_text = new Text(data.viewAllText);\n    this.view_all_endpoint = new NavigationEndpoint(data.viewAllEndpoint);\n  }\n\n  // XXX: Alias for consistency.\n  get contents() {\n    return this.items;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Text from './misc/Text.js';\nimport Thumbnail from './misc/Thumbnail.js';\n\nexport default class VideoInfoCardContent extends YTNode {\n  static type = 'VideoInfoCardContent';\n\n  title: Text;\n  channel_name: Text;\n  view_count: Text;\n  video_thumbnails: Thumbnail[];\n  duration: Text;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.videoTitle);\n    this.channel_name = new Text(data.channelName);\n    this.view_count = new Text(data.viewCountText);\n    this.video_thumbnails = Thumbnail.fromResponse(data.videoThumbnail);\n    this.duration = new Text(data.lengthString);\n    this.endpoint = new NavigationEndpoint(data.action);\n  }\n}", "import { YTNode, type ObservedArray } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport CarouselItemView from './CarouselItemView.js';\nimport CarouselTitleView from './CarouselTitleView.js';\n\nexport default class VideoMetadataCarouselView extends YTNode {\n  static type = 'VideoMetadataCarouselView';\n\n  carousel_titles: ObservedArray<CarouselTitleView> | null;\n  carousel_items: ObservedArray<CarouselItemView> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.carousel_titles = Parser.parse(data.carouselTitles, true, CarouselTitleView);\n    this.carousel_items = Parser.parse(data.carouselItems, true, CarouselItemView);\n  }\n}", "import type { RawNode } from '../../index.js';\nimport Text from './Text.js';\n\nexport default class SubscriptionButton {\n  static type = 'SubscriptionButton';\n\n  public text: Text;\n  public subscribed: boolean;\n  public subscription_type?: 'FREE' | 'PAID' | 'UNAVAILABLE';\n\n  constructor(data: RawNode) {\n    this.text = new Text(data.text);\n    this.subscribed = data.isSubscribed;\n    if ('subscriptionType' in data)\n      this.subscription_type = data.subscriptionType;\n  }\n}", "import Text from './misc/Text.js';\nimport Author from './misc/Author.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport SubscriptionButton from './misc/SubscriptionButton.js';\n\nexport default class VideoOwner extends YTNode {\n  static type = 'VideoOwner';\n\n  public subscription_button?: SubscriptionButton;\n  public subscriber_count: Text;\n  public author: Author;\n\n  constructor(data: RawNode) {\n    super();\n    if ('subscriptionButton' in data)\n      this.subscription_button = new SubscriptionButton(data.subscriptionButton);\n    this.subscriber_count = new Text(data.subscriberCountText);\n    this.author = new Author({\n      ...data.title,\n      navigationEndpoint: data.navigationEndpoint\n    }, data.badges, data.thumbnail);\n  }\n}", "import { Text } from '../misc.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\n\nexport default class VideoViewCount extends YTNode {\n  static type = 'VideoViewCount';\n\n  public original_view_count: string;\n  public short_view_count: Text;\n  public extra_short_view_count: Text;\n  public view_count: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.original_view_count = data.originalViewCount;\n    this.short_view_count = new Text(data.shortViewCount);\n    this.extra_short_view_count = new Text(data.extraShortViewCount);\n    this.view_count = new Text(data.viewCount);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport { type ObservedArray, YTNode } from '../helpers.js';\n\nimport Text from './misc/Text.js';\nimport Menu from './menus/Menu.js';\nimport MetadataBadge from './MetadataBadge.js';\nimport VideoViewCount from './VideoViewCount.js';\n\nexport default class VideoPrimaryInfo extends YTNode {\n  static type = 'VideoPrimaryInfo';\n\n  public title: Text;\n  public super_title_link?: Text;\n  public station_name?: Text;\n  public view_count: VideoViewCount | null;\n  public badges: ObservedArray<MetadataBadge>;\n  public published: Text;\n  public relative_date: Text;\n  public menu: Menu | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n\n    if ('superTitleLink' in data)\n      this.super_title_link = new Text(data.superTitleLink);\n\n    if ('stationName' in data)\n      this.station_name = new Text(data.stationName);\n    \n    this.view_count = Parser.parseItem(data.viewCount, VideoViewCount);\n    this.badges = Parser.parseArray(data.badges, MetadataBadge);\n    this.published = new Text(data.dateText);\n    this.relative_date = new Text(data.relativeDateText);\n    this.menu = Parser.parseItem(data.videoActions, Menu);\n  }\n}", "import { Parser, type RawNode } from '../index.js';\nimport Text from './misc/Text.js';\nimport Button from './Button.js';\nimport VideoOwner from './VideoOwner.js';\nimport SubscribeButton from './SubscribeButton.js';\nimport MetadataRowContainer from './MetadataRowContainer.js';\nimport { YTNode } from '../helpers.js';\n\nexport default class VideoSecondaryInfo extends YTNode {\n  static type = 'VideoSecondaryInfo';\n\n  public owner: VideoOwner | null;\n  public description: Text;\n  public description_placeholder?: Text;\n  public subscribe_button: SubscribeButton | Button | null;\n  public metadata: MetadataRowContainer | null;\n  public show_more_text: Text;\n  public show_less_text: Text;\n  public default_expanded: string;\n  public description_collapsed_lines: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.owner = Parser.parseItem(data.owner, VideoOwner);\n    this.description = new Text(data.description);\n\n    if ('attributedDescription' in data)\n      this.description = Text.fromAttributed(data.attributedDescription);\n    \n    if ('descriptionPlaceholder' in data)\n      this.description_placeholder = new Text(data.descriptionPlaceholder);\n\n    this.subscribe_button = Parser.parseItem(data.subscribeButton, [ SubscribeButton, Button ]);\n    this.metadata = Parser.parseItem(data.metadataRowContainer, MetadataRowContainer);\n    this.show_more_text = new Text(data.showMoreText);\n    this.show_less_text = new Text(data.showLessText);\n    this.default_expanded = data.defaultExpanded;\n    this.description_collapsed_lines = data.descriptionCollapsedLines;\n  }\n}", "import { timeToSeconds } from '../../utils/Utils.js';\nimport { YTNode } from '../helpers.js';\nimport type { RawNode } from '../index.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchCardCompactVideo extends YTNode {\n  static type = 'WatchCardCompactVideo';\n\n  title: Text;\n  subtitle: Text;\n  duration: {\n    text: string;\n    seconds: number;\n  };\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.subtitle = new Text(data.subtitle);\n\n    this.duration = {\n      text: new Text(data.lengthText).toString(),\n      seconds: timeToSeconds(data.lengthText.simpleText)\n    };\n\n    this.style = data.style;\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\n\nexport default class WatchCardHeroVideo extends YTNode {\n  static type = 'WatchCardHeroVideo';\n\n  endpoint: NavigationEndpoint;\n  call_to_action_button: YTNode;\n  hero_image: YTNode;\n  label: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n    this.call_to_action_button = Parser.parseItem(data.callToActionButton);\n    this.hero_image = Parser.parseItem(data.heroImage);\n    this.label = data.lengthText?.accessibility.accessibilityData.label || '';\n  }\n}", "import { YTNode } from '../helpers.js';\nimport { type RawNode } from '../index.js';\nimport NavigationEndpoint from './NavigationEndpoint.js';\nimport Author from './misc/Author.js';\nimport Text from './misc/Text.js';\n\nexport default class WatchCardRichHeader extends YTNode {\n  static type = 'WatchCardRichHeader';\n\n  title: Text;\n  title_endpoint: NavigationEndpoint;\n  subtitle: Text;\n  author: Author;\n  style: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.title_endpoint = new NavigationEndpoint(data.titleNavigationEndpoint);\n    this.subtitle = new Text(data.subtitle);\n    this.author = new Author(data, data.titleBadge ? [ data.titleBadge ] : null, data.avatar);\n    this.author.name = this.title.toString();\n    this.style = data.style;\n  }\n}", "import type { ObservedArray } from '../helpers.js';\nimport { YTNode } from '../helpers.js';\nimport { Parser, type RawNode } from '../index.js';\n\nexport default class WatchCardSectionSequence extends YTNode {\n  static type = 'WatchCardSectionSequence';\n\n  lists: ObservedArray<YTNode>;\n\n  constructor(data: RawNode) {\n    super();\n    this.lists = Parser.parseArray(data.lists);\n  }\n}", "import type { RawNode } from '../index.js';\nimport TwoColumnBrowseResults from './TwoColumnBrowseResults.js';\n\nexport default class WatchNextTabbedResults extends TwoColumnBrowseResults {\n  static type = 'WatchNextTabbedResults';\n\n  constructor(data: RawNode) {\n    super(data);\n  }\n}", "import { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\nimport { Parser } from '../../index.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport SectionList from '../SectionList.js';\n\nexport default class AnchoredSection extends YTNode {\n  static type = 'AnchoredSection';\n\n  title: string;\n  content: SectionList | null;\n  endpoint: NavigationEndpoint;\n  category_assets: {\n    asset_key: string;\n    background_color: string;\n  };\n  category_type: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = data.title;\n    this.content = Parser.parseItem(data.content, SectionList);\n    this.endpoint = new NavigationEndpoint(data.navigationEndpoint);\n\n    this.category_assets = {\n      asset_key: data.categoryAssets?.assetKey,\n      background_color: data.categoryAssets?.backgroundColor\n    };\n\n    this.category_type = data.categoryType;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport ToggleButton from '../ToggleButton.js';\nimport Thumbnail from '../misc/Thumbnail.js';\nimport type Actions from '../../../core/Actions.js';\nimport { InnertubeError } from '../../../utils/Utils.js';\nimport { type ApiResponse } from '../../../core/Actions.js';\n\nexport default class KidsBlocklistPickerItem extends YTNode {\n  static type = 'KidsBlocklistPickerItem';\n\n  #actions?: Actions;\n\n  child_display_name: Text;\n  child_account_description: Text;\n  avatar: Thumbnail[];\n  block_button: ToggleButton | null;\n  blocked_entity_key: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.child_display_name = new Text(data.childDisplayName);\n    this.child_account_description = new Text(data.childAccountDescription);\n    this.avatar = Thumbnail.fromResponse(data.avatar);\n    this.block_button = Parser.parseItem(data.blockButton, [ ToggleButton ]);\n    this.blocked_entity_key = data.blockedEntityKey;\n  }\n\n  async blockChannel(): Promise<ApiResponse> {\n    if (!this.#actions)\n      throw new InnertubeError('An active caller must be provide to perform this operation.');\n\n    const button = this.block_button;\n\n    if (!button)\n      throw new InnertubeError('Block button was not found.', { child_display_name: this.child_display_name });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This channel is already blocked.', { child_display_name: this.child_display_name });\n\n    const response = await button.endpoint.call(this.#actions, { parse: false });\n    return response;\n  }\n\n  setActions(actions: Actions | undefined) {\n    this.#actions = actions;\n  }\n}", "import Text from '../misc/Text.js';\nimport { YTNode } from '../../helpers.js';\nimport Button from '../Button.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport KidsBlocklistPickerItem from './KidsBlocklistPickerItem.js';\n\nexport default class KidsBlocklistPicker extends YTNode {\n  static type = 'KidsBlocklistPicker';\n\n  title: Text;\n  child_rows: KidsBlocklistPickerItem[] | null;\n  done_button: Button | null;\n  successful_toast_action_message: Text;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.child_rows = Parser.parse(data.childRows, true, [ KidsBlocklistPickerItem ]);\n    this.done_button = Parser.parseItem(data.doneButton, [ Button ]);\n    this.successful_toast_action_message = new Text(data.successfulToastActionMessage);\n  }\n}", "import Text from '../misc/Text.js';\nimport NavigationEndpoint from '../NavigationEndpoint.js';\nimport { YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsCategoryTab extends YTNode {\n  static type = 'KidsCategoryTab';\n\n  title: Text;\n  category_assets: {\n    asset_key: string;\n    background_color: string;\n  };\n  category_type: string;\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.title = new Text(data.title);\n    this.category_assets = {\n      asset_key: data.categoryAssets?.assetKey,\n      background_color: data.categoryAssets?.backgroundColor\n    };\n    this.category_type = data.categoryType;\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}", "import { Parser } from '../../index.js';\nimport Button from '../Button.js';\nimport KidsCategoryTab from './KidsCategoryTab.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsCategoriesHeader extends YTNode {\n  static type = 'kidsCategoriesHeader';\n\n  category_tabs: ObservedArray<KidsCategoryTab>;\n  privacy_button: Button | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.category_tabs = Parser.parseArray(data.categoryTabs, KidsCategoryTab);\n    this.privacy_button = Parser.parseItem(data.privacyButtonRenderer, Button);\n  }\n}", "import { Parser } from '../../index.js';\nimport AnchoredSection from './AnchoredSection.js';\nimport { type ObservedArray, YTNode } from '../../helpers.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class KidsHomeScreen extends YTNode {\n  static type = 'kidsHomeScreen';\n\n  anchors: ObservedArray<AnchoredSection>;\n\n  constructor(data: RawNode) {\n    super();\n    this.anchors = Parser.parseArray(data.anchors, AnchoredSection);\n  }\n}", "/* eslint-disable no-cond-assign */\n// noinspection JSAssignmentUsedAsCondition\n\nimport { YTNode } from './helpers.js';\nimport * as Parser from './parser.js';\nimport { InnertubeError } from '../utils/Utils.js';\n\nimport Author from './classes/misc/Author.js';\nimport Text from './classes/misc/Text.js';\nimport Thumbnail from './classes/misc/Thumbnail.js';\nimport NavigationEndpoint from './classes/NavigationEndpoint.js';\n\nimport type { YTNodeConstructor } from './helpers.js';\n\nexport type MiscInferenceType = {\n  type: 'misc',\n  misc_type: 'NavigationEndpoint',\n  optional: boolean,\n  endpoint: NavigationEndpoint\n} | {\n  type: 'misc',\n  misc_type: 'Text',\n  optional: boolean,\n  text: string,\n  endpoint?: NavigationEndpoint\n} | {\n  type: 'misc',\n  misc_type: 'Thumbnail',\n  optional: boolean,\n} | {\n  type: 'misc',\n  misc_type: 'Author',\n  optional: boolean,\n  params: [string, string?],\n}\n\nexport interface ObjectInferenceType {\n  type: 'object',\n  keys: KeyInfo,\n  optional: boolean,\n}\n\nexport interface RendererInferenceType {\n  type: 'renderer',\n  renderers: string[],\n  optional: boolean\n}\n\nexport interface PrimitiveInferenceType {\n  type: 'primitive',\n  typeof: ('string' | 'number' | 'boolean' | 'bigint' | 'symbol' | 'undefined' | 'function' | 'never' | 'unknown')[],\n  optional: boolean,\n}\n\nexport type ArrayInferenceType = {\n  type: 'array',\n  array_type: 'primitive',\n  items: PrimitiveInferenceType,\n  optional: boolean,\n} | {\n  type: 'array',\n  array_type: 'object',\n  items: ObjectInferenceType,\n  optional: boolean,\n} | {\n  type: 'array',\n  array_type: 'renderer',\n  renderers: string[],\n  optional: boolean,\n};\n\nexport type InferenceType = RendererInferenceType | MiscInferenceType | ObjectInferenceType | PrimitiveInferenceType | ArrayInferenceType;\n\nexport type KeyInfo = (readonly [string, InferenceType])[];\n\nconst IGNORED_KEYS = new Set([\n  'trackingParams', 'accessibility', 'accessibilityData'\n]);\n\nconst RENDERER_EXAMPLES: Record<string, unknown> = {};\n\nexport function camelToSnake(str: string) {\n  return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Infer the type of key given its value\n * @param key - The key to infer the type of\n * @param value - The value of the key\n * @returns The inferred type\n */\nexport function inferType(key: string, value: unknown): InferenceType {\n  let return_value: string | Record<string, any> | false | MiscInferenceType | ArrayInferenceType = false;\n  if (typeof value === 'object' && value != null) {\n    if (return_value = isRenderer(value)) {\n      RENDERER_EXAMPLES[return_value] = Reflect.get(value, Reflect.ownKeys(value)[0]);\n      return {\n        type: 'renderer',\n        renderers: [ return_value ],\n        optional: false\n      };\n    }\n    if (return_value = isRendererList(value)) {\n      for (const [ key, value ] of Object.entries(return_value)) {\n        RENDERER_EXAMPLES[key] = value;\n      }\n      return {\n        type: 'array',\n        array_type: 'renderer',\n        renderers: Object.keys(return_value),\n        optional: false\n      };\n    }\n    if (return_value = isMiscType(key, value)) {\n      return return_value as MiscInferenceType;\n    }\n    if (return_value = isArrayType(value)) {\n      return return_value as ArrayInferenceType;\n    }\n  }\n  const primitive_type = typeof value;\n  if (primitive_type === 'object')\n    return {\n      type: 'object',\n      keys: Object.entries(value as object).map(([ key, value ]) => [ key, inferType(key, value) ]),\n      optional: false\n    };\n  return {\n    type: 'primitive',\n    typeof: [ primitive_type ],\n    optional: false\n  };\n}\n\n/**\n * Checks if the given value is an array of renderers\n * @param value - The value to check\n * @returns If it is a renderer list, return an object with keys being the classnames, and values being an example of that class.\n * Otherwise, return false.\n */\nexport function isRendererList(value: unknown) {\n  const arr = Array.isArray(value);\n  if (arr && value.length === 0)\n    return false;\n\n  const is_list = arr && value.every((item) => isRenderer(item));\n  return (\n    is_list ?\n      Object.fromEntries(value.map((item) => {\n        const key = Reflect.ownKeys(item)[0].toString();\n        return [ Parser.sanitizeClassName(key), item[key] ];\n      })) :\n      false\n  );\n}\n\n/**\n * Check if the given value is a misc type.\n * @param key - The key of the value\n * @param value - The value to check\n * @returns If it is a misc type, return the InferenceType. Otherwise, return false.\n */\nexport function isMiscType(key: string, value: unknown): MiscInferenceType | false {\n  if (typeof value === 'object' && value !== null) {\n    // NavigationEndpoint\n    if (key.endsWith('Endpoint') || key.endsWith('Command') || key === 'endpoint') {\n      return {\n        type: 'misc',\n        endpoint: new NavigationEndpoint(value),\n        optional: false,\n        misc_type: 'NavigationEndpoint'\n      };\n    }\n    // Text\n    if (Reflect.has(value, 'simpleText') || Reflect.has(value, 'runs')) {\n      const textNode = new Text(value);\n      return {\n        type: 'misc',\n        misc_type: 'Text',\n        optional: false,\n        endpoint: textNode.endpoint,\n        text: textNode.toString()\n      };\n    }\n    // Thumbnail\n    if (Reflect.has(value, 'thumbnails') && Array.isArray(Reflect.get(value, 'thumbnails'))) {\n      return {\n        type: 'misc',\n        misc_type: 'Thumbnail',\n        optional: false\n      };\n    }\n  }\n  return false;\n}\n\n/**\n * Check if the given value is a renderer\n * @param value - The value to check\n * @returns If it is a renderer, return the class name. Otherwise, return false.\n */\nexport function isRenderer(value: unknown) {\n  const is_object = typeof value === 'object';\n  if (!is_object) return false;\n  const keys = Reflect.ownKeys(value as object);\n\n  if (keys.length === 1) {\n    const first_key = keys[0].toString();\n\n    if (first_key.endsWith('Renderer') || first_key.endsWith('Model')) {\n      return Parser.sanitizeClassName(first_key);\n    }\n  }\n  return false;\n}\n\n/**\n * Checks if the given value is an array\n * @param value - The value to check\n * @returns If it is an array, return the InferenceType. Otherwise, return false.\n */\nexport function isArrayType(value: unknown): false | ArrayInferenceType {\n  if (!Array.isArray(value))\n    return false;\n\n  // If the array is empty, we can't infer anything\n  if (value.length === 0)\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ 'never' ],\n        optional: false\n      },\n      optional: false\n    };\n  // We'll infer the primitive type of the array entries\n  const array_entry_types = value.map((item) => typeof item);\n  // We only support arrays that have the same primitive type throughout\n  const all_same_type = array_entry_types.every((type) => type === array_entry_types[0]);\n  if (!all_same_type)\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ 'unknown' ],\n        optional: false\n      },\n      optional: false\n    };\n\n  const type = array_entry_types[0];\n  if (type !== 'object')\n    return {\n      type: 'array',\n      array_type: 'primitive',\n      items: {\n        type: 'primitive',\n        typeof: [ type ],\n        optional: false\n      },\n      optional: false\n    };\n\n  let key_type: KeyInfo = [];\n  for (let i = 0; i < value.length; i++) {\n    const current_keys = Object.entries(value[i] as object).map(([ key, value ]) => [ key, inferType(key, value) ] as const);\n    if (i === 0) {\n      key_type = current_keys;\n      continue;\n    }\n    key_type = mergeKeyInfo(key_type, current_keys).resolved_key_info;\n  }\n\n  return {\n    type: 'array',\n    array_type: 'object',\n    items: {\n      type: 'object',\n      keys: key_type,\n      optional: false\n    },\n    optional: false\n  };\n}\n\nfunction introspectKeysFirstPass(classdata: unknown): KeyInfo {\n  if (typeof classdata !== 'object' || classdata === null) {\n    throw new InnertubeError('Generator: Cannot introspect non-object', {\n      classdata\n    });\n  }\n\n  const keys = Reflect.ownKeys(classdata)\n    .filter((key) => !isIgnoredKey(key))\n    .filter((key): key is string => typeof key === 'string');\n\n  return keys.map((key) => {\n    const value = Reflect.get(classdata, key) as unknown;\n    const inferred_type = inferType(key, value);\n    return [ key, inferred_type ] as const;\n  });\n}\n\nfunction introspectKeysSecondPass(key_info: KeyInfo) {\n  // The second pass will detect Author\n  const channel_nav = key_info.filter(([ , value ]) => {\n    if (value.type !== 'misc') return false;\n    if (!(value.misc_type === 'NavigationEndpoint' || value.misc_type === 'Text')) return false;\n    return value.endpoint?.metadata.page_type === 'WEB_PAGE_TYPE_CHANNEL';\n  });\n\n  // Whichever one has the longest text is the most probable match\n  const most_probable_match = channel_nav.sort(([ , a ], [ , b ]) => {\n    if (a.type !== 'misc' || b.type !== 'misc') return 0;\n    if (a.misc_type !== 'Text' || b.misc_type !== 'Text') return 0;\n    return b.text.length - a.text.length;\n  });\n\n  const excluded_keys = new Set<string>();\n\n  const canonical_channel_nave = most_probable_match[0];\n\n  let author: MiscInferenceType | undefined;\n  // We've found an author\n  if (canonical_channel_nave) {\n    excluded_keys.add(canonical_channel_nave[0]);\n    // Now to locate its metadata\n    // We'll first get all the keys in the classdata\n    const keys = key_info.map(([ key ]) => key);\n    // Check for anything ending in 'Badges' equals 'badges'\n    const badges = keys.filter((key) => key.endsWith('Badges') || key === 'badges');\n    // The likely candidate is the one with some prefix (owner, author)\n    const likely_badges = badges.filter((key) => key.startsWith('owner') || key.startsWith('author'));\n    // If we have a likely candidate, we'll use that\n    const canonical_badges = likely_badges[0] ?? badges[0];\n    // Now we have the author and its badges\n    // Verify that its actually badges\n    const badge_key_info = key_info.find(([ key ]) => key === canonical_badges);\n    const is_badges = badge_key_info ?\n      badge_key_info[1].type === 'array' && badge_key_info[1].array_type === 'renderer' && Reflect.has(badge_key_info[1].renderers, 'MetadataBadge') :\n      false;\n\n    if (is_badges && canonical_badges) excluded_keys.add(canonical_badges);\n    // TODO: next we check for the author's thumbnail\n    author = {\n      type: 'misc',\n      misc_type: 'Author',\n      optional: false,\n      params: [\n        canonical_channel_nave[0],\n        is_badges ? canonical_badges : undefined\n      ]\n    };\n  }\n\n  if (author) {\n    key_info.push([ 'author', author ]);\n  }\n\n  return key_info.filter(([ key ]) => !excluded_keys.has(key));\n}\n\nfunction introspect2(classdata: unknown) {\n  const key_info = introspectKeysFirstPass(classdata);\n  return introspectKeysSecondPass(key_info);\n}\n\n/**\n * Introspect an example of a class in order to determine its key info and dependencies\n * @param classdata - The example of the class\n * @returns The key info and any unimplemented dependencies\n */\nexport function introspect(classdata: unknown) {\n  const key_info = introspect2(classdata);\n  const dependencies = new Map<string, any>();\n  for (const [ , value ] of key_info) {\n    if (value.type === 'renderer' || (value.type === 'array' && value.array_type === 'renderer'))\n      for (const renderer of value.renderers) {\n        const example = RENDERER_EXAMPLES[renderer];\n        if (example)\n          dependencies.set(renderer, example);\n      }\n  }\n  const unimplemented_dependencies = Array.from(dependencies).filter(([ classname ]) => !Parser.hasParser(classname));\n\n  return {\n    key_info,\n    unimplemented_dependencies\n  };\n}\n\n/**\n * Is this key ignored by the parser?\n * @param key - The key to check\n * @returns Whether or not the key is ignored\n */\nexport function isIgnoredKey(key: string | symbol) {\n  return typeof key === 'string' && IGNORED_KEYS.has(key);\n}\n\n/**\n * Given a classname and its resolved key info, create a new class\n * @param classname - The name of the class\n * @param key_info - The resolved key info\n * @param logger - The logger to log errors to\n * @returns Class based on the key info extending YTNode\n */\nexport function createRuntimeClass(classname: string, key_info: KeyInfo, logger: Parser.ParserErrorHandler): YTNodeConstructor {\n  logger({\n    error_type: 'class_not_found',\n    classname,\n    key_info\n  });\n\n  const node = class extends YTNode {\n    static type = classname;\n    static #key_info = new Map<string, InferenceType>();\n    static set key_info(key_info: KeyInfo) {\n      this.#key_info = new Map(key_info);\n    }\n    static get key_info() {\n      return [ ...this.#key_info.entries() ];\n    }\n    constructor(data: unknown) {\n      super();\n      const {\n        key_info,\n        unimplemented_dependencies\n      } = introspect(data);\n\n      const {\n        resolved_key_info,\n        changed_keys\n      } = mergeKeyInfo(node.key_info, key_info);\n\n      const did_change = changed_keys.length > 0;\n\n      if (did_change) {\n        node.key_info = resolved_key_info;\n        logger({\n          error_type: 'class_changed',\n          classname,\n          key_info: node.key_info,\n          changed_keys\n        });\n      }\n\n      for (const [ name, data ] of unimplemented_dependencies)\n        generateRuntimeClass(name, data, logger);\n\n      for (const [ key, value ] of key_info) {\n        let snake_key = camelToSnake(key);\n        if (value.type === 'misc' && value.misc_type === 'NavigationEndpoint')\n          snake_key = 'endpoint';\n        Reflect.set(this, snake_key, parse(key, value, data));\n      }\n    }\n  };\n  node.key_info = key_info;\n  Object.defineProperty(node, 'name', { value: classname, writable: false });\n  return node;\n}\n\n/**\n * Given example data for a class, introspect, implement dependencies, and create a new class\n * @param classname - The name of the class\n * @param classdata - The example of the class\n * @param logger - The logger to log errors to\n * @returns Class based on the example classdata extending YTNode\n */\nexport function generateRuntimeClass(classname: string, classdata: unknown, logger: Parser.ParserErrorHandler) {\n  const {\n    key_info,\n    unimplemented_dependencies\n  } = introspect(classdata);\n\n  const JITNode = createRuntimeClass(classname, key_info, logger);\n  Parser.addRuntimeParser(classname, JITNode);\n\n  for (const [ name, data ] of unimplemented_dependencies)\n    generateRuntimeClass(name, data, logger);\n\n  return JITNode;\n}\n\n/**\n * Generate a typescript class based on the key info\n * @param classname - The name of the class\n * @param key_info - The key info, as returned by {@link introspect}\n * @returns Typescript class file\n */\nexport function generateTypescriptClass(classname: string, key_info: KeyInfo) {\n  const props: string[] = [];\n  const constructor_lines = [\n    'super();'\n  ];\n  for (const [ key, value ] of key_info) {\n    let snake_key = camelToSnake(key);\n    if (value.type === 'misc' && value.misc_type === 'NavigationEndpoint')\n      snake_key = 'endpoint';\n    props.push(`${snake_key}${value.optional ? '?' : ''}: ${toTypeDeclaration(value)};`);\n    constructor_lines.push(`this.${snake_key} = ${toParser(key, value)};`);\n  }\n  return `class ${classname} extends YTNode {\\n  static type = '${classname}';\\n\\n  ${props.join('\\n  ')}\\n\\n  constructor(data: RawNode) {\\n    ${constructor_lines.join('\\n    ')}\\n  }\\n}\\n`;\n}\n\nfunction toTypeDeclarationObject(indentation: number, keys: KeyInfo) {\n  return `{\\n${keys.map(([ key, value ]) => `${' '.repeat((indentation + 2) * 2)}${camelToSnake(key)}${value.optional ? '?' : ''}: ${toTypeDeclaration(value, indentation + 1)}`).join(',\\n')}\\n${' '.repeat((indentation + 1) * 2)}}`;\n}\n\n/**\n * For a given inference type, get the typescript type declaration\n * @param inference_type - The inference type to get the declaration for\n * @param indentation - The indentation level (used for objects)\n * @returns Typescript type declaration\n */\nexport function toTypeDeclaration(inference_type: InferenceType, indentation = 0): string {\n  switch (inference_type.type) {\n    case 'renderer': {\n      return `${inference_type.renderers.map((type) => `YTNodes.${type}`).join(' | ')} | null`;\n    }\n    case 'array': {\n      switch (inference_type.array_type) {\n        case 'renderer':\n          return `ObservedArray<${inference_type.renderers.map((type) => `YTNodes.${type}`).join(' | ')}> | null`;\n\n        case 'primitive':\n        {\n          const items_list = inference_type.items.typeof;\n          if (inference_type.items.optional && !items_list.includes('undefined'))\n            items_list.push('undefined');\n          const items =\n            items_list.length === 1 ?\n              `${items_list[0]}` : `(${items_list.join(' | ')})`;\n          return `${items}[]`;\n        }\n\n        case 'object':\n          return `${toTypeDeclarationObject(indentation, inference_type.items.keys)}[]`;\n\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    }\n    case 'object': {\n      return toTypeDeclarationObject(indentation, inference_type.keys);\n    }\n    case 'misc': {\n      switch (inference_type.misc_type) {\n        case 'Thumbnail':\n          return 'Thumbnail[]';\n        default:\n          return inference_type.misc_type;\n      }\n    }\n    case 'primitive': {\n      return inference_type.typeof.join(' | ');\n    }\n  }\n}\n\nfunction toParserObject(indentation: number, keys: KeyInfo, key_path: string[], key: string) {\n  const new_keypath = [ ...key_path, key ];\n  return `{\\n${keys.map(([ key, value ]) => `${' '.repeat((indentation + 2) * 2)}${camelToSnake(key)}: ${toParser(key, value, new_keypath, indentation + 1)}`).join(',\\n')}\\n${' '.repeat((indentation + 1) * 2)}}`;\n}\n\n/**\n * Generate statements to parse a given inference type\n * @param key - The key to parse\n * @param inference_type - The inference type to parse\n * @param key_path - The path to the key (excluding the key itself)\n * @param indentation - The indentation level (used for objects)\n * @returns Statement to parse the given key\n */\nexport function toParser(key: string, inference_type: InferenceType, key_path: string[] = [ 'data' ], indentation = 1) {\n  let parser = 'undefined';\n  switch (inference_type.type) {\n    case 'renderer':\n      {\n        parser = `Parser.parseItem(${key_path.join('.')}.${key}, ${toParserValidTypes(inference_type.renderers)})`;\n      }\n      break;\n    case 'array':\n      {\n        switch (inference_type.array_type) {\n          case 'renderer':\n            parser = `Parser.parse(${key_path.join('.')}.${key}, true, ${toParserValidTypes(inference_type.renderers)})`;\n            break;\n\n          case 'object':\n            parser = `${key_path.join('.')}.${key}.map((item: any) => (${toParserObject(indentation, inference_type.items.keys, [], 'item')}))`;\n            break;\n\n          case 'primitive':\n            parser = `${key_path.join('.')}.${key}`;\n            break;\n\n          default:\n            throw new Error('Unreachable code reached! Switch missing case!');\n        }\n      }\n      break;\n    case 'object':\n      {\n        parser = toParserObject(indentation, inference_type.keys, key_path, key);\n      }\n      break;\n    case 'misc':\n      switch (inference_type.misc_type) {\n        case 'Thumbnail':\n          parser = `Thumbnail.fromResponse(${key_path.join('.')}.${key})`;\n          break;\n        case 'Author':\n        {\n          const author_parser = `new Author(${key_path.join('.')}.${inference_type.params[0]}, ${inference_type.params[1] ? `${key_path.join('.')}.${inference_type.params[1]}` : 'undefined'})`;\n          if (inference_type.optional)\n            return `Reflect.has(${key_path.join('.')}, '${inference_type.params[0]}') ? ${author_parser} : undefined`;\n          return author_parser;\n        }\n        default:\n          parser = `new ${inference_type.misc_type}(${key_path.join('.')}.${key})`;\n          break;\n      }\n      if (parser === 'undefined')\n        throw new Error('Unreachable code reached! Switch missing case!');\n      break;\n    case 'primitive':\n      parser = `${key_path.join('.')}.${key}`;\n      break;\n  }\n  if (inference_type.optional)\n    return `Reflect.has(${key_path.join('.')}, '${key}') ? ${parser} : undefined`;\n  return parser;\n}\n\nfunction toParserValidTypes(types: string[]) {\n  if (types.length === 1) {\n    return `YTNodes.${types[0]}`;\n  }\n\n  return `[ ${types.map((type) => `YTNodes.${type}`).join(', ')} ]`;\n}\n\nfunction accessDataFromKeyPath(root: any, key_path: string[]) {\n  let data = root;\n  for (const key of key_path)\n    data = data[key];\n  return data;\n}\n\nfunction hasDataFromKeyPath(root: any, key_path: string[]) {\n  let data = root;\n  for (const key of key_path)\n    if (!Reflect.has(data, key))\n      return false;\n    else\n      data = data[key];\n  return true;\n}\n\nfunction parseObject(key: string, data: unknown, key_path: string[], keys: KeyInfo, should_optional: boolean) {\n  const obj: any = {};\n  const new_key_path = [ ...key_path, key ];\n  for (const [ key, value ] of keys) {\n    obj[key] = should_optional ? parse(key, value, data, new_key_path) : undefined;\n  }\n  return obj;\n}\n\n/**\n * Parse a value from a given key path using the given inference type\n * @param key - The key to parse\n * @param inference_type - The inference type to parse\n * @param data - The data to parse from\n * @param key_path - The path to the key (excluding the key itself)\n * @returns The parsed value\n */\nexport function parse(key: string, inference_type: InferenceType, data: unknown, key_path: string[] = [ 'data' ]) {\n  const should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [ ...key_path, key ]);\n  switch (inference_type.type) {\n    case 'renderer': {\n      return should_optional ? Parser.parseItem(accessDataFromKeyPath({ data }, [ ...key_path, key ]), inference_type.renderers.map((type) => Parser.getParserByName(type))) : undefined;\n    }\n    case 'array': {\n      switch (inference_type.array_type) {\n        case 'renderer':\n          return should_optional ? Parser.parse(accessDataFromKeyPath({ data }, [ ...key_path, key ]), true, inference_type.renderers.map((type) => Parser.getParserByName(type))) : undefined;\n        case 'object':\n          return should_optional ? accessDataFromKeyPath({ data }, [ ...key_path, key ]).map((_: any, idx: number) => {\n            return parseObject(`${idx}`, data, [ ...key_path, key ], inference_type.items.keys, should_optional);\n          }) : undefined;\n        case 'primitive':\n          return should_optional ? accessDataFromKeyPath({ data }, [ ...key_path, key ]) : undefined;\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    }\n    case 'object': {\n      return parseObject(key, data, key_path, inference_type.keys, should_optional);\n    }\n    case 'misc':\n      switch (inference_type.misc_type) {\n        case 'NavigationEndpoint':\n          return should_optional ? new NavigationEndpoint(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Text':\n          return should_optional ? new Text(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Thumbnail':\n          return should_optional ? Thumbnail.fromResponse(accessDataFromKeyPath({ data }, [ ...key_path, key ])) : undefined;\n        case 'Author': {\n          const author_should_optional = !inference_type.optional || hasDataFromKeyPath({ data }, [ ...key_path, inference_type.params[0] ]);\n          return author_should_optional ? new Author(\n            accessDataFromKeyPath({ data }, [ ...key_path, inference_type.params[0] ]),\n            inference_type.params[1] ?\n              accessDataFromKeyPath({ data }, [ ...key_path, inference_type.params[1] ]) : undefined\n          ) : undefined;\n        }\n        default:\n          throw new Error('Unreachable code reached! Switch missing case!');\n      }\n    case 'primitive':\n      return accessDataFromKeyPath({ data }, [ ...key_path, key ]);\n  }\n}\n\n/**\n * Merges two sets of key info, resolving any conflicts\n * @param key_info - The current key info\n * @param new_key_info - The new key info\n * @returns The merged key info\n */\nexport function mergeKeyInfo(key_info: KeyInfo, new_key_info: KeyInfo) {\n  const changed_keys = new Map<string, InferenceType>();\n  const current_keys = new Set(key_info.map(([ key ]) => key));\n  const new_keys = new Set(new_key_info.map(([ key ]) => key));\n\n  const added_keys = new_key_info.filter(([ key ]) => !current_keys.has(key));\n  const removed_keys = key_info.filter(([ key ]) => !new_keys.has(key));\n\n  const common_keys = key_info.filter(([ key ]) => new_keys.has(key));\n\n  const new_key_map = new Map(new_key_info);\n\n  for (const [ key, type ] of common_keys) {\n    const new_type = new_key_map.get(key);\n    if (!new_type) continue;\n    if (type.type !== new_type.type) {\n      // We've got a type mismatch, this is unknown, we do not resolve unions\n      changed_keys.set(key, {\n        type: 'primitive',\n        typeof: [ 'unknown' ],\n        optional: true\n      });\n      continue;\n    }\n    // We've got the same type, so we can now resolve the changes\n    switch (type.type) {\n      case 'object':\n        {\n          if (new_type.type !== 'object') continue;\n          const { resolved_key_info } = mergeKeyInfo(type.keys, new_type.keys);\n          const resolved_key: InferenceType = {\n            type: 'object',\n            keys: resolved_key_info,\n            optional: type.optional || new_type.optional\n          };\n          const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n      case 'renderer':\n        {\n          if (new_type.type !== 'renderer') continue;\n          const union_map = {\n            ...type.renderers,\n            ...new_type.renderers\n          };\n          const either_optional = type.optional || new_type.optional;\n          const resolved_key: InferenceType = {\n            type: 'renderer',\n            renderers: union_map,\n            optional: either_optional\n          };\n          const did_change = JSON.stringify({\n            ...resolved_key,\n            renderers: Object.keys(resolved_key.renderers)\n          }) !== JSON.stringify({\n            ...type,\n            renderers: Object.keys(type.renderers)\n          });\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n      case 'array': {\n        if (new_type.type !== 'array') continue;\n        switch (type.array_type) {\n          case 'renderer':\n            {\n              if (new_type.array_type !== 'renderer') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n              const union_map = {\n                ...type.renderers,\n                ...new_type.renderers\n              };\n              const either_optional = type.optional || new_type.optional;\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'renderer',\n                renderers: union_map,\n                optional: either_optional\n              };\n              const did_change = JSON.stringify({\n                ...resolved_key,\n                renderers: Object.keys(resolved_key.renderers)\n              }) !== JSON.stringify({\n                ...type,\n                renderers: Object.keys(type.renderers)\n              });\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          case 'object':\n            {\n              if (new_type.array_type === 'primitive' && new_type.items.typeof.length == 1 && new_type.items.typeof[0] === 'never') {\n              // It's an empty array. We assume the type is unchanged\n                continue;\n              }\n              if (new_type.array_type !== 'object') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n              const { resolved_key_info } = mergeKeyInfo(type.items.keys, new_type.items.keys);\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'object',\n                items: {\n                  type: 'object',\n                  keys: resolved_key_info,\n                  optional: type.items.optional || new_type.items.optional\n                },\n                optional: type.optional || new_type.optional\n              };\n              const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          case 'primitive':\n            {\n              if (type.items.typeof.includes('never') && new_type.array_type === 'object') {\n              // Type is now known from previously unknown\n                changed_keys.set(key, new_type);\n                continue;\n              }\n              if (new_type.array_type !== 'primitive') {\n              // Type mismatch\n                changed_keys.set(key, {\n                  type: 'array',\n                  array_type: 'primitive',\n                  items: {\n                    type: 'primitive',\n                    typeof: [ 'unknown' ],\n                    optional: true\n                  },\n                  optional: true\n                });\n                continue;\n              }\n\n              const key_types = new Set([ ...new_type.items.typeof, ...type.items.typeof ]);\n              if (key_types.size > 1 && key_types.has('never'))\n                key_types.delete('never');\n\n              const resolved_key: InferenceType = {\n                type: 'array',\n                array_type: 'primitive',\n                items: {\n                  type: 'primitive',\n                  typeof: Array.from(key_types),\n                  optional: type.items.optional || new_type.items.optional\n                },\n                optional: type.optional || new_type.optional\n              };\n              const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n              if (did_change) changed_keys.set(key, resolved_key);\n            }\n            break;\n          default:\n            throw new Error('Unreachable code reached! Switch missing case!');\n        }\n        break;\n      }\n      case 'misc':\n        {\n          if (new_type.type !== 'misc') continue;\n          if (type.misc_type !== new_type.misc_type) {\n          // We've got a type mismatch, this is unknown, we do not resolve unions\n            changed_keys.set(key, {\n              type: 'primitive',\n              typeof: [ 'unknown' ],\n              optional: true\n            });\n          }\n          switch (type.misc_type) {\n            case 'Author':\n              {\n                if (new_type.misc_type !== 'Author') break;\n                const had_optional_param = type.params[1] || new_type.params[1];\n                const either_optional = type.optional || new_type.optional;\n                const resolved_key: MiscInferenceType = {\n                  type: 'misc',\n                  misc_type: 'Author',\n                  optional: either_optional,\n                  params: [ new_type.params[0], had_optional_param ]\n                };\n                const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n                if (did_change) changed_keys.set(key, resolved_key);\n              }\n              break;\n          // Other cases can not change\n          }\n        }\n        break;\n      case 'primitive':\n        {\n          if (new_type.type !== 'primitive') continue;\n          const resolved_key: InferenceType = {\n            type: 'primitive',\n            typeof: Array.from(new Set([ ...new_type.typeof, ...type.typeof ])),\n            optional: type.optional || new_type.optional\n          };\n          const did_change = JSON.stringify(resolved_key) !== JSON.stringify(type);\n          if (did_change) changed_keys.set(key, resolved_key);\n        }\n        break;\n    }\n  }\n\n  for (const [ key, type ] of added_keys) {\n    changed_keys.set(key, {\n      ...type,\n      optional: true\n    });\n  }\n\n  for (const [ key, type ] of removed_keys) {\n    changed_keys.set(key, {\n      ...type,\n      optional: true\n    });\n  }\n\n  const unchanged_keys = key_info.filter(([ key ]) => !changed_keys.has(key));\n\n  const resolved_key_info_map = new Map([ ...unchanged_keys, ...changed_keys ]);\n  const resolved_key_info = [ ...resolved_key_info_map.entries() ];\n\n  return {\n    resolved_key_info,\n    changed_keys: [ ...changed_keys.entries() ]\n  };\n}", "import { YTNode, observe } from './helpers.js';\nimport { Thumbnail } from './misc.js';\nimport { NavigationEndpoint, LiveChatItemList, LiveChatHeader, LiveChatParticipantsList, Message } from './nodes.js';\nimport * as Parser from './parser.js';\n\nimport type { RawNode } from './index.js';\nimport type { ObservedArray } from './helpers.js';\n\nexport class ItemSectionContinuation extends YTNode {\n  static readonly type = 'itemSectionContinuation';\n\n  contents: ObservedArray<YTNode> | null;\n  continuation?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    if (Array.isArray(data.continuations)) {\n      this.continuation = data.continuations?.at(0)?.nextContinuationData?.continuation;\n    }\n  }\n}\n\nexport class NavigateAction extends YTNode {\n  static readonly type = 'navigateAction';\n\n  endpoint: NavigationEndpoint;\n\n  constructor(data: RawNode) {\n    super();\n    this.endpoint = new NavigationEndpoint(data.endpoint);\n  }\n}\n\nexport class ShowMiniplayerCommand extends YTNode {\n  static readonly type = 'showMiniplayerCommand';\n\n  miniplayer_command: NavigationEndpoint;\n  show_premium_branding: boolean;\n\n  constructor(data: RawNode) {\n    super();\n    this.miniplayer_command = new NavigationEndpoint(data.miniplayerCommand);\n    this.show_premium_branding = data.showPremiumBranding;\n  }\n}\n\nexport { default as AppendContinuationItemsAction } from './classes/actions/AppendContinuationItemsAction.js';\n\nexport class ReloadContinuationItemsCommand extends YTNode {\n  static readonly type = 'reloadContinuationItemsCommand';\n\n  target_id: string;\n  contents: ObservedArray<YTNode> | null;\n  slot?: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.target_id = data.targetId;\n    this.contents = Parser.parse(data.continuationItems, true);\n    this.slot = data?.slot;\n  }\n}\n\nexport class SectionListContinuation extends YTNode {\n  static readonly type = 'sectionListContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true);\n    this.continuation =\n      data.continuations?.[0]?.nextContinuationData?.continuation ||\n      data.continuations?.[0]?.reloadContinuationData?.continuation || null;\n  }\n}\n\nexport class MusicPlaylistShelfContinuation extends YTNode {\n  static readonly type = 'musicPlaylistShelfContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parse(data.contents, true);\n    this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;\n  }\n}\n\nexport class MusicShelfContinuation extends YTNode {\n  static readonly type = 'musicShelfContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.continuation =\n      data.continuations?.[0].nextContinuationData?.continuation ||\n      data.continuations?.[0].reloadContinuationData?.continuation || null;\n  }\n}\n\nexport class GridContinuation extends YTNode {\n  static readonly type = 'gridContinuation';\n\n  continuation: string;\n  items: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.items = Parser.parse(data.items, true);\n    this.continuation = data.continuations?.[0].nextContinuationData.continuation || null;\n  }\n\n  get contents() {\n    return this.items;\n  }\n}\n\nexport class PlaylistPanelContinuation extends YTNode {\n  static readonly type = 'playlistPanelContinuation';\n\n  continuation: string;\n  contents: ObservedArray<YTNode> | null;\n\n  constructor(data: RawNode) {\n    super();\n    this.contents = Parser.parseArray(data.contents);\n    this.continuation = data.continuations?.[0]?.nextContinuationData?.continuation ||\n      data.continuations?.[0]?.nextRadioContinuationData?.continuation || null;\n  }\n}\n\nexport class Continuation extends YTNode {\n  static readonly type = 'continuation';\n\n  continuation_type: string;\n  timeout_ms?: number;\n  time_until_last_message_ms?: number;\n  token: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.continuation_type = data.type;\n    this.timeout_ms = data.continuation?.timeoutMs;\n    this.time_until_last_message_ms = data.continuation?.timeUntilLastMessageMsec;\n    this.token = data.continuation?.continuation;\n  }\n}\n\nexport class LiveChatContinuation extends YTNode {\n  static readonly type = 'liveChatContinuation';\n\n  actions: ObservedArray<YTNode>;\n  action_panel: YTNode | null;\n  item_list: LiveChatItemList | null;\n  header: LiveChatHeader | null;\n  participants_list: LiveChatParticipantsList | null;\n  popout_message: Message | null;\n  emojis: {\n    emoji_id: string;\n    shortcuts: string[];\n    search_terms: string[];\n    image: Thumbnail[];\n  }[];\n  continuation: Continuation;\n  viewer_name: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.actions = Parser.parse(data.actions?.map((action: any) => {\n      delete action.clickTrackingParams;\n      return action;\n    }), true) || observe<YTNode>([]);\n\n    this.action_panel = Parser.parseItem(data.actionPanel);\n    this.item_list = Parser.parseItem(data.itemList, LiveChatItemList);\n    this.header = Parser.parseItem(data.header, LiveChatHeader);\n    this.participants_list = Parser.parseItem(data.participantsList, LiveChatParticipantsList);\n    this.popout_message = Parser.parseItem(data.popoutMessage, Message);\n\n    this.emojis = data.emojis?.map((emoji: any) => ({\n      emoji_id: emoji.emojiId,\n      shortcuts: emoji.shortcuts,\n      search_terms: emoji.searchTerms,\n      image: Thumbnail.fromResponse(emoji.image),\n      is_custom_emoji: emoji.isCustomEmoji\n    })) || [];\n\n    let continuation, type;\n\n    if (data.continuations?.[0].timedContinuationData) {\n      type = 'timed';\n      continuation = data.continuations?.[0].timedContinuationData;\n    } else if (data.continuations?.[0].invalidationContinuationData) {\n      type = 'invalidation';\n      continuation = data.continuations?.[0].invalidationContinuationData;\n    } else if (data.continuations?.[0].liveChatReplayContinuationData) {\n      type = 'replay';\n      continuation = data.continuations?.[0].liveChatReplayContinuationData;\n    }\n\n    this.continuation = new Continuation({ continuation, type });\n\n    this.viewer_name = data.viewerName;\n  }\n}\n\nexport class ContinuationCommand extends YTNode {\n  static readonly type = 'ContinuationCommand';\n\n  request: string;\n  token: string;\n\n  constructor(data: RawNode) {\n    super();\n    this.request = data.request;\n    this.token = data.token;\n  }\n}", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: misc/common.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"misc\";\n\nexport interface HttpHeader {\n  name?: string | undefined;\n  value?: string | undefined;\n}\n\nexport interface FormatId {\n  itag?: number | undefined;\n  lastModified?: number | undefined;\n  xtags?: string | undefined;\n}\n\nexport interface InitRange {\n  start?: number | undefined;\n  end?: number | undefined;\n}\n\nexport interface IndexRange {\n  start?: number | undefined;\n  end?: number | undefined;\n}\n\nexport interface KeyValuePair {\n  key?: string | undefined;\n  value?: string | undefined;\n}\n\nexport interface FormatXTags {\n  xtags: KeyValuePair[];\n}\n\nfunction createBaseHttpHeader(): HttpHeader {\n  return { name: undefined, value: undefined };\n}\n\nexport const HttpHeader: MessageFns<HttpHeader> = {\n  encode(message: HttpHeader, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.name !== undefined) {\n      writer.uint32(10).string(message.name);\n    }\n    if (message.value !== undefined) {\n      writer.uint32(18).string(message.value);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): HttpHeader {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseHttpHeader();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.name = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.value = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseFormatId(): FormatId {\n  return { itag: undefined, lastModified: undefined, xtags: undefined };\n}\n\nexport const FormatId: MessageFns<FormatId> = {\n  encode(message: FormatId, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.itag !== undefined) {\n      writer.uint32(8).int32(message.itag);\n    }\n    if (message.lastModified !== undefined) {\n      writer.uint32(16).uint64(message.lastModified);\n    }\n    if (message.xtags !== undefined) {\n      writer.uint32(26).string(message.xtags);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): FormatId {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseFormatId();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.itag = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.lastModified = longToNumber(reader.uint64());\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.xtags = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInitRange(): InitRange {\n  return { start: undefined, end: undefined };\n}\n\nexport const InitRange: MessageFns<InitRange> = {\n  encode(message: InitRange, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.start !== undefined) {\n      writer.uint32(8).int32(message.start);\n    }\n    if (message.end !== undefined) {\n      writer.uint32(16).int32(message.end);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InitRange {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInitRange();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.start = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.end = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseIndexRange(): IndexRange {\n  return { start: undefined, end: undefined };\n}\n\nexport const IndexRange: MessageFns<IndexRange> = {\n  encode(message: IndexRange, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.start !== undefined) {\n      writer.uint32(8).int32(message.start);\n    }\n    if (message.end !== undefined) {\n      writer.uint32(16).int32(message.end);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): IndexRange {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseIndexRange();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.start = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.end = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseKeyValuePair(): KeyValuePair {\n  return { key: undefined, value: undefined };\n}\n\nexport const KeyValuePair: MessageFns<KeyValuePair> = {\n  encode(message: KeyValuePair, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.key !== undefined) {\n      writer.uint32(10).string(message.key);\n    }\n    if (message.value !== undefined) {\n      writer.uint32(18).string(message.value);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): KeyValuePair {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseKeyValuePair();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.key = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.value = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseFormatXTags(): FormatXTags {\n  return { xtags: [] };\n}\n\nexport const FormatXTags: MessageFns<FormatXTags> = {\n  encode(message: FormatXTags, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.xtags) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): FormatXTags {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseFormatXTags();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.xtags.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import type Player from '../../../core/Player.js';\nimport type { RawNode } from '../../index.js';\nimport { FormatXTags } from '../../../../protos/generated/misc/common.js';\nimport { base64ToU8 } from '../../../utils/Utils.js';\n\nexport type ProjectionType = 'RECTANGULAR' | 'EQUIRECTANGULAR' | 'EQUIRECTANGULAR_THREED_TOP_BOTTOM' | 'MESH';\nexport type SpatialAudioType = 'AMBISONICS_5_1' | 'AMBISONICS_QUAD' | 'FOA_WITH_NON_DIEGETIC';\nexport type StereoLayout = 'LEFT_RIGHT' | 'TOP_BOTTOM';\n\nexport type Range = {\n  start: number;\n  end: number;\n};\n\nexport type ColorInfo = {\n  primaries?: string;\n  transfer_characteristics?: string;\n  matrix_coefficients?: string;\n};\n\nexport type AudioTrack = {\n  audio_is_default: boolean;\n  display_name: string;\n  id: string;\n};\n\nexport type CaptionTrack = {\n  display_name: string;\n  vss_id: string;\n  language_code: string;\n  kind?: 'asr' | 'frc';\n  id: string;\n};\n\nexport default class Format {\n  readonly #this_response_nsig_cache?: Map<string, string>;\n\n  public itag: number;\n  public url?: string;\n  public width?: number;\n  public height?: number;\n  public last_modified: Date;\n  public last_modified_ms: string;\n  public content_length?: number;\n  public quality?: string;\n  public xtags?: string;\n  public drm_families?: string[];\n  public fps?: number;\n  public quality_label?: string;\n  public projection_type?: ProjectionType;\n  public average_bitrate?: number;\n  public bitrate: number;\n  public spatial_audio_type?: SpatialAudioType;\n  public target_duration_dec?: number;\n  public fair_play_key_uri?: string;\n  public stereo_layout?: StereoLayout;\n  public max_dvr_duration_sec?: number;\n  public high_replication?: boolean;\n  public audio_quality?: string;\n  public approx_duration_ms: number;\n  public audio_sample_rate?: number;\n  public audio_channels?: number;\n  public loudness_db?: number;\n  public signature_cipher?: string;\n  public is_drc?: boolean;\n  public drm_track_type?: string;\n  public distinct_params?: string;\n  public track_absolute_loudness_lkfs?: number;\n  public mime_type: string;\n  public is_type_otf: boolean;\n  public init_range?: Range;\n  public index_range?: Range;\n  public cipher?: string;\n  public audio_track?: AudioTrack;\n  public has_audio: boolean;\n  public has_video: boolean;\n  public has_text: boolean;\n  public language?: string | null;\n  public is_dubbed?: boolean;\n  public is_auto_dubbed?: boolean;\n  public is_descriptive?: boolean;\n  public is_secondary?: boolean;\n  public is_original?: boolean;\n  public color_info?: ColorInfo;\n  public caption_track?: CaptionTrack;\n\n  constructor(data: RawNode, this_response_nsig_cache?: Map<string, string>) {\n    if (this_response_nsig_cache)\n      this.#this_response_nsig_cache = this_response_nsig_cache;\n\n    this.itag = data.itag;\n    this.mime_type = data.mimeType;\n    this.is_type_otf = data.type === 'FORMAT_STREAM_TYPE_OTF';\n    this.bitrate = data.bitrate;\n    this.average_bitrate = data.averageBitrate;\n\n    if (Reflect.has(data, 'width') && Reflect.has(data, 'height')) {\n      this.width = parseInt(data.width);\n      this.height = parseInt(data.height);\n    }\n\n    if (Reflect.has(data, 'projectionType'))\n      this.projection_type = data.projectionType;\n\n    if (Reflect.has(data, 'stereoLayout'))\n      this.stereo_layout = data.stereoLayout?.replace('STEREO_LAYOUT_', '');\n\n    if (Reflect.has(data, 'initRange'))\n      this.init_range = {\n        start: parseInt(data.initRange.start),\n        end: parseInt(data.initRange.end)\n      };\n\n    if (Reflect.has(data, 'indexRange'))\n      this.index_range = {\n        start: parseInt(data.indexRange.start),\n        end: parseInt(data.indexRange.end)\n      };\n\n    this.last_modified = new Date(Math.floor(parseInt(data.lastModified) / 1000));\n    this.last_modified_ms = data.lastModified;\n\n    if (Reflect.has(data, 'contentLength'))\n      this.content_length = parseInt(data.contentLength);\n\n    if (Reflect.has(data, 'quality'))\n      this.quality = data.quality;\n\n    if (Reflect.has(data, 'qualityLabel'))\n      this.quality_label = data.qualityLabel;\n\n    if (Reflect.has(data, 'fps'))\n      this.fps = data.fps;\n\n    if (Reflect.has(data, 'url'))\n      this.url = data.url;\n\n    if (Reflect.has(data, 'cipher'))\n      this.cipher = data.cipher;\n\n    if (Reflect.has(data, 'signatureCipher'))\n      this.signature_cipher = data.signatureCipher;\n\n    if (Reflect.has(data, 'audioQuality'))\n      this.audio_quality = data.audioQuality;\n\n    this.approx_duration_ms = parseInt(data.approxDurationMs);\n\n    if (Reflect.has(data, 'audioSampleRate'))\n      this.audio_sample_rate = parseInt(data.audioSampleRate);\n\n    if (Reflect.has(data, 'audioChannels'))\n      this.audio_channels = data.audioChannels;\n\n    if (Reflect.has(data, 'loudnessDb'))\n      this.loudness_db = data.loudnessDb;\n\n    if (Reflect.has(data, 'spatialAudioType'))\n      this.spatial_audio_type = data.spatialAudioType?.replace('SPATIAL_AUDIO_TYPE_', '');\n\n    if (Reflect.has(data, 'maxDvrDurationSec'))\n      this.max_dvr_duration_sec = data.maxDvrDurationSec;\n\n    if (Reflect.has(data, 'targetDurationSec'))\n      this.target_duration_dec = data.targetDurationSec;\n\n    this.has_audio = !!data.audioBitrate || !!data.audioQuality;\n    this.has_video = !!data.qualityLabel;\n    this.has_text = !!data.captionTrack;\n\n    if (Reflect.has(data, 'xtags'))\n      this.xtags = data.xtags;\n\n    if (Reflect.has(data, 'fairPlayKeyUri'))\n      this.fair_play_key_uri = data.fairPlayKeyUri;\n\n    if (Reflect.has(data, 'drmFamilies'))\n      this.drm_families = data.drmFamilies;\n\n    if (Reflect.has(data, 'drmTrackType'))\n      this.drm_track_type = data.drmTrackType;\n\n    if (Reflect.has(data, 'distinctParams'))\n      this.distinct_params = data.distinctParams;\n\n    if (Reflect.has(data, 'trackAbsoluteLoudnessLkfs'))\n      this.track_absolute_loudness_lkfs = data.trackAbsoluteLoudnessLkfs;\n\n    if (Reflect.has(data, 'highReplication'))\n      this.high_replication = data.highReplication;\n\n    if (Reflect.has(data, 'colorInfo'))\n      this.color_info = {\n        primaries: data.colorInfo.primaries?.replace('COLOR_PRIMARIES_', ''),\n        transfer_characteristics: data.colorInfo.transferCharacteristics?.replace('COLOR_TRANSFER_CHARACTERISTICS_', ''),\n        matrix_coefficients: data.colorInfo.matrixCoefficients?.replace('COLOR_MATRIX_COEFFICIENTS_', '')\n      };\n\n    if (Reflect.has(data, 'audioTrack'))\n      this.audio_track = {\n        audio_is_default: data.audioTrack.audioIsDefault,\n        display_name: data.audioTrack.displayName,\n        id: data.audioTrack.id\n      };\n\n    if (Reflect.has(data, 'captionTrack'))\n      this.caption_track = {\n        display_name: data.captionTrack.displayName,\n        vss_id: data.captionTrack.vssId,\n        language_code: data.captionTrack.languageCode,\n        kind: data.captionTrack.kind,\n        id: data.captionTrack.id\n      };\n\n    if (this.has_audio || this.has_text) {\n      const xtags = this.xtags\n        ? FormatXTags.decode(base64ToU8(decodeURIComponent(this.xtags).replace(/-/g, '+').replace(/_/g, '/'))).xtags\n        : [];\n\n      this.language = xtags.find((tag) => tag.key === 'lang')?.value || null;\n\n      if (this.has_audio) {\n        this.is_drc = !!data.isDrc || xtags.some((tag) => tag.key === 'drc' && tag.value === '1');\n\n        const audio_content = xtags.find((tag) => tag.key === 'acont')?.value;\n        this.is_dubbed = audio_content === 'dubbed';\n        this.is_descriptive = audio_content === 'descriptive';\n        this.is_secondary = audio_content === 'secondary';\n        this.is_auto_dubbed = audio_content === 'dubbed-auto';\n        this.is_original = audio_content === 'original' || (!this.is_dubbed && !this.is_descriptive && !this.is_secondary && !this.is_auto_dubbed && !this.is_drc);\n      }\n\n      // Some text tracks don't have xtags while others do\n      if (this.has_text && !this.language && this.caption_track) {\n        this.language = this.caption_track.language_code;\n      }\n    }\n  }\n\n  /**\n   * Deciphers the URL using the provided player instance.\n   * @param player - An optional instance of the Player class used to decipher the URL.\n   * @returns The deciphered URL as a string. If no player is provided, returns the original URL or an empty string.\n   */\n  decipher(player?: Player): string {\n    if (!player)\n      return this.url || '';\n    return player.decipher(this.url, this.signature_cipher, this.cipher, this.#this_response_nsig_cache);\n  }\n}", "import Thumbnail from './Thumbnail.js';\nimport type { RawNode } from '../../index.js';\n\nexport default class VideoDetails {\n  id: string;\n  channel_id: string;\n  title: string;\n  duration: number;\n  keywords: string[];\n  is_owner_viewing: boolean;\n  short_description: string;\n  thumbnail: Thumbnail[];\n  allow_ratings: boolean;\n  view_count: number;\n  author: string;\n  is_private: boolean;\n  is_live: boolean;\n  is_live_content: boolean;\n  is_live_dvr_enabled: boolean;\n  is_upcoming: boolean;\n  is_crawlable: boolean;\n  is_post_live_dvr: boolean;\n  is_low_latency_live_stream: boolean;\n  live_chunk_readahead?: number;\n\n  constructor(data: RawNode) {\n    this.id = data.videoId;\n    this.channel_id = data.channelId;\n    this.title = data.title;\n    this.duration = parseInt(data.lengthSeconds);\n    this.keywords = data.keywords;\n    this.is_owner_viewing = !!data.isOwnerViewing;\n    this.short_description = data.shortDescription;\n    this.thumbnail = Thumbnail.fromResponse(data.thumbnail);\n    this.allow_ratings = !!data.allowRatings;\n    this.view_count = parseInt(data.viewCount);\n    this.author = data.author;\n    this.is_private = !!data.isPrivate;\n    this.is_live = !!data.isLive;\n    this.is_live_content = !!data.isLiveContent;\n    this.is_live_dvr_enabled = !!data.isLiveDvrEnabled;\n    this.is_low_latency_live_stream = !!data.isLowLatencyLiveStream;\n    this.is_upcoming = !!data.isUpcoming;\n    this.is_post_live_dvr = !!data.isPostLiveDvr;\n    this.is_crawlable = !!data.isCrawlable;\n    this.live_chunk_readahead = data.liveChunkReadahead;\n  }\n}", "export { default as AccountInfo } from './AccountInfo.js';\nexport { default as Channel } from './Channel.js';\nexport * from './Channel.js';\nexport { default as Comments } from './Comments.js';\nexport { default as Guide } from './Guide.js';\nexport { default as History } from './History.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as HashtagFeed } from './HashtagFeed.js';\nexport { default as ItemMenu } from './ItemMenu.js';\nexport { default as Library } from './Library.js';\nexport { default as LiveChat } from './LiveChat.js';\nexport { default as NotificationsMenu } from './NotificationsMenu.js';\nexport { default as Playlist } from './Playlist.js';\nexport { default as Search } from './Search.js';\nexport { default as Settings } from './Settings.js';\nexport { default as SmoothedQueue } from './SmoothedQueue.js';\nexport { default as VideoInfo } from './VideoInfo.js';\nexport { default as TranscriptInfo } from './TranscriptInfo.js';", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport AccountSectionList from '../classes/AccountSectionList.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport type { IParsedResponse } from '../types/index.js';\nimport type AccountItemSection from '../classes/AccountItemSection.js';\n\nexport default class AccountInfo {\n  readonly #page: IParsedResponse;\n\n  contents: AccountItemSection | null;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse(response.data);\n\n    if (!this.#page.contents)\n      throw new InnertubeError('Page contents not found');\n\n    const account_section_list = this.#page.contents.array().as(AccountSectionList)[0];\n\n    if (!account_section_list)\n      throw new InnertubeError('Account section list not found');\n\n    this.contents = account_section_list.contents[0];\n  }\n\n  get page(): IParsedResponse {\n    return this.#page;\n  }\n}", "import type { IParsedResponse } from '../../parser/index.js';\nimport { Parser, ReloadContinuationItemsCommand } from '../../parser/index.js';\nimport { concatMemos, InnertubeError } from '../../utils/Utils.js';\n\nimport BackstagePost from '../../parser/classes/BackstagePost.js';\nimport SharedPost from '../../parser/classes/SharedPost.js';\nimport Channel from '../../parser/classes/Channel.js';\nimport CompactVideo from '../../parser/classes/CompactVideo.js';\nimport GridChannel from '../../parser/classes/GridChannel.js';\nimport GridPlaylist from '../../parser/classes/GridPlaylist.js';\nimport GridVideo from '../../parser/classes/GridVideo.js';\nimport LockupView from '../../parser/classes/LockupView.js';\nimport Playlist from '../../parser/classes/Playlist.js';\nimport PlaylistPanelVideo from '../../parser/classes/PlaylistPanelVideo.js';\nimport PlaylistVideo from '../../parser/classes/PlaylistVideo.js';\nimport Post from '../../parser/classes/Post.js';\nimport ReelItem from '../../parser/classes/ReelItem.js';\nimport ShortsLockupView from '../../parser/classes/ShortsLockupView.js';\nimport ReelShelf from '../../parser/classes/ReelShelf.js';\nimport RichShelf from '../../parser/classes/RichShelf.js';\nimport Shelf from '../../parser/classes/Shelf.js';\nimport Tab from '../../parser/classes/Tab.js';\nimport Video from '../../parser/classes/Video.js';\n\nimport AppendContinuationItemsAction from '../../parser/classes/actions/AppendContinuationItemsAction.js';\nimport ContinuationItem from '../../parser/classes/ContinuationItem.js';\nimport TwoColumnBrowseResults from '../../parser/classes/TwoColumnBrowseResults.js';\nimport TwoColumnSearchResults from '../../parser/classes/TwoColumnSearchResults.js';\nimport WatchCardCompactVideo from '../../parser/classes/WatchCardCompactVideo.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { Memo, ObservedArray } from '../../parser/helpers.js';\nimport type MusicQueue from '../../parser/classes/MusicQueue.js';\nimport type RichGrid from '../../parser/classes/RichGrid.js';\nimport type SectionList from '../../parser/classes/SectionList.js';\nimport type SecondarySearchContainer from '../../parser/classes/SecondarySearchContainer.js';\nimport type BrowseFeedActions from '../../parser/classes/BrowseFeedActions.js';\nimport type ProfileColumn from '../../parser/classes/ProfileColumn.js';\n\nexport default class Feed<T extends IParsedResponse = IParsedResponse> {\n  readonly #page: T;\n  readonly #actions: Actions;\n  readonly #memo: Memo;\n\n  #continuation?: ObservedArray<ContinuationItem>;\n  \n  constructor(actions: Actions, response: ApiResponse | IParsedResponse, already_parsed = false) {\n    if (this.#isParsed(response) || already_parsed) {\n      this.#page = response as T;\n    } else {\n      this.#page = Parser.parseResponse<T>(response.data);\n    }\n\n    const memo = concatMemos(...[\n      this.#page.contents_memo,\n      this.#page.continuation_contents_memo,\n      this.#page.on_response_received_commands_memo,\n      this.#page.on_response_received_endpoints_memo,\n      this.#page.on_response_received_actions_memo,\n      this.#page.sidebar_memo,\n      this.#page.header_memo\n    ]);\n\n    if (!memo)\n      throw new InnertubeError('No memo found in feed');\n\n    this.#memo = memo;\n    this.#actions = actions;\n  }\n\n  #isParsed(response: IParsedResponse | ApiResponse): response is IParsedResponse {\n    return !('data' in response);\n  }\n\n  /**\n   * Get all videos on a given page via memo\n   */\n  static getVideosFromMemo(memo: Memo) {\n    return memo.getType(\n      Video,\n      GridVideo,\n      ReelItem,\n      ShortsLockupView,\n      CompactVideo,\n      PlaylistVideo,\n      PlaylistPanelVideo,\n      WatchCardCompactVideo\n    );\n  }\n\n  /**\n   * Get all playlists on a given page via memo\n   */\n  static getPlaylistsFromMemo(memo: Memo) {\n    const playlists: ObservedArray<Playlist | GridPlaylist | LockupView> = memo.getType(Playlist, GridPlaylist);\n\n    const lockup_views = memo.getType(LockupView)\n      .filter((lockup) => {\n        return [ 'PLAYLIST', 'ALBUM', 'PODCAST' ].includes(lockup.content_type);\n      });\n\n    if (lockup_views.length > 0) {\n      playlists.push(...lockup_views);\n    }\n\n    return playlists;\n  }\n\n  /**\n   * Get all the videos in the feed\n   */\n  get videos() {\n    return Feed.getVideosFromMemo(this.#memo);\n  }\n\n  /**\n   * Get all the community posts in the feed\n   */\n  get posts() {\n    return this.#memo.getType(BackstagePost, Post, SharedPost);\n  }\n\n  /**\n   * Get all the channels in the feed\n   */\n  get channels() {\n    return this.#memo.getType(Channel, GridChannel);\n  }\n\n  /**\n   * Get all playlists in the feed\n   */\n  get playlists() {\n    return Feed.getPlaylistsFromMemo(this.#memo);\n  }\n\n  get memo() {\n    return this.#memo;\n  }\n\n  /**\n   * Returns contents from the page.\n   */\n  get page_contents(): SectionList | MusicQueue | RichGrid | ReloadContinuationItemsCommand {\n    const tab_content = this.#memo.getType(Tab)?.[0].content;\n    const reload_continuation_items = this.#memo.getType(ReloadContinuationItemsCommand)[0];\n    const append_continuation_items = this.#memo.getType(AppendContinuationItemsAction)[0];\n\n    return tab_content || reload_continuation_items || append_continuation_items;\n  }\n\n  /**\n   * Returns all segments/sections from the page.\n   */\n  get shelves() {\n    return this.#memo.getType(Shelf, RichShelf, ReelShelf);\n  }\n\n  /**\n   * Finds shelf by title.\n   */\n  getShelf(title: string) {\n    return this.shelves.get({ title });\n  }\n\n  /**\n   * Returns secondary contents from the page.\n   */\n  get secondary_contents(): SectionList | SecondarySearchContainer | BrowseFeedActions | ProfileColumn | null {\n    if (!this.#page.contents?.is_node)\n      return null;\n\n    const node = this.#page.contents?.item();\n\n    if (!node.is(TwoColumnBrowseResults, TwoColumnSearchResults))\n      return null;\n\n    return node.secondary_contents;\n  }\n\n  get actions(): Actions {\n    return this.#actions;\n  }\n\n  /**\n   * Get the original page data\n   */\n  get page(): T {\n    return this.#page;\n  }\n\n  /**\n   * Checks if the feed has continuation.\n   */\n  get has_continuation(): boolean {\n    return this.#getBodyContinuations().length > 0;\n  }\n\n  /**\n   * Retrieves continuation data as it is.\n   */\n  async getContinuationData(): Promise<T | undefined> {\n    if (this.#continuation) {\n      if (this.#continuation.length === 0)\n        throw new InnertubeError('There are no continuations.');\n\n      return await this.#continuation[0].endpoint.call<T>(this.#actions, { parse: true });\n    }\n\n    this.#continuation = this.#getBodyContinuations();\n\n    if (this.#continuation)\n      return this.getContinuationData();\n  }\n\n  /**\n   * Retrieves next batch of contents and returns a new {@link Feed} object.\n   */\n  async getContinuation(): Promise<Feed<T>> {\n    const continuation_data = await this.getContinuationData();\n    if (!continuation_data)\n      throw new InnertubeError('Could not get continuation data');\n    return new Feed<T>(this.actions, continuation_data, true);\n  }\n\n  #getBodyContinuations(): ObservedArray<ContinuationItem> {\n    if (this.#page.header_memo) {\n      const header_continuations = this.#page.header_memo.getType(ContinuationItem);\n      return this.#memo.getType(ContinuationItem).filter(\n        (continuation) => !header_continuations.includes(continuation)\n      ) as ObservedArray<ContinuationItem>;\n    }\n    return this.#memo.getType(ContinuationItem);\n  }\n}", "import Feed from './Feed.js';\nimport ChipCloudChip from '../../parser/classes/ChipCloudChip.js';\nimport FeedFilterChipBar from '../../parser/classes/FeedFilterChipBar.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { IParsedResponse } from '../../parser/index.js';\nimport type { ApiResponse, Actions } from '../index.js';\n\nexport default class FilterableFeed<T extends IParsedResponse> extends Feed<T> {\n  #chips?: ObservedArray<ChipCloudChip>;\n\n  constructor(actions: Actions, data: ApiResponse | T, already_parsed = false) {\n    super(actions, data, already_parsed);\n  }\n\n  /**\n   * Returns the filter chips.\n   */\n  get filter_chips(): ObservedArray<ChipCloudChip> {\n    if (this.#chips)\n      return this.#chips || [];\n\n    if (this.memo.getType(FeedFilterChipBar)?.length > 1)\n      throw new InnertubeError('There are too many feed filter chipbars, you\\'ll need to find the correct one yourself in this.page');\n\n    if (this.memo.getType(FeedFilterChipBar)?.length === 0)\n      throw new InnertubeError('There are no feed filter chipbars');\n\n    this.#chips = this.memo.getType(ChipCloudChip);\n\n    return this.#chips || [];\n  }\n\n  /**\n   * Returns available filters.\n   */\n  get filters(): string[] {\n    return this.filter_chips.map((chip) => chip.text.toString()) || [];\n  }\n\n  /**\n   * Applies given filter and returns a new {@link Feed} object.\n   */\n  async getFilteredFeed(filter: string | ChipCloudChip): Promise<Feed<T>> {\n    let target_filter: ChipCloudChip | undefined;\n\n    if (typeof filter === 'string') {\n      if (!this.filters.includes(filter))\n        throw new InnertubeError('Filter not found', { available_filters: this.filters });\n      target_filter = this.filter_chips.find((chip) => chip.text.toString() === filter);\n    } else if (filter.type === 'ChipCloudChip') {\n      target_filter = filter;\n    } else {\n      throw new InnertubeError('Invalid filter');\n    }\n\n    if (!target_filter)\n      throw new InnertubeError('Filter not found');\n\n    if (target_filter.is_selected)\n      return this;\n\n    const response = await target_filter.endpoint?.call(this.actions, { parse: true });\n\n    if (!response)\n      throw new InnertubeError('Failed to get filtered feed');\n\n    return new Feed(this.actions, response, true);\n  }\n}", "export { default as Feed } from './Feed.js';\nexport { default as FilterableFeed } from './FilterableFeed.js';\nexport { default as TabbedFeed } from './TabbedFeed.js';\nexport { default as MediaInfo } from './MediaInfo.js';", "import { Constants, FormatUtils } from '../../utils/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { getStreamingInfo } from '../../utils/StreamingInfo.js';\n\nimport type {\n  INextResponse,\n  IPlayabilityStatus,\n  IPlaybackTracking,\n  IPlayerConfig,\n  IPlayerResponse,\n  IStreamingData\n} from '../../parser/index.js';\n\nimport { Parser } from '../../parser/index.js';\nimport { TranscriptInfo } from '../../parser/youtube/index.js';\nimport ContinuationItem from '../../parser/classes/ContinuationItem.js';\nimport PlayerMicroformat from '../../parser/classes/PlayerMicroformat.js';\nimport MicroformatData from '../../parser/classes/MicroformatData.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { DownloadOptions, FormatFilter, FormatOptions, URLTransformer } from '../../types/index.js';\nimport type Format from '../../parser/classes/misc/Format.js';\nimport type { DashOptions } from '../../types/DashOptions.js';\nimport type { ObservedArray } from '../../parser/helpers.js';\n\nimport type CardCollection from '../../parser/classes/CardCollection.js';\nimport type Endscreen from '../../parser/classes/Endscreen.js';\nimport type PlayerAnnotationsExpanded from '../../parser/classes/PlayerAnnotationsExpanded.js';\nimport type PlayerCaptionsTracklist from '../../parser/classes/PlayerCaptionsTracklist.js';\nimport type PlayerLiveStoryboardSpec from '../../parser/classes/PlayerLiveStoryboardSpec.js';\nimport type PlayerStoryboardSpec from '../../parser/classes/PlayerStoryboardSpec.js';\n\nexport default class MediaInfo {\n  readonly #page: [ IPlayerResponse, INextResponse? ];\n  readonly #actions: Actions;\n  readonly #cpn: string;\n  readonly #playback_tracking?: IPlaybackTracking;\n\n  public basic_info;\n  public annotations?: ObservedArray<PlayerAnnotationsExpanded>;\n  public storyboards?: PlayerStoryboardSpec | PlayerLiveStoryboardSpec;\n  public endscreen?: Endscreen;\n  public captions?: PlayerCaptionsTracklist;\n  public cards?: CardCollection;\n  public streaming_data?: IStreamingData;\n  public playability_status?: IPlayabilityStatus;\n  public player_config?: IPlayerConfig;\n\n  constructor(data: [ ApiResponse, ApiResponse? ], actions: Actions, cpn: string) {\n    this.#actions = actions;\n\n    const info = Parser.parseResponse<IPlayerResponse>(data[0].data.playerResponse ? data[0].data.playerResponse : data[0].data);\n    const next = data[1]?.data ? Parser.parseResponse<INextResponse>(data[1].data) : undefined;\n\n    this.#page = [ info, next ];\n    this.#cpn = cpn;\n\n    if (info.playability_status?.status === 'ERROR')\n      throw new InnertubeError('This video is unavailable', info.playability_status);\n\n    if (info.microformat && !info.microformat?.is(PlayerMicroformat, MicroformatData))\n      throw new InnertubeError('Unsupported microformat', info.microformat);\n\n    this.basic_info = { // This type is inferred so no need for an explicit type\n      ...info.video_details,\n      /**\n       * Microformat is a bit redundant, so only\n       * a few things there are interesting to us.\n       */\n      ...{\n        embed: info.microformat?.is(PlayerMicroformat) ? info.microformat?.embed : null,\n        channel: info.microformat?.is(PlayerMicroformat) ? info.microformat?.channel : null,\n        is_unlisted: info.microformat?.is_unlisted,\n        is_family_safe: info.microformat?.is_family_safe,\n        category: info.microformat?.is(PlayerMicroformat) ? info.microformat?.category : null,\n        has_ypc_metadata: info.microformat?.is(PlayerMicroformat) ? info.microformat?.has_ypc_metadata : null,\n        start_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.start_timestamp : null,\n        end_timestamp: info.microformat?.is(PlayerMicroformat) ? info.microformat.end_timestamp : null,\n        view_count: info.microformat?.is(PlayerMicroformat) && isNaN(info.video_details?.view_count as number) ? info.microformat.view_count : info.video_details?.view_count,\n        url_canonical: info.microformat?.is(MicroformatData) ? info.microformat?.url_canonical : null,\n        tags: info.microformat?.is(MicroformatData) ? info.microformat?.tags : null\n      },\n      like_count: undefined as number | undefined,\n      is_liked: undefined as boolean | undefined,\n      is_disliked: undefined as boolean | undefined\n    };\n\n    this.annotations = info.annotations;\n    this.storyboards = info.storyboards;\n    this.endscreen = info.endscreen;\n    this.captions = info.captions;\n    this.cards = info.cards;\n    this.streaming_data = info.streaming_data;\n    this.playability_status = info.playability_status;\n    this.player_config = info.player_config;\n    this.#playback_tracking = info.playback_tracking;\n  }\n\n  /**\n   * Generates a DASH manifest from the streaming data.\n   * @param options\n   * @returns DASH manifest\n   */\n  async toDash(options: {\n    url_transformer?: URLTransformer;\n    format_filter?: FormatFilter;\n    manifest_options?: DashOptions;\n  } = {}): Promise<string> {\n    const player_response = this.#page[0];\n    const manifest_options = options.manifest_options || {};\n\n    if (player_response.video_details && (player_response.video_details.is_live)) {\n      throw new InnertubeError('Generating DASH manifests for live videos is not supported. Please use the DASH and HLS manifests provided by YouTube in `streaming_data.dash_manifest_url` and `streaming_data.hls_manifest_url` instead.');\n    }\n\n    let storyboards;\n    let captions;\n\n    if (manifest_options.include_thumbnails && player_response.storyboards) {\n      storyboards = player_response.storyboards;\n    }\n\n    if (typeof manifest_options.captions_format === 'string' && player_response.captions?.caption_tracks) {\n      captions = player_response.captions.caption_tracks;\n    }\n\n    return FormatUtils.toDash(\n      this.streaming_data,\n      this.page[0].video_details?.is_post_live_dvr,\n      options.url_transformer,\n      options.format_filter,\n      this.#cpn,\n      this.#actions.session.player,\n      this.#actions,\n      storyboards,\n      captions,\n      manifest_options\n    );\n  }\n\n  /**\n   * Get a cleaned up representation of the adaptive_formats\n   */\n  getStreamingInfo(url_transformer?: URLTransformer, format_filter?: FormatFilter) {\n    return getStreamingInfo(\n      this.streaming_data,\n      this.page[0].video_details?.is_post_live_dvr,\n      url_transformer,\n      format_filter,\n      this.cpn,\n      this.#actions.session.player,\n      this.#actions,\n      this.#page[0].storyboards ? this.#page[0].storyboards : undefined\n    );\n  }\n\n  /**\n   * Selects the format that best matches the given options.\n   * @param options - Options\n   */\n  chooseFormat(options: FormatOptions): Format {\n    return FormatUtils.chooseFormat(options, this.streaming_data);\n  }\n\n  /**\n   * Downloads the video.\n   * @param options - Download options.\n   */\n  async download(options: DownloadOptions = {}): Promise<ReadableStream<Uint8Array>> {\n    const player_response = this.#page[0];\n\n    if (player_response.video_details && (player_response.video_details.is_live || player_response.video_details.is_post_live_dvr)) {\n      throw new InnertubeError('Downloading is not supported for live and Post-Live-DVR videos, as they are split up into 5 second segments that are individual files, which require using a tool such as ffmpeg to stitch them together, so they cannot be returned in a single stream.');\n    }\n\n    return FormatUtils.download(options, this.#actions, this.playability_status, this.streaming_data, this.#actions.session.player, this.cpn);\n  }\n\n  /**\n   * Retrieves the video's transcript.\n   */\n  async getTranscript(): Promise<TranscriptInfo> {\n    const next_response = this.page[1];\n\n    if (!next_response)\n      throw new InnertubeError('Cannot get transcript from basic video info.');\n\n    if (!next_response.engagement_panels)\n      throw new InnertubeError('Engagement panels not found. Video likely has no transcript.');\n\n    const transcript_panel = next_response.engagement_panels.get({\n      panel_identifier: 'engagement-panel-searchable-transcript'\n    });\n\n    if (!transcript_panel)\n      throw new InnertubeError('Transcript panel not found. Video likely has no transcript.');\n\n    const transcript_continuation = transcript_panel.content?.as(ContinuationItem);\n\n    if (!transcript_continuation)\n      throw new InnertubeError('Transcript continuation not found.');\n\n    const response = await transcript_continuation.endpoint.call(this.actions);\n\n    return new TranscriptInfo(this.actions, response);\n  }\n\n  async addToWatchHistory(client_name?: string, client_version?: string, replacement = 'https://www.'): Promise<Response> {\n    if (!this.#playback_tracking)\n      throw new InnertubeError('Playback tracking not available');\n\n    const url_params = {\n      cpn: this.#cpn,\n      fmt: 251,\n      rtn: 0,\n      rt: 0\n    };\n\n    const url = this.#playback_tracking.videostats_playback_url.replace('https://s.', replacement);\n\n    return await this.#actions.stats(url, {\n      client_name: client_name || Constants.CLIENTS.WEB.NAME,\n      client_version: client_version || Constants.CLIENTS.WEB.VERSION\n    }, url_params);\n  }\n\n  async updateWatchTime(startTime: number, client_name: string = Constants.CLIENTS.WEB.NAME, client_version: string = Constants.CLIENTS.WEB.VERSION, replacement = 'https://www.'): Promise<Response> {\n    if (!this.#playback_tracking)\n      throw new InnertubeError('Playback tracking not available');\n\n    const url_params = {\n      cpn: this.#cpn,\n      st: startTime.toFixed(3),\n      et: startTime.toFixed(3),\n      cmt: startTime.toFixed(3),\n      final: '1'\n    };\n\n    const url = this.#playback_tracking.videostats_watchtime_url.replace('https://s.', replacement);\n\n    return await this.#actions.stats(url, {\n      client_name,\n      client_version\n    }, url_params);\n  }\n\n  get actions(): Actions {\n    return this.#actions;\n  }\n\n  /**\n   * Content Playback Nonce.\n   */\n  get cpn(): string {\n    return this.#cpn;\n  }\n\n  /**\n   * Parsed InnerTube response.\n   */\n  get page(): [IPlayerResponse, INextResponse?] {\n    return this.#page;\n  }\n}", "import { Feed } from './index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport Tab from '../../parser/classes/Tab.js';\n\nimport type { Actions, ApiResponse } from '../index.js';\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { IParsedResponse } from '../../parser/index.js';\n\nexport default class TabbedFeed<T extends IParsedResponse> extends Feed<T> {\n  readonly #actions: Actions;\n  #tabs?: ObservedArray<Tab>;\n\n  constructor(actions: Actions, data: ApiResponse | IParsedResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.#actions = actions;\n    this.#tabs = this.page.contents_memo?.getType(Tab);\n  }\n\n  get tabs(): string[] {\n    return this.#tabs?.map((tab) => tab.title.toString()) ?? [];\n  }\n\n  async getTabByName(title: string): Promise<TabbedFeed<T>> {\n    const tab = this.#tabs?.find((tab) => tab.title.toLowerCase() === title.toLowerCase());\n\n    if (!tab)\n      throw new InnertubeError(`Tab \"${title}\" not found`);\n\n    if (tab.selected)\n      return this;\n\n    const response = await tab.endpoint.call(this.#actions);\n\n    return new TabbedFeed<T>(this.#actions, response, false);\n  }\n\n  async getTabByURL(url: string): Promise<TabbedFeed<T>> {\n    const tab = this.#tabs?.find((tab) => tab.endpoint.metadata.url?.split('/').pop() === url);\n\n    if (!tab)\n      throw new InnertubeError(`Tab \"${url}\" not found`);\n\n    if (tab.selected)\n      return this;\n\n    const response = await tab.endpoint.call(this.#actions);\n\n    return new TabbedFeed<T>(this.#actions, response, false);\n  }\n\n  hasTabWithURL(url: string): boolean {\n    return this.#tabs?.some((tab) => tab.endpoint.metadata.url?.split('/').pop() === url) ?? false;\n  }\n\n  get title(): string | undefined {\n    return this.page.contents_memo?.getType(Tab)?.find((tab) => tab.selected)?.title.toString();\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport { ChannelError, InnertubeError } from '../../utils/Utils.js';\n\nimport TabbedFeed from '../../core/mixins/TabbedFeed.js';\nimport C4TabbedHeader from '../classes/C4TabbedHeader.js';\nimport CarouselHeader from '../classes/CarouselHeader.js';\nimport ChannelAboutFullMetadata from '../classes/ChannelAboutFullMetadata.js';\nimport AboutChannel from '../classes/AboutChannel.js';\nimport ChannelMetadata from '../classes/ChannelMetadata.js';\nimport InteractiveTabbedHeader from '../classes/InteractiveTabbedHeader.js';\nimport MicroformatData from '../classes/MicroformatData.js';\nimport SubscribeButton from '../classes/SubscribeButton.js';\nimport ExpandableTab from '../classes/ExpandableTab.js';\nimport SectionList from '../classes/SectionList.js';\nimport type Tab from '../classes/Tab.js';\nimport PageHeader from '../classes/PageHeader.js';\nimport TwoColumnBrowseResults from '../classes/TwoColumnBrowseResults.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport FeedFilterChipBar from '../classes/FeedFilterChipBar.js';\nimport ChannelSubMenu from '../classes/ChannelSubMenu.js';\nimport SortFilterSubMenu from '../classes/SortFilterSubMenu.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nimport type {\n  AppendContinuationItemsAction,\n  NavigateAction,\n  ReloadContinuationItemsCommand,\n  ShowMiniplayerCommand\n} from '../index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type OpenPopupAction from '../classes/actions/OpenPopupAction.js';\n\nexport default class Channel extends TabbedFeed<IBrowseResponse> {\n  public header?: C4TabbedHeader | CarouselHeader | InteractiveTabbedHeader | PageHeader;\n  public metadata;\n  public subscribe_button?: SubscribeButton;\n  public current_tab?: Tab | ExpandableTab;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    this.header = this.page.header?.item()?.as(C4TabbedHeader, CarouselHeader, InteractiveTabbedHeader, PageHeader);\n\n    const metadata = this.page.metadata?.item().as(ChannelMetadata);\n    const microformat = this.page.microformat?.as(MicroformatData);\n\n    if (this.page.alerts) {\n      const alert = this.page.alerts[0];\n      if (alert?.alert_type === 'ERROR') {\n        throw new ChannelError(alert.text.toString());\n      }\n    }\n\n    if (!metadata && !this.page.contents)\n      throw new InnertubeError('Invalid channel', this);\n\n    this.metadata = { ...metadata, ...(microformat || {}) };\n\n    this.subscribe_button = this.page.header_memo?.getType(SubscribeButton)[0];\n\n    if (this.page.contents)\n      this.current_tab = this.page.contents.item().as(TwoColumnBrowseResults).tabs.get({ selected: true });\n  }\n\n  /**\n   * Applies given filter to the list. Use {@link filters} to get available filters.\n   * @param filter - The filter to apply\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<FilteredChannelList> {\n    let target_filter: ChipCloudChip | undefined;\n\n    const filter_chipbar = this.memo.getType(FeedFilterChipBar)[0];\n\n    if (typeof filter === 'string') {\n      target_filter = filter_chipbar?.contents.get({ text: filter });\n      if (!target_filter)\n        throw new InnertubeError(`Filter ${filter} not found`, { available_filters: this.filters });\n    } else {\n      target_filter = filter;\n    }\n\n    if (!target_filter.endpoint)\n      throw new InnertubeError('Invalid filter', filter);\n\n    const page = await target_filter.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    if (!page)\n      throw new InnertubeError('No page returned', { filter: target_filter });\n\n    return new FilteredChannelList(this.actions, page, true);\n  }\n\n  /**\n   * Applies given sort filter to the list. Use {@link sort_filters} to get available filters.\n   * @param sort - The sort filter to apply\n   */\n  async applySort(sort: string): Promise<Channel> {\n    const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];\n\n    if (!sort_filter_sub_menu || !sort_filter_sub_menu.sub_menu_items)\n      throw new InnertubeError('No sort filter sub menu found');\n\n    const target_sort = sort_filter_sub_menu.sub_menu_items.find((item) => item.title === sort);\n\n    if (!target_sort)\n      throw new InnertubeError(`Sort filter ${sort} not found`, { available_sort_filters: this.sort_filters });\n\n    if (target_sort.selected)\n      return this;\n\n    const page = await target_sort.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  /**\n   * Applies given content type filter to the list. Use {@link content_type_filters} to get available filters.\n   * @param content_type_filter - The content type filter to apply\n   */\n  async applyContentTypeFilter(content_type_filter: string): Promise<Channel> {\n    const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);\n\n    if (!sub_menu)\n      throw new InnertubeError('Sub menu not found');\n\n    const item = sub_menu.content_type_sub_menu_items.find((item) => item.title === content_type_filter);\n\n    if (!item)\n      throw new InnertubeError(`Sub menu item ${content_type_filter} not found`, { available_filters: this.content_type_filters });\n\n    if (item.selected)\n      return this;\n\n    const page = await item.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  get filters(): string[] {\n    return this.memo.getType(FeedFilterChipBar)?.[0]?.contents.filterType(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get sort_filters(): string[] {\n    const sort_filter_sub_menu = this.memo.getType(SortFilterSubMenu)[0];\n    return sort_filter_sub_menu?.sub_menu_items?.map((item) => item.title) || [];\n  }\n\n  get content_type_filters(): string[] {\n    const sub_menu = this.current_tab?.content?.as(SectionList).sub_menu?.as(ChannelSubMenu);\n    return sub_menu?.content_type_sub_menu_items.map((item) => item.title) || [];\n  }\n\n  async getHome(): Promise<Channel> {\n    const tab = await this.getTabByURL('featured');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getVideos(): Promise<Channel> {\n    const tab = await this.getTabByURL('videos');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getShorts(): Promise<Channel> {\n    const tab = await this.getTabByURL('shorts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getLiveStreams(): Promise<Channel> {\n    const tab = await this.getTabByURL('streams');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getReleases(): Promise<Channel> {\n    const tab = await this.getTabByURL('releases');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getPodcasts(): Promise<Channel> {\n    const tab = await this.getTabByURL('podcasts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getCourses(): Promise<Channel> {\n    const tab = await this.getTabByURL('courses');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getPlaylists(): Promise<Channel> {\n    const tab = await this.getTabByURL('playlists');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  async getCommunity(): Promise<Channel> {\n    const tab = await this.getTabByURL('posts');\n    return new Channel(this.actions, tab.page, true);\n  }\n\n  /**\n   * Retrieves the about page.\n   * Note that this does not return a new {@link Channel} object.\n   */\n  async getAbout(): Promise<ChannelAboutFullMetadata | AboutChannel> {\n    if (this.hasTabWithURL('about')) {\n      const tab = await this.getTabByURL('about');\n      return tab.memo.getType(ChannelAboutFullMetadata)[0];\n    }\n\n    const tagline = this.header?.is(C4TabbedHeader) && this.header.tagline;\n\n    if (tagline || this.header?.is(PageHeader) && this.header.content?.description) {\n      if (tagline && tagline.more_endpoint instanceof NavigationEndpoint) {\n        const response = await tagline.more_endpoint.call(this.actions);\n\n        const tab = new TabbedFeed<IBrowseResponse>(this.actions, response, false);\n        return tab.memo.getType(ChannelAboutFullMetadata)[0];\n      }\n\n      const endpoint = this.page.header_memo?.getType(ContinuationItem)[0]?.endpoint;\n\n      if (!endpoint) {\n        throw new InnertubeError('Failed to extract continuation to get channel about');\n      }\n\n      const response = await endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n      if (!response.on_response_received_endpoints_memo) {\n        throw new InnertubeError('Unexpected response while fetching channel about', { response });\n      }\n\n      return response.on_response_received_endpoints_memo.getType(AboutChannel)[0];\n    }\n\n    throw new InnertubeError('About not found');\n  }\n\n  /**\n   * Searches within the channel.\n   */\n  async search(query: string): Promise<Channel> {\n    const tab = this.memo.getType(ExpandableTab)?.[0];\n\n    if (!tab)\n      throw new InnertubeError('Search tab not found', this);\n\n    const page = await tab.endpoint.call<IBrowseResponse>(this.actions, { query, parse: true });\n\n    return new Channel(this.actions, page, true);\n  }\n\n  get has_home(): boolean {\n    return this.hasTabWithURL('featured');\n  }\n\n  get has_videos(): boolean {\n    return this.hasTabWithURL('videos');\n  }\n\n  get has_shorts(): boolean {\n    return this.hasTabWithURL('shorts');\n  }\n\n  get has_live_streams(): boolean {\n    return this.hasTabWithURL('streams');\n  }\n\n  get has_releases(): boolean {\n    return this.hasTabWithURL('releases');\n  }\n\n  get has_podcasts(): boolean {\n    return this.hasTabWithURL('podcasts');\n  }\n\n  get has_courses(): boolean {\n    return this.hasTabWithURL('courses');\n  }\n\n  get has_playlists(): boolean {\n    return this.hasTabWithURL('playlists');\n  }\n\n  get has_community(): boolean {\n    return this.hasTabWithURL('posts');\n  }\n\n  get has_about(): boolean {\n    // Game topic channels still have an about tab, user channels have switched to the popup\n    return this.hasTabWithURL('about') ||\n      !!(this.header?.is(C4TabbedHeader) && this.header.tagline?.more_endpoint) ||\n      !!(this.header?.is(PageHeader) && this.header.content?.description?.more_endpoint);\n  }\n\n  get has_search(): boolean {\n    return this.memo.getType(ExpandableTab)?.length > 0;\n  }\n\n  async getContinuation(): Promise<ChannelListContinuation> {\n    const page = await super.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new ChannelListContinuation(this.actions, page, true);\n  }\n}\n\nexport class ChannelListContinuation extends Feed<IBrowseResponse> {\n  contents?: AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.contents =\n      this.page.on_response_received_actions?.[0] ||\n      this.page.on_response_received_endpoints?.[0];\n  }\n\n  async getContinuation(): Promise<ChannelListContinuation> {\n    const page = await super.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new ChannelListContinuation(this.actions, page, true);\n  }\n}\n\nexport class FilteredChannelList extends FilterableFeed<IBrowseResponse> {\n  applied_filter?: ChipCloudChip;\n  contents?: AppendContinuationItemsAction | OpenPopupAction | NavigateAction | ShowMiniplayerCommand | ReloadContinuationItemsCommand;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    this.applied_filter = this.memo.getType(ChipCloudChip).get({ is_selected: true });\n\n    // Removes the filter chipbar from the actions list\n    if (\n      this.page.on_response_received_actions &&\n      this.page.on_response_received_actions.length > 1\n    ) {\n      this.page.on_response_received_actions.shift();\n    }\n\n    this.contents = this.page.on_response_received_actions?.[0];\n  }\n\n  /**\n   * Applies given filter to the list.\n   * @param filter - The filter to apply\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<FilteredChannelList> {\n    const feed = await super.getFilteredFeed(filter);\n    return new FilteredChannelList(this.actions, feed.page, true);\n  }\n\n  async getContinuation(): Promise<FilteredChannelList> {\n    const page = await super.getContinuationData();\n\n    if (!page?.on_response_received_actions_memo)\n      throw new InnertubeError('Unexpected continuation data', page);\n\n    // Keep the filters\n    page.on_response_received_actions_memo.set('FeedFilterChipBar', this.memo.getType(FeedFilterChipBar));\n    page.on_response_received_actions_memo.set('ChipCloudChip', this.memo.getType(ChipCloudChip));\n\n    return new FilteredChannelList(this.actions, page, true);\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { observe } from '../helpers.js';\n\nimport CommentsHeader from '../classes/comments/CommentsHeader.js';\nimport CommentSimplebox from '../classes/comments/CommentSimplebox.js';\nimport CommentThread from '../classes/comments/CommentThread.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { INextResponse } from '../types/index.js';\n\nexport default class Comments {\n  readonly #page: INextResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: ContinuationItem;\n\n  public header?: CommentsHeader;\n  public contents: ObservedArray<CommentThread>;\n\n  constructor(actions: Actions, data: any, already_parsed = false) {\n    this.#page = already_parsed ? data : Parser.parseResponse<INextResponse>(data);\n    this.#actions = actions;\n\n    const contents = this.#page.on_response_received_endpoints;\n\n    if (!contents)\n      throw new InnertubeError('Comments page did not have any content.');\n\n    const header_node = contents.at(0)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);\n    const body_node = contents.at(1)?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand);\n\n    this.header = header_node?.contents?.firstOfType(CommentsHeader);\n\n    const threads = body_node?.contents?.filterType(CommentThread) || [];\n\n    this.contents = observe(threads.map((thread) => {\n      if (thread.comment)\n        thread.comment.setActions(this.#actions);\n      thread.setActions(this.#actions);\n      return thread;\n    }));\n\n    this.#continuation = body_node?.contents?.firstOfType(ContinuationItem);\n  }\n\n  /**\n   * Applies given sort option to the comments.\n   * @param sort - Sort type.\n   */\n  async applySort(sort: 'TOP_COMMENTS' | 'NEWEST_FIRST'): Promise<Comments> {\n    if (!this.header)\n      throw new InnertubeError('Page header is missing. Cannot apply sort option.');\n\n    let button;\n\n    if (sort === 'TOP_COMMENTS') {\n      button = this.header.sort_menu?.sub_menu_items?.at(0);\n    } else if (sort === 'NEWEST_FIRST') {\n      button = this.header.sort_menu?.sub_menu_items?.at(1);\n    }\n\n    if (!button)\n      throw new InnertubeError('Could not find target button.');\n\n    if (button.selected)\n      return this;\n\n    const response = await button.endpoint.call(this.#actions, { parse: true });\n\n    return new Comments(this.#actions, response, true);\n  }\n\n  /**\n   * Creates a top-level comment.\n   * @param text - Comment text.\n   */\n  async createComment(text: string): Promise<ApiResponse> {\n    if (!this.header)\n      throw new InnertubeError('Page header is missing. Cannot create comment.');\n\n    const button = this.header.create_renderer?.as(CommentSimplebox).submit_button;\n\n    if (!button)\n      throw new InnertubeError('Could not find target button. You are probably not logged in.');\n\n    if (!button.endpoint)\n      throw new InnertubeError('Button does not have an endpoint.');\n\n    return await button.endpoint.call(this.#actions, { commentText: text });\n  }\n\n  /**\n   * Retrieves next batch of comments.\n   */\n  async getContinuation(): Promise<Comments> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const data = await this.#continuation.endpoint.call(this.#actions, { parse: true });\n\n    // Copy the previous page so we can keep the header.\n    const page = Object.assign({}, this.#page);\n\n    if (!page.on_response_received_endpoints || !data.on_response_received_endpoints)\n      throw new InnertubeError('Invalid reponse format, missing on_response_received_endpoints.');\n\n    // Remove previous items and append the continuation.\n    page.on_response_received_endpoints.pop();\n    page.on_response_received_endpoints.push(data.on_response_received_endpoints[0]);\n\n    return new Comments(this.#actions, page, true);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): INextResponse {\n    return this.#page;\n  }\n}", "import { Parser } from '../index.js';\nimport GuideSection from '../classes/GuideSection.js';\nimport GuideSubscriptionsSection from '../classes/GuideSubscriptionsSection.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IGuideResponse } from '../types/index.js';\nimport type { IRawResponse } from '../index.js';\n\nexport default class Guide {\n  readonly #page: IGuideResponse;\n  public contents?: ObservedArray<GuideSection | GuideSubscriptionsSection>;\n\n  constructor(data: IRawResponse) {\n    this.#page = Parser.parseResponse<IGuideResponse>(data);\n    if (this.#page.items)\n      this.contents = this.#page.items.array().as(GuideSection, GuideSubscriptionsSection);\n  }\n\n  get page(): IGuideResponse {\n    return this.#page;\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport BrowseFeedActions from '../classes/BrowseFeedActions.js';\nimport Button from '../classes/Button.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type Video from '../classes/Video.js';\n\n// TODO: make feed actions usable\nexport default class History extends Feed<IBrowseResponse> {\n  public sections: ItemSection[];\n  public feed_actions: BrowseFeedActions;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.sections = this.memo.getType(ItemSection);\n    this.feed_actions = this.memo.getType(BrowseFeedActions)[0];\n  }\n\n  /**\n   * Retrieves next batch of contents.\n   */\n  async getContinuation(): Promise<History> {\n    const response = await this.getContinuationData();\n    if (!response)\n      throw new Error('No continuation data found');\n    return new History(this.actions, response, true);\n  }\n\n  /**\n   * Removes a video from watch history.\n   */\n  async removeVideo(video_id: string): Promise<boolean> {\n    let feedbackToken;\n\n    for (const section of this.sections) {\n      for (const content of section.contents) {\n        const video = content as Video;\n        if (video.video_id === video_id && video.menu) {\n          feedbackToken = video.menu.top_level_buttons[0].as(Button).endpoint.payload.feedbackToken;\n          break;\n        }\n      }\n    }\n\n    if (!feedbackToken) {\n      throw new Error('Failed to get feedback token');\n    }\n\n    const body = { feedbackTokens: [ feedbackToken ] };\n    const response = await this.actions.execute('/feedback', body);\n    const data = response.data;\n\n    if (!data.feedbackResponses[0].isProcessed) {\n      throw new Error('Failed to remove video from watch history');\n    }\n\n    return true;\n  }\n}\n", "import FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport FeedTabbedHeader from '../classes/FeedTabbedHeader.js';\nimport RichGrid from '../classes/RichGrid.js';\n\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { AppendContinuationItemsAction, ReloadContinuationItemsCommand } from '../index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class HomeFeed extends FilterableFeed<IBrowseResponse> {\n  public contents?: RichGrid | AppendContinuationItemsAction | ReloadContinuationItemsCommand;\n  public header?: FeedTabbedHeader;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.memo.getType(FeedTabbedHeader)[0];\n    this.contents = this.memo.getType(RichGrid)[0] || this.page.on_response_received_actions?.[0];\n  }\n\n  /**\n   * Applies given filter to the feed. Use {@link filters} to get available filters.\n   * @param filter - Filter to apply.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<HomeFeed> {\n    const feed = await super.getFilteredFeed(filter);\n    return new HomeFeed(this.actions, feed.page, true);\n  }\n\n  /**\n   * Retrieves next batch of contents.\n   */\n  async getContinuation(): Promise<HomeFeed> {\n    const feed = await super.getContinuation();\n\n    // Keep the page header\n    feed.page.header = this.page.header;\n\n    if (this.header)\n      feed.page.header_memo?.set(this.header.type, [ this.header ]);\n\n    return new HomeFeed(this.actions, feed.page, true);\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport FilterableFeed from '../../core/mixins/FilterableFeed.js';\nimport HashtagHeader from '../classes/HashtagHeader.js';\nimport RichGrid from '../classes/RichGrid.js';\nimport PageHeader from '../classes/PageHeader.js';\nimport Tab from '../classes/Tab.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class HashtagFeed extends FilterableFeed<IBrowseResponse> {\n  public header?: HashtagHeader | PageHeader;\n  public contents: RichGrid;\n\n  constructor(actions: Actions, response: IBrowseResponse | ApiResponse) {\n    super(actions, response);\n\n    if (!this.page.contents_memo)\n      throw new InnertubeError('Unexpected response', this.page);\n\n    const tab = this.page.contents_memo.getType(Tab)[0];\n\n    if (!tab.content)\n      throw new InnertubeError('Content tab has no content', tab);\n\n    if (this.page.header) {\n      this.header = this.page.header.item().as(HashtagHeader, PageHeader);\n    }\n\n    this.contents = tab.content.as(RichGrid);\n  }\n\n  /**\n   * Applies given filter and returns a new {@link HashtagFeed} object. Use {@link HashtagFeed.filters} to get available filters.\n   * @param filter - Filter to apply.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<HashtagFeed> {\n    const response = await super.getFilteredFeed(filter);\n    return new HashtagFeed(this.actions, response.page);\n  }\n}", "import Menu from '../classes/menus/Menu.js';\nimport Button from '../classes/Button.js';\nimport MenuServiceItem from '../classes/menus/MenuServiceItem.js';\n\nimport type { Actions } from '../../core/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { IParsedResponse } from '../types/index.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class ItemMenu {\n  readonly #page: IParsedResponse;\n  readonly #actions: Actions;\n  readonly #items: ObservedArray<YTNode>;\n\n  constructor(data: IParsedResponse, actions: Actions) {\n    this.#page = data;\n    this.#actions = actions;\n\n    const menu = data?.live_chat_item_context_menu_supported_renderers;\n\n    if (!menu || !menu.is(Menu))\n      throw new InnertubeError('Response did not have a \"live_chat_item_context_menu_supported_renderers\" property. The call may have failed.');\n\n    this.#items = menu.as(Menu).items;\n  }\n\n  async selectItem(icon_type: string): Promise<IParsedResponse>\n  async selectItem(button: Button): Promise<IParsedResponse>\n  async selectItem(item: string | Button): Promise<IParsedResponse> {\n    let endpoint: NavigationEndpoint | undefined;\n\n    if (item instanceof Button) {\n      if (!item.endpoint)\n        throw new InnertubeError('Item does not have an endpoint.');\n\n      endpoint = item.endpoint;\n    } else {\n      const button = this.#items.find((button) => {\n        if (!button.is(MenuServiceItem)) {\n          return false;\n        }\n        const menuServiceItem = button.as(MenuServiceItem);\n        return menuServiceItem.icon_type === item;\n      });\n\n      if (!button || !button.is(MenuServiceItem))\n        throw new InnertubeError(`Button \"${item}\" not found.`);\n\n      endpoint = button.endpoint;\n    }\n\n    if (!endpoint)\n      throw new InnertubeError('Target button does not have an endpoint.');\n\n    return await endpoint.call(this.#actions, { parse: true });\n  }\n\n  items(): ObservedArray<YTNode> {\n    return this.#items;\n  }\n\n  page(): IParsedResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\n\nimport Feed from '../../core/mixins/Feed.js';\nimport Message from '../classes/Message.js';\nimport PlaylistCustomThumbnail from '../classes/PlaylistCustomThumbnail.js';\nimport PlaylistHeader from '../classes/PlaylistHeader.js';\nimport PlaylistMetadata from '../classes/PlaylistMetadata.js';\nimport PlaylistSidebarPrimaryInfo from '../classes/PlaylistSidebarPrimaryInfo.js';\nimport PlaylistSidebarSecondaryInfo from '../classes/PlaylistSidebarSecondaryInfo.js';\nimport PlaylistVideoList from '../classes/PlaylistVideoList.js';\nimport PlaylistVideoThumbnail from '../classes/PlaylistVideoThumbnail.js';\nimport ReelItem from '../classes/ReelItem.js';\nimport ShortsLockupView from '../classes/ShortsLockupView.js';\nimport VideoOwner from '../classes/VideoOwner.js';\nimport Alert from '../classes/Alert.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport PlaylistVideo from '../classes/PlaylistVideo.js';\nimport SectionList from '../classes/SectionList.js';\nimport { observe, type ObservedArray, type YTNode } from '../helpers.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type Thumbnail from '../classes/misc/Thumbnail.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class Playlist extends Feed<IBrowseResponse> {\n  public info;\n  public menu: YTNode;\n  public endpoint?: NavigationEndpoint;\n  public messages: ObservedArray<Message>;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    const header = this.memo.getType(PlaylistHeader)[0];\n    const primary_info = this.memo.getType(PlaylistSidebarPrimaryInfo)[0];\n    const secondary_info = this.memo.getType(PlaylistSidebarSecondaryInfo)[0];\n    const video_list = this.memo.getType(PlaylistVideoList)[0];\n    const alert = this.page.alerts?.firstOfType(Alert);\n\n    if (alert && alert.alert_type === 'ERROR')\n      throw new InnertubeError(alert.text.toString(), alert);\n\n    if (!primary_info && !secondary_info && Object.keys(this.page).length === 0)\n      throw new InnertubeError('Got empty continuation response. This is likely the end of the playlist.');\n\n    this.info = {\n      ...this.page.metadata?.item().as(PlaylistMetadata),\n      ...{\n        subtitle: header ? header.subtitle : null,\n        author: secondary_info?.owner?.as(VideoOwner).author ?? header?.author,\n        thumbnails: primary_info?.thumbnail_renderer?.as(PlaylistVideoThumbnail, PlaylistCustomThumbnail).thumbnail as Thumbnail[],\n        total_items: this.#getStat(0, primary_info),\n        views: this.#getStat(1, primary_info),\n        last_updated: this.#getStat(2, primary_info),\n        can_share: header?.can_share,\n        can_delete: header?.can_delete,\n        can_reorder: video_list?.can_reorder,\n        is_editable: video_list?.is_editable,\n        privacy: header?.privacy\n      }\n    };\n\n    this.menu = primary_info?.menu;\n    this.endpoint = primary_info?.endpoint;\n    this.messages = this.memo.getType(Message);\n  }\n\n  get items(): ObservedArray<PlaylistVideo | ReelItem | ShortsLockupView> {\n    return observe(this.videos.as(PlaylistVideo, ReelItem, ShortsLockupView).filter((video) => (video as PlaylistVideo).style !== 'PLAYLIST_VIDEO_RENDERER_STYLE_RECOMMENDED_VIDEO'));\n  }\n\n  get has_continuation() {\n    const section_list = this.memo.getType(SectionList)[0];\n\n    if (!section_list)\n      return super.has_continuation;\n\n    return !!this.memo.getType(ContinuationItem).find((node) => !section_list.contents.includes(node));\n  }\n\n  async getContinuationData(): Promise<IBrowseResponse | undefined> {\n    const section_list = this.memo.getType(SectionList)[0];\n\n    /**\n     * No section list means there can't be additional continuation nodes here,\n     * so no need to check.\n     */\n    if (!section_list)\n      return await super.getContinuationData();\n\n    const playlist_contents_continuation = this.memo.getType(ContinuationItem)\n      .find((node) => !section_list.contents.includes(node));\n\n    if (!playlist_contents_continuation)\n      throw new InnertubeError('There are no continuations.');\n\n    return await playlist_contents_continuation.endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n  }\n\n  async getContinuation(): Promise<Playlist> {\n    const page = await this.getContinuationData();\n    if (!page)\n      throw new InnertubeError('Could not get continuation data');\n    return new Playlist(this.actions, page, true);\n  }\n\n  #getStat(index: number, primary_info?: PlaylistSidebarPrimaryInfo): string {\n    if (!primary_info || !primary_info.stats) return 'N/A';\n    return primary_info.stats[index]?.toString() || 'N/A';\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport Feed from '../../core/mixins/Feed.js';\nimport History from './History.js';\nimport Playlist from './Playlist.js';\nimport Menu from '../classes/menus/Menu.js';\nimport Shelf from '../classes/Shelf.js';\nimport Button from '../classes/Button.js';\nimport PageHeader from '../classes/PageHeader.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Library extends Feed<IBrowseResponse> {\n  public header: PageHeader | null;\n  public sections;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse) {\n    super(actions, data);\n\n    if (!this.page.contents_memo)\n      throw new InnertubeError('Page contents not found');\n\n    this.header = this.memo.getType(PageHeader)[0];\n\n    const shelves = this.page.contents_memo.getType(Shelf);\n\n    this.sections = shelves.map((shelf: Shelf) => ({\n      type: shelf.icon_type,\n      title: shelf.title,\n      contents: shelf.content?.key('items').array() || [],\n      getAll: () => this.#getAll(shelf)\n    }));\n  }\n\n  async #getAll(shelf: Shelf): Promise<Playlist | History | Feed<IBrowseResponse>> {\n    if (!shelf.menu?.as(Menu).top_level_buttons)\n\n      throw new InnertubeError(`The ${shelf.title.text} shelf doesn't have more items`);\n\n    const button = shelf.menu.as(Menu).top_level_buttons.firstOfType(Button);\n\n    if (!button)\n      throw new InnertubeError('Did not find target button.');\n\n    const page = await button.as(Button).endpoint.call<IBrowseResponse>(this.actions, { parse: true });\n\n    switch (shelf.icon_type) {\n      case 'LIKE':\n      case 'WATCH_LATER':\n        return new Playlist(this.actions, page, true);\n      case 'WATCH_HISTORY':\n        return new History(this.actions, page, true);\n      case 'CONTENT_CUT':\n        return new Feed(this.actions, page, true);\n      default:\n        throw new InnertubeError('Target shelf not implemented.');\n    }\n  }\n\n  get history() {\n    return this.sections.find((section) => section.type === 'WATCH_HISTORY');\n  }\n\n  get watch_later() {\n    return this.sections.find((section) => section.type === 'WATCH_LATER');\n  }\n\n  get liked_videos() {\n    return this.sections.find((section) => section.type === 'LIKE');\n  }\n\n  get playlists_section() {\n    return this.sections.find((section) => section.type === 'PLAYLISTS');\n  }\n\n  get clips() {\n    return this.sections.find((section) => section.type === 'CONTENT_CUT');\n  }\n}", "import type { YTNode } from '../helpers.js';\n\n/**\n * Flattens the given queue.\n * @param queue - The queue to flatten.\n */\nfunction flattenQueue(queue: YTNode[][]) {\n  const nodes: YTNode[] = [];\n\n  for (const group of queue) {\n    if (Array.isArray(group)) {\n      for (const node of group) {\n        nodes.push(node);\n      }\n    } else {\n      nodes.push(group);\n    }\n  }\n\n  return nodes;\n}\n\nclass DelayQueue {\n  front: number[];\n  back: number[];\n\n  constructor() {\n    this.front = [];\n    this.back = [];\n  }\n\n  public isEmpty(): boolean {\n    return !this.front.length && !this.back.length;\n  }\n\n  public clear(): void {\n    this.front = [];\n    this.back = [];\n  }\n\n  public getValues(): number[] {\n    return this.front.concat(this.back.reverse());\n  }\n}\n\nexport default class SmoothedQueue {\n  #last_update_time: number | null;\n  #estimated_update_interval: number | null;\n  #callback: ((actions: YTNode[]) => void) | null;\n  #action_queue: YTNode[][];\n  #next_update_id: any;\n  \n  readonly #poll_response_delay_queue: DelayQueue;\n\n  constructor() {\n    this.#last_update_time = null;\n    this.#estimated_update_interval = null;\n    this.#callback = null;\n    this.#action_queue = [];\n    this.#next_update_id = null;\n    this.#poll_response_delay_queue = new DelayQueue();\n  }\n\n  public enqueueActionGroup(group: YTNode[]): void {\n    if (this.#last_update_time !== null) {\n      const delay = Date.now() - this.#last_update_time;\n\n      this.#poll_response_delay_queue.back.push(delay);\n\n      if (5 < (this.#poll_response_delay_queue.front.length + this.#poll_response_delay_queue.back.length)) {\n        if (!this.#poll_response_delay_queue.front.length) {\n          this.#poll_response_delay_queue.front = this.#poll_response_delay_queue.back;\n          this.#poll_response_delay_queue.front.reverse();\n          this.#poll_response_delay_queue.back = [];\n        }\n\n        this.#poll_response_delay_queue.front.pop();\n      }\n\n      this.#estimated_update_interval = Math.max(...this.#poll_response_delay_queue.getValues());\n    }\n\n    this.#last_update_time = Date.now();\n\n    this.#action_queue.push(group);\n\n    if (this.#next_update_id === null) {\n      this.#next_update_id = setTimeout(this.emitSmoothedActions.bind(this));\n    }\n  }\n\n  public emitSmoothedActions(): void {\n    this.#next_update_id = null;\n\n    if (this.#action_queue.length) {\n      let delay = 1E4;\n\n      if (this.#estimated_update_interval !== null && this.#last_update_time !== null) {\n        delay = this.#estimated_update_interval - Date.now() + this.#last_update_time;\n      }\n\n      delay = this.#action_queue.length < delay / 80 ? 1 : Math.ceil(this.#action_queue.length / (delay / 80));\n\n      const actions = flattenQueue(this.#action_queue.splice(0, delay));\n\n      if (this.#callback) {\n        this.#callback(actions);\n      }\n\n      if (this.#action_queue !== null) {\n        if (delay == 1) {\n          delay = this.#estimated_update_interval as number / this.#action_queue.length;\n          delay *= Math.random() + 0.5;\n          delay = Math.min(1E3, delay);\n          delay = Math.max(80, delay);\n        } else {\n          delay = 80;\n        }\n\n        this.#next_update_id = setTimeout(this.emitSmoothedActions.bind(this), delay);\n      }\n    }\n  }\n\n  public clear() {\n    if (this.#next_update_id !== null) {\n      clearTimeout(this.#next_update_id);\n      this.#next_update_id = null;\n    }\n    this.#action_queue = [];\n  }\n\n  set callback(cb: ((actions: YTNode[]) => void) | null) {\n    this.#callback = cb;\n  }\n\n  get callback(): ((actions: YTNode[]) => void) | null {\n    return this.#callback;\n  }\n\n  get action_queue(): YTNode[][] {\n    return this.#action_queue;\n  }\n\n  get estimated_update_interval(): number | null {\n    return this.#estimated_update_interval;\n  }\n\n  get last_update_time(): number | null {\n    return this.#last_update_time;\n  }\n\n  get next_update_id(): any {\n    return this.#next_update_id;\n  }\n\n  get poll_response_delay_queue(): DelayQueue {\n    return this.#poll_response_delay_queue;\n  }\n}", "// noinspection ES6MissingAwait\n\nimport { EventEmitter } from '../../utils/index.js';\nimport { InnertubeError, Platform, u8ToBase64 } from '../../utils/Utils.js';\nimport { LiveChatContinuation, Parser } from '../index.js';\nimport SmoothedQueue from './SmoothedQueue.js';\n\nimport RunAttestationCommand from '../classes/commands/RunAttestationCommand.js';\nimport AddChatItemAction from '../classes/livechat/AddChatItemAction.js';\nimport UpdateDateTextAction from '../classes/livechat/UpdateDateTextAction.js';\nimport UpdateDescriptionAction from '../classes/livechat/UpdateDescriptionAction.js';\nimport UpdateTitleAction from '../classes/livechat/UpdateTitleAction.js';\nimport UpdateToggleButtonTextAction from '../classes/livechat/UpdateToggleButtonTextAction.js';\nimport UpdateViewershipAction from '../classes/livechat/UpdateViewershipAction.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport ItemMenu from './ItemMenu.js';\n\nimport { LiveMessageParams } from '../../../protos/generated/misc/params.js';\n\nimport type { ObservedArray, YTNode } from '../helpers.js';\n\nimport type VideoInfo from './VideoInfo.js';\nimport type AddBannerToLiveChatCommand from '../classes/livechat/AddBannerToLiveChatCommand.js';\nimport type RemoveBannerForLiveChatCommand from '../classes/livechat/RemoveBannerForLiveChatCommand.js';\nimport type ShowLiveChatTooltipCommand from '../classes/livechat/ShowLiveChatTooltipCommand.js';\nimport type LiveChatAutoModMessage from '../classes/livechat/items/LiveChatAutoModMessage.js';\nimport type LiveChatMembershipItem from '../classes/livechat/items/LiveChatMembershipItem.js';\nimport type LiveChatPaidMessage from '../classes/livechat/items/LiveChatPaidMessage.js';\nimport type LiveChatPaidSticker from '../classes/livechat/items/LiveChatPaidSticker.js';\nimport type LiveChatTextMessage from '../classes/livechat/items/LiveChatTextMessage.js';\nimport type LiveChatViewerEngagementMessage from '../classes/livechat/items/LiveChatViewerEngagementMessage.js';\nimport type AddLiveChatTickerItemAction from '../classes/livechat/AddLiveChatTickerItemAction.js';\nimport type MarkChatItemAsDeletedAction from '../classes/livechat/MarkChatItemAsDeletedAction.js';\nimport type MarkChatItemsByAuthorAsDeletedAction from '../classes/livechat/MarkChatItemsByAuthorAsDeletedAction.js';\nimport type ReplaceChatItemAction from '../classes/livechat/ReplaceChatItemAction.js';\nimport type ReplayChatItemAction from '../classes/livechat/ReplayChatItemAction.js';\nimport type ShowLiveChatActionPanelAction from '../classes/livechat/ShowLiveChatActionPanelAction.js';\nimport type Button from '../classes/Button.js';\n\nimport type { Actions } from '../../core/index.js';\nimport type { IParsedResponse, IUpdatedMetadataResponse } from '../types/index.js';\n\nexport type ChatAction =\n  AddChatItemAction | AddBannerToLiveChatCommand | AddLiveChatTickerItemAction |\n  MarkChatItemAsDeletedAction | MarkChatItemsByAuthorAsDeletedAction | RemoveBannerForLiveChatCommand |\n  ReplaceChatItemAction | ReplayChatItemAction | ShowLiveChatActionPanelAction | ShowLiveChatTooltipCommand;\n\nexport type ChatItemWithMenu = LiveChatAutoModMessage | LiveChatMembershipItem | LiveChatPaidMessage | LiveChatPaidSticker | LiveChatTextMessage | LiveChatViewerEngagementMessage;\n\nexport type LiveMetadata = {\n  title?: UpdateTitleAction;\n  description?: UpdateDescriptionAction;\n  views?: UpdateViewershipAction;\n  likes?: UpdateToggleButtonTextAction;\n  date?: UpdateDateTextAction;\n}\n\nexport default class LiveChat extends EventEmitter {\n  readonly #actions: Actions;\n  readonly #video_id: string;\n  readonly #channel_id: string;\n  \n  #continuation?: string;\n  #mcontinuation?: string;\n  #retry_count = 0;\n  \n  public smoothed_queue: SmoothedQueue;\n  public initial_info?: LiveChatContinuation;\n  public metadata?: LiveMetadata;\n  public running = false;\n  public is_replay = false;\n\n  constructor(video_info: VideoInfo) {\n    super();\n\n    this.#video_id = video_info.basic_info.id as string;\n    this.#channel_id = video_info.basic_info.channel_id as string;\n    this.#actions = video_info.actions;\n    this.#continuation = video_info.livechat?.continuation;\n    this.is_replay = video_info.livechat?.is_replay || false;\n    this.smoothed_queue = new SmoothedQueue();\n\n    this.smoothed_queue.callback = async (actions: YTNode[]) => {\n      if (!actions.length) {\n        // Wait 2 seconds before requesting an incremental continuation if the action group is empty.\n        await this.#wait(2000);\n      } else if (actions.length < 10) {\n        // If there are less than 10 actions, wait until all of them are emitted.\n        await this.#emitSmoothedActions(actions);\n      } else if (this.is_replay) {\n        /**\n         * NOTE: Live chat replays require data from the video player for actions to be emitted timely\n         * and as we don't have that, this ends up being quite innacurate.\n         */\n        this.#emitSmoothedActions(actions);\n        await this.#wait(2000);\n      } else {\n        // There are more than 10 actions, emit them asynchronously so we can request the next incremental continuation.\n        this.#emitSmoothedActions(actions);\n      }\n\n      if (this.running) {\n        this.#pollLivechat();\n      }\n    };\n  }\n\n  on(type: 'start', listener: (initial_data: LiveChatContinuation) => void): void;\n  on(type: 'chat-update', listener: (action: ChatAction) => void): void;\n  on(type: 'metadata-update', listener: (metadata: LiveMetadata) => void): void;\n  on(type: 'error', listener: (err: Error) => void): void;\n  on(type: 'end', listener: () => void): void;\n  on(type: string, listener: (...args: any[]) => void): void {\n    super.on(type, listener);\n  }\n\n  once(type: 'start', listener: (initial_data: LiveChatContinuation) => void): void;\n  once(type: 'chat-update', listener: (action: ChatAction) => void): void;\n  once(type: 'metadata-update', listener: (metadata: LiveMetadata) => void): void;\n  once(type: 'error', listener: (err: Error) => void): void;\n  once(type: 'end', listener: () => void): void;\n  once(type: string, listener: (...args: any[]) => void): void {\n    super.once(type, listener);\n  }\n\n  start() {\n    if (!this.running) {\n      this.running = true;\n      this.#pollLivechat();\n      this.#pollMetadata();\n    }\n  }\n\n  stop() {\n    this.smoothed_queue.clear();\n    this.running = false;\n  }\n\n  #pollLivechat() {\n    (async () => {\n      try {\n        const response = await this.#actions.execute(\n          this.is_replay ? 'live_chat/get_live_chat_replay' : 'live_chat/get_live_chat',\n          { continuation: this.#continuation, parse: true }\n        );\n\n        const contents = response.continuation_contents;\n\n        if (!contents) {\n          this.emit('error', new InnertubeError('Unexpected live chat incremental continuation response', response));\n          this.emit('end');\n          this.stop();\n        }\n\n        if (!(contents instanceof LiveChatContinuation)) {\n          this.stop();\n          this.emit('end');\n          return;\n        }\n\n        this.#continuation = contents.continuation.token;\n\n        // Header only exists in the first request\n        if (contents.header) {\n          this.initial_info = contents;\n          this.emit('start', contents);\n          if (this.running)\n            this.#pollLivechat();\n        } else {\n          this.smoothed_queue.enqueueActionGroup(contents.actions);\n        }\n\n        this.#retry_count = 0;\n      } catch (err) {\n        this.emit('error', err);\n\n        if (this.#retry_count++ < 10) {\n          await this.#wait(2000);\n          this.#pollLivechat();\n        } else {\n          this.emit('error', new InnertubeError('Reached retry limit for incremental continuation requests', err));\n          this.emit('end');\n          this.stop();\n        }\n      }\n    })();\n  }\n\n  /**\n   * Ensures actions are emitted at the right speed.\n   * This and {@link SmoothedQueue} were based off of YouTube's own implementation.\n   */\n  async #emitSmoothedActions(action_queue: YTNode[]) {\n    const base = 1E4;\n\n    let delay = action_queue.length < base / 80 ? 1 : Math.ceil(action_queue.length / (base / 80));\n\n    const emit_delay_ms =\n      delay == 1 ? (\n        delay = base / action_queue.length,\n        delay *= Math.random() + 0.5,\n        delay = Math.min(1E3, delay),\n        delay = Math.max(80, delay)\n      ) : delay = 80;\n\n    for (const action of action_queue) {\n      await this.#wait(emit_delay_ms);\n      this.emit('chat-update', action);\n    }\n  }\n\n  #pollMetadata() {\n    (async () => {\n      try {\n        const payload: {\n          videoId?: string;\n          continuation?: string;\n        } = { videoId: this.#video_id };\n\n        if (this.#mcontinuation) {\n          payload.continuation = this.#mcontinuation;\n        }\n\n        const response = await this.#actions.execute('/updated_metadata', payload);\n        const data = Parser.parseResponse<IUpdatedMetadataResponse>(response.data);\n\n        this.#mcontinuation = data.continuation?.token;\n\n        this.metadata = {\n          title: data.actions?.array().firstOfType(UpdateTitleAction) || this.metadata?.title,\n          description: data.actions?.array().firstOfType(UpdateDescriptionAction) || this.metadata?.description,\n          views: data.actions?.array().firstOfType(UpdateViewershipAction) || this.metadata?.views,\n          likes: data.actions?.array().firstOfType(UpdateToggleButtonTextAction) || this.metadata?.likes,\n          date: data.actions?.array().firstOfType(UpdateDateTextAction) || this.metadata?.date\n        };\n\n        this.emit('metadata-update', this.metadata);\n\n        await this.#wait(5000);\n\n        if (this.running)\n          this.#pollMetadata();\n      } catch {\n        await this.#wait(2000);\n        if (this.running)\n          this.#pollMetadata();\n      }\n    })();\n  }\n\n  /**\n   * Sends a message.\n   * @param text - Text to send.\n   */\n  async sendMessage(text: string): Promise<ObservedArray<AddChatItemAction | RunAttestationCommand>> {\n    const writer = LiveMessageParams.encode({\n      params: {\n        ids: {\n          videoId: this.#video_id,\n          channelId: this.#channel_id\n        }\n      },\n      number0: 1,\n      number1: 4\n    });\n\n    const params = btoa(encodeURIComponent(u8ToBase64(writer.finish())));\n\n    const response = await this.#actions.execute('/live_chat/send_message', {\n      richMessage: { textSegments: [ { text } ] },\n      clientMessageId: Platform.shim.uuidv4(),\n      client: 'WEB',\n      parse: true,\n      params\n    });\n\n    if (!response.actions)\n      throw new InnertubeError('Unexpected response from send_message', response);\n\n    return response.actions.array().as(AddChatItemAction, RunAttestationCommand);\n  }\n\n  /**\n   * Applies given filter to the live chat.\n   * @param filter - Filter to apply.\n   */\n  applyFilter(filter: 'TOP_CHAT' | 'LIVE_CHAT'): void {\n    if (!this.initial_info)\n      throw new InnertubeError('Cannot apply filter before initial info is retrieved.');\n\n    const menu_items = this.initial_info?.header?.view_selector?.sub_menu_items;\n\n    if (filter === 'TOP_CHAT') {\n      if (menu_items?.at(0)?.selected) return;\n      this.#continuation = menu_items?.at(0)?.continuation;\n    } else {\n      if (menu_items?.at(1)?.selected) return;\n      this.#continuation = menu_items?.at(1)?.continuation;\n    }\n  }\n\n  /**\n   * Retrieves given chat item's menu.\n   */\n  async getItemMenu(item: ChatItemWithMenu): Promise<ItemMenu> {\n    if (!item.hasKey('menu_endpoint') || !item.key('menu_endpoint').isInstanceof(NavigationEndpoint))\n      throw new InnertubeError('This item does not have a menu.', item);\n\n    const response = await item.key('menu_endpoint').instanceof(NavigationEndpoint).call(this.#actions, { parse: true });\n\n    if (!response)\n      throw new InnertubeError('Could not retrieve item menu.', item);\n\n    return new ItemMenu(response, this.#actions);\n  }\n\n  /**\n   * Equivalent to \"clicking\" a button.\n   */\n  async selectButton(button: Button): Promise<IParsedResponse> {\n    return await button.endpoint.call(this.#actions, { parse: true });\n  }\n\n  async #wait(ms: number) {\n    return new Promise<void>((resolve) => setTimeout(() => resolve(), ms));\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport SimpleMenuHeader from '../classes/menus/SimpleMenuHeader.js';\nimport Notification from '../classes/Notification.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IGetNotificationsMenuResponse } from '../types/index.js';\n\nexport default class NotificationsMenu {\n  readonly #page: IGetNotificationsMenuResponse;\n  readonly #actions: Actions;\n\n  public header: SimpleMenuHeader;\n  public contents: Notification[];\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IGetNotificationsMenuResponse>(response.data);\n\n    if (!this.#page.actions_memo)\n      throw new InnertubeError('Page actions not found');\n\n    this.header = this.#page.actions_memo.getType(SimpleMenuHeader)[0];\n    this.contents = this.#page.actions_memo.getType(Notification);\n  }\n\n  async getContinuation(): Promise<NotificationsMenu> {\n    const continuation = this.#page.actions_memo?.getType(ContinuationItem)[0];\n\n    if (!continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const response = await continuation.endpoint.call(this.#actions, { parse: false });\n\n    return new NotificationsMenu(this.#actions, response);\n  }\n\n  get page(): IGetNotificationsMenuResponse {\n    return this.#page;\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport HorizontalCardList from '../classes/HorizontalCardList.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport SearchHeader from '../classes/SearchHeader.js';\nimport SearchRefinementCard from '../classes/SearchRefinementCard.js';\nimport SearchSubMenu from '../classes/SearchSubMenu.js';\nimport SectionList from '../classes/SectionList.js';\nimport UniversalWatchCard from '../classes/UniversalWatchCard.js';\n\nimport { observe } from '../helpers.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nexport default class Search extends Feed<ISearchResponse> {\n  public header?: SearchHeader;\n  public results: ObservedArray<YTNode>;\n  public refinements: string[];\n  public estimated_results: number;\n  public sub_menu?: SearchSubMenu;\n  public watch_card?: UniversalWatchCard;\n  public refinement_cards?: HorizontalCardList | null;\n\n  constructor(actions: Actions, data: ApiResponse | ISearchResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n\n    const contents =\n      this.page.contents_memo?.getType(SectionList)[0].contents ||\n      this.page.on_response_received_commands?.[0].as(AppendContinuationItemsAction, ReloadContinuationItemsCommand).contents;\n\n    if (!contents)\n      throw new InnertubeError('No contents found in search response');\n\n    if (this.page.header)\n      this.header = this.page.header.item().as(SearchHeader);\n\n    this.results = observe(contents.filterType(ItemSection).flatMap((section) => section.contents));\n\n    this.refinements = this.page.refinements || [];\n    this.estimated_results = this.page.estimated_results || 0;\n\n    if (this.page.contents_memo) {\n      this.sub_menu = this.page.contents_memo.getType(SearchSubMenu)[0];\n      this.watch_card = this.page.contents_memo.getType(UniversalWatchCard)[0];\n    }\n\n    this.refinement_cards = this.results?.firstOfType(HorizontalCardList);\n  }\n\n  /**\n   * Applies given refinement card and returns a new {@link Search} object. Use {@link refinement_card_queries} to get a list of available refinement cards.\n   */\n  async selectRefinementCard(card: SearchRefinementCard | string): Promise<Search> {\n    let target_card: SearchRefinementCard | undefined;\n\n    if (typeof card === 'string') {\n      if (!this.refinement_cards) throw new InnertubeError('No refinement cards found.');\n      target_card = this.refinement_cards?.cards.get({ query: card })?.as(SearchRefinementCard);\n      if (!target_card)\n        throw new InnertubeError(`Refinement card \"${card}\" not found`, { available_cards: this.refinement_card_queries });\n    } else if (card.type === 'SearchRefinementCard') {\n      target_card = card;\n    } else {\n      throw new InnertubeError('Invalid refinement card!');\n    }\n\n    const page = await target_card.endpoint.call<ISearchResponse>(this.actions, { parse: true });\n\n    return new Search(this.actions, page, true);\n  }\n\n  /**\n   * Returns a list of refinement card queries.\n   */\n  get refinement_card_queries(): string[] {\n    return this.refinement_cards?.cards.as(SearchRefinementCard).map((card) => card.query) || [];\n  }\n\n  /**\n   * Retrieves next batch of search results.\n   */\n  async getContinuation(): Promise<Search> {\n    const response = await this.getContinuationData();\n    if (!response)\n      throw new InnertubeError('Could not get continuation data');\n    return new Search(this.actions, response, true);\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport CompactLink from '../classes/CompactLink.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport PageIntroduction from '../classes/PageIntroduction.js';\nimport SectionList from '../classes/SectionList.js';\nimport SettingsOptions from '../classes/SettingsOptions.js';\nimport SettingsSidebar from '../classes/SettingsSidebar.js';\nimport SettingsSwitch from '../classes/SettingsSwitch.js';\nimport CommentsHeader from '../classes/comments/CommentsHeader.js';\nimport ItemSectionHeader from '../classes/ItemSectionHeader.js';\nimport ItemSectionTabbedHeader from '../classes/ItemSectionTabbedHeader.js';\nimport TwoColumnBrowseResults from '../classes/TwoColumnBrowseResults.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Settings {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public sidebar?: SettingsSidebar;\n  public introduction?: PageIntroduction;\n  public sections;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    this.sidebar = this.#page.sidebar?.as(SettingsSidebar);\n\n    if (!this.#page.contents)\n      throw new InnertubeError('Page contents not found');\n\n    const tab = this.#page.contents.item().as(TwoColumnBrowseResults).tabs.get({ selected: true });\n\n    if (!tab)\n      throw new InnertubeError('Target tab not found');\n\n    const contents = tab.content?.as(SectionList).contents.as(ItemSection);\n\n    this.introduction = contents?.shift()?.contents?.firstOfType(PageIntroduction);\n\n    this.sections = contents?.map((el: ItemSection) => ({\n      title: el.header?.is(CommentsHeader, ItemSectionHeader, ItemSectionTabbedHeader) ? el.header.title.toString() : null,\n      contents: el.contents\n    }));\n  }\n\n  /**\n   * Selects an item from the sidebar menu. Use {@link sidebar_items} to see available items.\n   */\n  async selectSidebarItem(target_item: string | CompactLink): Promise<Settings> {\n    if (!this.sidebar)\n      throw new InnertubeError('Sidebar not available');\n\n    let item: CompactLink | undefined;\n\n    if (typeof target_item === 'string') {\n      item = this.sidebar.items.get({ title: target_item });\n      if (!item)\n        throw new InnertubeError(`Item \"${target_item}\" not found`, { available_items: this.sidebar_items });\n    } else if (target_item?.is(CompactLink)) {\n      item = target_item;\n    } else {\n      throw new InnertubeError('Invalid item', { target_item });\n    }\n\n    const response = await item.endpoint.call(this.#actions, { parse: false });\n\n    return new Settings(this.#actions, response);\n  }\n\n  /**\n   * Finds a setting by name and returns it. Use {@link setting_options} to see available options.\n   */\n  getSettingOption(name: string): SettingsSwitch {\n    if (!this.sections)\n      throw new InnertubeError('Sections not available');\n\n    for (const section of this.sections) {\n      if (!section.contents) continue;\n      for (const el of section.contents) {\n        const options = el.as(SettingsOptions).options;\n        if (options) {\n          for (const option of options) {\n            if (\n              option.is(SettingsSwitch) &&\n              option.title?.toString() === name\n            )\n              return option;\n          }\n        }\n      }\n    }\n\n    throw new InnertubeError(`Option \"${name}\" not found`, { available_options: this.setting_options });\n  }\n\n  /**\n   * Returns settings available in the page.\n   */\n  get setting_options(): string[] {\n    if (!this.sections)\n      throw new InnertubeError('Sections not available');\n\n    let options: any[] = [];\n\n    for (const section of this.sections) {\n      if (!section.contents) continue;\n      for (const el of section.contents) {\n        if (el.as(SettingsOptions).options)\n          options = options.concat(el.as(SettingsOptions).options);\n      }\n    }\n\n    return options.map((opt) => opt.title?.toString()).filter((el) => el);\n  }\n\n  /**\n   * Returns options available in the sidebar.\n   */\n  get sidebar_items(): string[] {\n    if (!this.sidebar)\n      throw new InnertubeError('Sidebar not available');\n\n    return this.sidebar.items.map((item) => item.title.toString());\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { MediaInfo } from '../../core/mixins/index.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport CommentsEntryPointHeader from '../classes/comments/CommentsEntryPointHeader.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport LiveChat from '../classes/LiveChat.js';\nimport MerchandiseShelf from '../classes/MerchandiseShelf.js';\nimport PlayerMicroformat from '../classes/PlayerMicroformat.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport RelatedChipCloud from '../classes/RelatedChipCloud.js';\nimport RichMetadata from '../classes/RichMetadata.js';\nimport RichMetadataRow from '../classes/RichMetadataRow.js';\nimport SegmentedLikeDislikeButton from '../classes/SegmentedLikeDislikeButton.js';\nimport SegmentedLikeDislikeButtonView from '../classes/SegmentedLikeDislikeButtonView.js';\nimport ToggleButton from '../classes/ToggleButton.js';\nimport TwoColumnWatchNextResults from '../classes/TwoColumnWatchNextResults.js';\nimport VideoPrimaryInfo from '../classes/VideoPrimaryInfo.js';\nimport VideoSecondaryInfo from '../classes/VideoSecondaryInfo.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport PlayerLegacyDesktopYpcTrailer from '../classes/PlayerLegacyDesktopYpcTrailer.js';\nimport YpcTrailer from '../classes/YpcTrailer.js';\nimport StructuredDescriptionContent from '../classes/StructuredDescriptionContent.js';\nimport VideoDescriptionMusicSection from '../classes/VideoDescriptionMusicSection.js';\nimport LiveChatWrap from './LiveChat.js';\nimport MacroMarkersListEntity from '../classes/MacroMarkersListEntity.js';\n\nimport type { RawNode } from '../index.js';\nimport { ReloadContinuationItemsCommand } from '../index.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type Heatmap from '../classes/Heatmap.js';\n\nexport default class VideoInfo extends MediaInfo {\n  public primary_info?: VideoPrimaryInfo | null;\n  public secondary_info?: VideoSecondaryInfo | null;\n  public playlist?: TwoColumnWatchNextResults['playlist'];\n  public game_info?;\n  public merchandise?: MerchandiseShelf | null;\n  public related_chip_cloud?: ChipCloud | null;\n  public watch_next_feed?: ObservedArray<YTNode> | null;\n  public player_overlays?: PlayerOverlay | null;\n  public comments_entry_point_header?: CommentsEntryPointHeader | null;\n  public livechat?: LiveChat | null;\n  public autoplay?: TwoColumnWatchNextResults['autoplay'];\n  public heat_map?: Heatmap | null;\n\n  #watch_next_continuation?: ContinuationItem;\n  \n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const [ info, next ] = this.page;\n\n    if (this.streaming_data) {\n      const default_audio_track = this.streaming_data.adaptive_formats.find((format) => format.audio_track?.audio_is_default);\n      if (default_audio_track) {\n        // The combined formats only exist for the default language, even for videos with multiple audio tracks\n        // So we can copy the language from the default audio track to the combined formats\n        this.streaming_data.formats.forEach((format) => format.language = default_audio_track.language);\n      } else if (this.captions?.caption_tracks && this.captions?.caption_tracks.length > 0) {\n        // For videos with a single audio track and captions, we can use the captions to figure out the language of the audio and combined formats\n        const auto_generated_caption_track = this.captions.caption_tracks.find((caption) => caption.kind === 'asr');\n        const language_code = auto_generated_caption_track?.language_code;\n\n        this.streaming_data.adaptive_formats.forEach((format) => {\n          if (format.has_audio) {\n            format.language = language_code;\n          }\n        });\n        this.streaming_data.formats.forEach((format) => format.language = language_code);\n      }\n    }\n\n    const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);\n\n    const results = two_col?.results;\n    const secondary_results = two_col?.secondary_results;\n\n    if (results && secondary_results) {\n      if (info.microformat?.is(PlayerMicroformat) && info.microformat?.category === 'Gaming') {\n        const row = results.firstOfType(VideoSecondaryInfo)?.metadata?.rows?.firstOfType(RichMetadataRow);\n        if (row?.is(RichMetadataRow)) {\n          this.game_info = {\n            title: row?.contents?.firstOfType(RichMetadata)?.title,\n            release_year: row?.contents?.firstOfType(RichMetadata)?.subtitle\n          };\n        }\n      }\n\n      this.primary_info = results.firstOfType(VideoPrimaryInfo);\n      this.secondary_info = results.firstOfType(VideoSecondaryInfo);\n      this.merchandise = results.firstOfType(MerchandiseShelf);\n      this.related_chip_cloud = secondary_results.firstOfType(RelatedChipCloud)?.content.as(ChipCloud);\n\n      if (two_col?.playlist) {\n        this.playlist = two_col.playlist;\n      }\n\n      this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;\n\n      if (this.watch_next_feed && Array.isArray(this.watch_next_feed) && this.watch_next_feed.at(-1)?.is(ContinuationItem))\n        this.#watch_next_continuation = this.watch_next_feed.pop()?.as(ContinuationItem);\n\n      this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);\n\n      if (two_col?.autoplay) {\n        this.autoplay = two_col.autoplay;\n      }\n\n      const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n\n      if (segmented_like_dislike_button?.like_button?.is(ToggleButton) && segmented_like_dislike_button?.dislike_button?.is(ToggleButton)) {\n        this.basic_info.like_count = segmented_like_dislike_button?.like_button?.like_count;\n        this.basic_info.is_liked = segmented_like_dislike_button?.like_button?.is_toggled;\n        this.basic_info.is_disliked = segmented_like_dislike_button?.dislike_button?.is_toggled;\n      }\n\n      const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n      if (segmented_like_dislike_button_view) {\n        this.basic_info.like_count = segmented_like_dislike_button_view.like_count;\n\n        if (segmented_like_dislike_button_view.like_button) {\n          const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n          this.basic_info.is_liked = like_status === 'LIKE';\n          this.basic_info.is_disliked = like_status === 'DISLIKE';\n        }\n      }\n\n      const comments_entry_point = results.get({ target_id: 'comments-entry-point' })?.as(ItemSection);\n\n      this.comments_entry_point_header = comments_entry_point?.contents?.firstOfType(CommentsEntryPointHeader);\n      this.livechat = next?.contents_memo?.getType(LiveChat)[0];\n\n      const macro_markers_list_for_heatmap = this.page[1]?.contents_memo?.getType(MacroMarkersListEntity);\n      let calculated_heat_map: Heatmap | null = null;\n      if (macro_markers_list_for_heatmap) {\n        const heatmap_markers_entity = macro_markers_list_for_heatmap.find((markers) => \n          markers.isHeatmap()\n        );\n        if (heatmap_markers_entity) {\n          try {\n            calculated_heat_map = heatmap_markers_entity.toHeatmap();\n          } catch { /** NO-OP */ }\n        }\n      }\n      this.heat_map = calculated_heat_map;\n    }\n  }\n\n  /**\n   * Applies given filter to the watch next feed. Use {@link filters} to get available filters.\n   * @param target_filter - Filter to apply.\n   */\n  async selectFilter(target_filter: string | ChipCloudChip | undefined): Promise<VideoInfo> {\n    if (!this.related_chip_cloud)\n      throw new InnertubeError('Chip cloud not found, cannot apply filter');\n\n    let cloud_chip: ChipCloudChip;\n\n    if (typeof target_filter === 'string') {\n      const filter = this.related_chip_cloud?.chips?.get({ text: target_filter });\n\n      if (!filter)\n        throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n      cloud_chip = filter;\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    } else {\n      throw new InnertubeError('Invalid cloud chip', target_filter);\n    }\n\n    if (cloud_chip.is_selected) return this;\n\n    const response = await cloud_chip.endpoint?.call(this.actions, { parse: true });\n    const data = response?.on_response_received_endpoints?.get({ target_id: 'watch-next-feed' });\n\n    this.watch_next_feed = data?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand).contents;\n\n    return this;\n  }\n\n  /**\n   * Adds video to the watch history.\n   */\n  async addToWatchHistory(): Promise<Response> {\n    return super.addToWatchHistory();\n  }\n\n  /**\n   * Updates watch time for the video.\n   */\n  async updateWatchTime(startTime: number): Promise<Response> {\n    return super.updateWatchTime(startTime);\n  }\n\n  /**\n   * Retrieves watch next feed continuation.\n   */\n  async getWatchNextContinuation(): Promise<VideoInfo> {\n    if (!this.#watch_next_continuation)\n      throw new InnertubeError('Watch next feed continuation not found');\n\n    const response = await this.#watch_next_continuation?.endpoint.call(this.actions, { parse: true });\n    const data = response?.on_response_received_endpoints?.get({ type: 'AppendContinuationItemsAction' });\n\n    if (!data)\n      throw new InnertubeError('AppendContinuationItemsAction not found');\n\n    this.watch_next_feed = data?.as(AppendContinuationItemsAction, ReloadContinuationItemsCommand).contents;\n    if (this.watch_next_feed?.at(-1)?.is(ContinuationItem)) {\n      this.#watch_next_continuation = this.watch_next_feed.pop()?.as(ContinuationItem);\n    } else {\n      this.#watch_next_continuation = undefined;\n    }\n\n    return this;\n  }\n\n  /**\n   * Likes the video.\n   */\n  async like(): Promise<ApiResponse> {\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n\n      if (!button || !button.default_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'LIKE')\n        throw new InnertubeError('This video is already liked', { video_id: this.basic_info.id });\n\n      if (!button.default_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.default_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n    const button = segmented_like_dislike_button?.like_button;\n\n    if (!button)\n      throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n    if (!button.is(ToggleButton))\n      throw new InnertubeError('Like button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This video is already liked', { video_id: this.basic_info.id });\n\n    return await button.endpoint.call(this.actions);\n  }\n\n  /**\n   * Dislikes the video.\n   */\n  async dislike(): Promise<ApiResponse> {\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const button = segmented_like_dislike_button_view?.dislike_button?.toggle_button;\n\n      if (!button || !button.default_button || !segmented_like_dislike_button_view.dislike_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Dislike button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'DISLIKE')\n        throw new InnertubeError('This video is already disliked', { video_id: this.basic_info.id });\n\n      if (!button.default_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.default_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n    const button = segmented_like_dislike_button?.dislike_button;\n\n    if (!button)\n      throw new InnertubeError('Dislike button not found', { video_id: this.basic_info.id });\n\n    if (!button.is(ToggleButton))\n      throw new InnertubeError('Dislike button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (button.is_toggled)\n      throw new InnertubeError('This video is already disliked', { video_id: this.basic_info.id });\n\n    return await button.endpoint.call(this.actions);\n  }\n\n  /**\n   * Removes like/dislike.\n   */\n  async removeRating(): Promise<ApiResponse> {\n    let button;\n\n    const segmented_like_dislike_button_view = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButtonView);\n\n    if (segmented_like_dislike_button_view) {\n      const toggle_button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n\n      if (!toggle_button || !toggle_button.default_button || !segmented_like_dislike_button_view.like_button)\n        throw new InnertubeError('Like button not found', { video_id: this.basic_info.id });\n\n      const like_status = segmented_like_dislike_button_view.like_button.like_status_entity.like_status;\n\n      if (like_status === 'LIKE') {\n        button = segmented_like_dislike_button_view?.like_button?.toggle_button;\n      } else if (like_status === 'DISLIKE') {\n        button = segmented_like_dislike_button_view?.dislike_button?.toggle_button;\n      } else {\n        throw new InnertubeError('This video is not liked/disliked', { video_id: this.basic_info.id });\n      }\n\n      if (!button || !button.toggled_button)\n        throw new InnertubeError('Like/Dislike button not found', { video_id: this.basic_info.id });\n      \n      if (!button.toggled_button.on_tap)\n        throw new InnertubeError('onTap command not found', { video_id: this.basic_info.id });\n      \n      const endpoint = new NavigationEndpoint(button.toggled_button.on_tap.payload.commands.find((cmd: RawNode) => cmd.innertubeCommand));\n\n      return await endpoint.call(this.actions);\n    }\n\n    const segmented_like_dislike_button = this.primary_info?.menu?.top_level_buttons.firstOfType(SegmentedLikeDislikeButton);\n\n    const like_button = segmented_like_dislike_button?.like_button;\n    const dislike_button = segmented_like_dislike_button?.dislike_button;\n\n    if (!like_button?.is(ToggleButton) || !dislike_button?.is(ToggleButton))\n      throw new InnertubeError('Like/Dislike button is not a toggle button. This action is likely disabled for this video.', { video_id: this.basic_info.id });\n\n    if (like_button?.is_toggled) {\n      button = like_button;\n    } else if (dislike_button?.is_toggled) {\n      button = dislike_button;\n    }\n\n    if (!button)\n      throw new InnertubeError('This video is not liked/disliked', { video_id: this.basic_info.id });\n\n    return await button.toggled_endpoint.call(this.actions);\n  }\n\n  /**\n   * Retrieves Live Chat if available.\n   */\n  getLiveChat(): LiveChatWrap {\n    if (!this.livechat)\n      throw new InnertubeError('Live Chat is not available', { video_id: this.basic_info.id });\n    return new LiveChatWrap(this);\n  }\n\n  /**\n   * Retrieves trailer info if available (typically for non-purchased movies or films).\n   * @returns `VideoInfo` for the trailer, or `null` if none.\n   */\n  getTrailerInfo(): VideoInfo | null {\n    if (this.has_trailer && this.playability_status?.error_screen) {\n      let player_response;\n      if (this.playability_status.error_screen.is(PlayerLegacyDesktopYpcTrailer)) {\n        player_response = this.playability_status.error_screen.trailer?.player_response;\n      } else if (this.playability_status.error_screen.is(YpcTrailer)) {\n        player_response = this.playability_status.error_screen.player_response;\n      }\n\n      if (player_response) {\n        return new VideoInfo([ { data: player_response } as ApiResponse ], this.actions, this.cpn);\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Watch next feed filters.\n   */\n  get filters(): string[] {\n    return this.related_chip_cloud?.chips?.map((chip) => chip.text?.toString()) || [];\n  }\n\n  /**\n   * Checks if continuation is available for the watch next feed.\n   */\n  get wn_has_continuation(): boolean {\n    return !!this.#watch_next_continuation;\n  }\n\n  /**\n   * Gets the endpoint of the autoplay video\n   */\n  get autoplay_video_endpoint(): NavigationEndpoint | null {\n    return this.autoplay?.sets?.[0]?.autoplay_video || null;\n  }\n\n  /**\n   * Checks if trailer is available.\n   */\n  get has_trailer(): boolean {\n    return !!this.playability_status?.error_screen?.is(PlayerLegacyDesktopYpcTrailer, YpcTrailer);\n  }\n\n  /**\n   * Get songs used in the video.\n   */\n  get music_tracks() {\n    // @TODO: Refactor this.\n    const description_content = this.page[1]?.engagement_panels?.filter((panel) => panel.content?.is(StructuredDescriptionContent));\n    if (description_content !== undefined && description_content.length > 0) {\n      const music_section = description_content[0].content?.as(StructuredDescriptionContent)?.items?.filterType(VideoDescriptionMusicSection);\n      if (music_section !== undefined && music_section.length > 0) {\n        return music_section[0].carousel_lockups?.map((lookup) => {\n          let song: string | undefined;\n          let artist: string | undefined;\n          let album: string | undefined;\n          let license: string | undefined;\n          let videoId: string | undefined;\n          let channelId: string | undefined;\n\n          // If the song isn't in the video_lockup, it should be in the info_rows\n          song = lookup.video_lockup?.title?.toString();\n          // If the video id isn't in the video_lockup, it should be in the info_rows\n          videoId = lookup.video_lockup?.endpoint?.payload.videoId;\n          for (let i = 0; i < lookup.info_rows.length; i++) {\n            const info_row = lookup.info_rows[i];\n            if (info_row.info_row_expand_status_key === undefined) {\n              if (song === undefined) {\n                song = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n                if (videoId === undefined) {\n                  const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;\n                  videoId = endpoint?.payload?.videoId;\n                }\n              } else {\n                album = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n              }\n            } else {\n              if (info_row.info_row_expand_status_key?.indexOf('structured-description-music-section-artists-row-state-id') !== -1) {\n                artist = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n                if (channelId === undefined) {\n                  const endpoint = info_row.default_metadata?.endpoint || info_row.expanded_metadata?.endpoint;\n                  channelId = endpoint?.payload?.browseId;\n                }\n              }\n              if (info_row.info_row_expand_status_key?.indexOf('structured-description-music-section-licenses-row-state-id') !== -1) {\n                license = info_row.default_metadata?.toString() || info_row.expanded_metadata?.toString();\n              }\n            }\n          }\n          return { song, artist, album, license, videoId, channelId };\n        });\n      }\n    }\n    return [];\n  }\n}", "import { Parser } from '../index.js';\nimport Transcript from '../classes/Transcript.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IGetTranscriptResponse } from '../index.js';\n\nexport default class TranscriptInfo {\n  readonly #page: IGetTranscriptResponse;\n  readonly #actions: Actions;\n  public transcript: Transcript;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#page = Parser.parseResponse(response.data);\n    this.#actions = actions;\n\n    if (!this.#page.actions_memo)\n      throw new Error('Page actions not found');\n\n    this.transcript = this.#page.actions_memo.getType(Transcript)[0];\n  }\n\n  /**\n   * Selects a language from the language menu and returns the updated transcript.\n   * @param language - Language to select.\n   */\n  async selectLanguage(language: string): Promise<TranscriptInfo> {\n    const target_menu_item = this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.title.toString() === language);\n\n    if (!target_menu_item)\n      throw new Error(`Language not found: ${language}`);\n\n    if (target_menu_item.selected)\n      return this;\n\n    const response = await this.#actions.execute('/get_transcript', {\n      params: target_menu_item.continuation\n    });\n\n    return new TranscriptInfo(this.#actions, response);\n  }\n\n  /**\n   * Returns available languages.\n   */\n  get languages(): string[] {\n    return this.transcript.content?.footer?.language_menu?.sub_menu_items?.map((item) => item.title.toString()) || [];\n  }\n\n  /**\n   * Returns the currently selected language.\n   */\n  get selectedLanguage(): string {\n    return this.transcript.content?.footer?.language_menu?.sub_menu_items?.find((item) => item.selected)?.title.toString() || '';\n  }\n\n  get page() {\n    return this.#page;\n  }\n}", "export { default as Album } from './Album.js';\nexport { default as Artist } from './Artist.js';\nexport { default as Explore } from './Explore.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as Library } from './Library.js';\nexport * from './Library.js';\nexport { default as Playlist } from './Playlist.js';\nexport { default as Recap } from './Recap.js';\nexport { default as Search } from './Search.js';\nexport { default as TrackInfo } from './TrackInfo.js';\n", "import { Parser } from '../index.js';\n\nimport MicroformatData from '../classes/MicroformatData.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicDetailHeader from '../classes/MusicDetailHeader.js';\nimport MusicResponsiveHeader from '../classes/MusicResponsiveHeader.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport type MusicThumbnail from '../classes/MusicThumbnail.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport { observe, type ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicResponsiveListItem from '../classes/MusicResponsiveListItem.js';\n\nexport default class Album {\n  readonly #page: IBrowseResponse;\n\n  public header?: MusicDetailHeader | MusicResponsiveHeader;\n  public contents: ObservedArray<MusicResponsiveListItem>;\n  public sections: ObservedArray<MusicCarouselShelf>;\n  public background?: MusicThumbnail;\n  public url?: string;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    if (!this.#page.contents_memo)\n      throw new Error('No contents found in the response');\n\n    this.header = this.#page.contents_memo.getType(MusicDetailHeader, MusicResponsiveHeader)?.[0];\n    this.contents = this.#page.contents_memo.getType(MusicShelf)?.[0].contents || observe([]);\n    this.sections = this.#page.contents_memo.getType(MusicCarouselShelf) || observe([]);\n    this.background = this.#page.background;\n    this.url = this.#page.microformat?.as(MicroformatData).url_canonical;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { Parser } from '../index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport { observe } from '../helpers.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport MusicShelf from '../classes/MusicShelf.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicPlaylistShelf from '../classes/MusicPlaylistShelf.js';\nimport MusicImmersiveHeader from '../classes/MusicImmersiveHeader.js';\nimport MusicVisualHeader from '../classes/MusicVisualHeader.js';\nimport MusicHeader from '../classes/MusicHeader.js';\n\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Artist {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public header?: MusicImmersiveHeader | MusicVisualHeader | MusicHeader;\n  public sections: ObservedArray<MusicCarouselShelf | MusicShelf>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    this.header = this.page.header?.item().as(MusicImmersiveHeader, MusicVisualHeader, MusicHeader);\n\n    const music_shelf = this.#page.contents_memo?.getType(MusicShelf) || [];\n    const music_carousel_shelf = this.#page.contents_memo?.getType(MusicCarouselShelf) || [];\n\n    this.sections = observe([ ...music_shelf, ...music_carousel_shelf ]);\n  }\n\n  async getAllSongs(): Promise<MusicPlaylistShelf | undefined> {\n    const music_shelves = this.sections.filter((section) => section.type === 'MusicShelf') as MusicShelf[];\n\n    if (!music_shelves.length)\n      throw new InnertubeError('Could not find any node of type MusicShelf.');\n\n    const shelf = music_shelves.find((shelf) => shelf.title?.text === 'Top songs') as MusicShelf;\n\n    if (!shelf)\n      throw new InnertubeError('Could not find target shelf (Top songs).');\n\n    if (!shelf.endpoint)\n      throw new InnertubeError('Target shelf (Top songs) did not have an endpoint.');\n\n    const page = await shelf.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n    return page.contents_memo?.getType(MusicPlaylistShelf)?.[0];\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}\n", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport Grid from '../classes/Grid.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicNavigationButton from '../classes/MusicNavigationButton.js';\nimport SectionList from '../classes/SectionList.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\n\nimport type { ApiResponse } from '../../core/index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class Explore {\n  readonly #page: IBrowseResponse;\n\n  public top_buttons: MusicNavigationButton[];\n  public sections: ObservedArray<MusicCarouselShelf>;\n\n  constructor(response: ApiResponse) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.get({ selected: true });\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const section_list = tab.content?.as(SectionList);\n\n    if (!section_list)\n      throw new InnertubeError('Target tab did not have any content.');\n\n    this.top_buttons = section_list.contents.firstOfType(Grid)?.items.as(MusicNavigationButton) || [];\n    this.sections = section_list.contents.filterType(MusicCarouselShelf);\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { Parser, SectionListContinuation } from '../index.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\nimport MusicTastebuilderShelf from '../classes/MusicTastebuilderShelf.js';\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class HomeFeed {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string;\n\n  sections?: ObservedArray<MusicCarouselShelf | MusicTastebuilderShelf>;\n  header?: ChipCloud;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.get({ selected: true });\n\n    if (!tab)\n      throw new InnertubeError('Could not find Home tab.');\n\n    if (tab.content === null) {\n      if (!this.#page.continuation_contents)\n        throw new InnertubeError('Continuation did not have any content.');\n\n      this.#continuation = this.#page.continuation_contents.as(SectionListContinuation).continuation;\n      this.sections = this.#page.continuation_contents.as(SectionListContinuation).contents?.as(MusicCarouselShelf);\n\n      return;\n    }\n\n    this.header = tab.content?.as(SectionList).header?.as(ChipCloud);\n    this.#continuation = tab.content?.as(SectionList).continuation;\n    this.sections = tab.content?.as(SectionList).contents.as(MusicCarouselShelf, MusicTastebuilderShelf);\n  }\n\n  /**\n   * Retrieves home feed continuation.\n   */\n  async getContinuation(): Promise<HomeFeed> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new HomeFeed(response, this.#actions);\n  }\n\n  async applyFilter(target_filter: string | ChipCloudChip): Promise<HomeFeed> {\n    let cloud_chip: ChipCloudChip | undefined;\n\n    if (typeof target_filter === 'string') {\n      cloud_chip = this.header?.chips?.as(ChipCloudChip).get({ text: target_filter });\n      if (!cloud_chip)\n        throw new InnertubeError('Could not find filter with given name.', { available_filters: this.filters });\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    }\n\n    if (!cloud_chip)\n      throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n    if (cloud_chip?.is_selected) return this;\n\n    if (!cloud_chip.endpoint)\n      throw new InnertubeError('Selected filter does not have an endpoint.');\n\n    const response = await cloud_chip.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new HomeFeed(response, this.#actions);\n  }\n\n  get filters(): string[] {\n    return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { Parser, GridContinuation, MusicShelfContinuation, SectionListContinuation } from '../index.js';\n\nimport Grid from '../classes/Grid.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport MusicSideAlignedItem from '../classes/MusicSideAlignedItem.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport SectionList from '../classes/SectionList.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport MusicMultiSelectMenuItem from '../classes/menus/MusicMultiSelectMenuItem.js';\nimport MusicSortFilterButton from '../classes/MusicSortFilterButton.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicMenuItemDivider from '../classes/menus/MusicMenuItemDivider.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type ChipCloudChip from '../classes/ChipCloudChip.js';\n\nexport default class Library {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string | null;\n\n  header?: MusicSideAlignedItem;\n  contents?: ObservedArray<Grid | MusicShelf>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    const section_list = this.#page.contents_memo?.getType(SectionList)[0];\n\n    this.header = section_list?.header?.as(MusicSideAlignedItem);\n    this.contents = section_list?.contents?.as(Grid, MusicShelf);\n\n    this.#continuation = this.contents?.find((list: Grid | MusicShelf) => list.continuation)?.continuation;\n  }\n\n  /**\n   * Applies given sort option to the library items.\n   */\n  async applySort(sort_by: string | MusicMultiSelectMenuItem): Promise<Library> {\n    let target_item: MusicMultiSelectMenuItem | undefined;\n\n    if (typeof sort_by === 'string') {\n      const button = this.#page.contents_memo?.getType(MusicSortFilterButton)[0];\n\n      const options = button?.menu?.options\n        .filter(\n          (item: MusicMultiSelectMenuItem | MusicMenuItemDivider) => item instanceof MusicMultiSelectMenuItem\n        ) as MusicMultiSelectMenuItem[];\n\n      target_item = options?.find((item) => item.title === sort_by);\n\n      if (!target_item)\n        throw new InnertubeError(`Sort option \"${sort_by}\" not found`, { available_filters: options.map((item) => item.title) });\n    } else {\n      target_item = sort_by;\n    }\n\n    if (!target_item.endpoint)\n      throw new InnertubeError('Invalid sort option');\n\n    if (target_item.selected)\n      return this;\n\n    const cmd = target_item.endpoint.payload?.commands?.find((cmd: any) => cmd.browseSectionListReloadEndpoint)?.browseSectionListReloadEndpoint;\n\n    if (!cmd)\n      throw new InnertubeError('Failed to find sort option command');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: cmd.continuation.reloadContinuationData.continuation,\n      parse: true\n    });\n\n    const previously_selected_item = this.#page.contents_memo?.getType(MusicMultiSelectMenuItem)?.find((item) => item.selected);\n    if (previously_selected_item)\n      previously_selected_item.selected = false;\n\n    target_item.selected = true;\n\n    this.contents = response.continuation_contents?.as(SectionListContinuation).contents?.as(Grid, MusicShelf);\n\n    return this;\n  }\n\n  /**\n   * Applies given filter to the library.\n   */\n  async applyFilter(filter: string | ChipCloudChip): Promise<Library> {\n    let target_chip: ChipCloudChip | undefined;\n\n    const chip_cloud = this.#page.contents_memo?.getType(ChipCloud)[0];\n\n    if (typeof filter === 'string') {\n      target_chip = chip_cloud?.chips.get({ text: filter });\n\n      if (!target_chip)\n        throw new InnertubeError(`Filter \"${filter}\" not found`, { available_filters: this.filters });\n    } else {\n      target_chip = filter;\n    }\n\n    if (!target_chip.endpoint)\n      throw new InnertubeError('Invalid filter', filter);\n\n    const target_cmd = new NavigationEndpoint(target_chip.endpoint.payload?.commands?.[0]);\n    const response = await target_cmd.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Library(response, this.#actions);\n  }\n\n  /**\n   * Retrieves continuation of the library items.\n   */\n  async getContinuation(): Promise<LibraryContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('No continuation available');\n\n    const page = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new LibraryContinuation(page, this.#actions);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get sort_options(): string[] {\n    const button = this.#page.contents_memo?.getType(MusicSortFilterButton)[0];\n    const options = button?.menu?.options.filter((item: MusicMultiSelectMenuItem | MusicMenuItemDivider) => item instanceof MusicMultiSelectMenuItem) as MusicMultiSelectMenuItem[];\n    return options.map((item) => item.title);\n  }\n\n  get filters(): string[] {\n    return this.#page.contents_memo?.getType(ChipCloud)?.[0].chips.map((chip: ChipCloudChip) => chip.text) || [];\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}\n\nexport class LibraryContinuation {\n  #page;\n  #actions;\n  #continuation;\n\n  contents: GridContinuation | MusicShelfContinuation;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    if (!this.#page.continuation_contents)\n      throw new InnertubeError('No continuation contents found');\n\n    this.contents = this.#page.continuation_contents.as(MusicShelfContinuation, GridContinuation);\n\n    this.#continuation = this.contents.continuation || null;\n  }\n\n  async getContinuation(): Promise<LibraryContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('No continuation available');\n\n    const response = await this.#actions.execute('/browse', {\n      client: 'YTMUSIC',\n      continuation: this.#continuation\n    });\n\n    return new LibraryContinuation(response, this.#actions);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "// noinspection ES6MissingAwait\n\nimport { MusicPlaylistShelfContinuation, Parser, SectionListContinuation } from '../index.js';\n\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicDetailHeader from '../classes/MusicDetailHeader.js';\nimport MusicEditablePlaylistDetailHeader from '../classes/MusicEditablePlaylistDetailHeader.js';\nimport MusicPlaylistShelf from '../classes/MusicPlaylistShelf.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport MusicResponsiveListItem from '../classes/MusicResponsiveListItem.js';\nimport MusicResponsiveHeader from '../classes/MusicResponsiveHeader.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { observe, type ObservedArray } from '../helpers.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type MusicThumbnail from '../classes/MusicThumbnail.js';\nimport ContinuationItem from '../classes/ContinuationItem.js';\nimport AppendContinuationItemsAction from '../classes/actions/AppendContinuationItemsAction.js';\n\nexport default class Playlist {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string | ContinuationItem;\n\n  public header?: MusicResponsiveHeader | MusicDetailHeader | MusicEditablePlaylistDetailHeader;\n  public contents?: ObservedArray<MusicResponsiveListItem | ContinuationItem>;\n  public background?: MusicThumbnail;\n\n  #last_fetched_suggestions: ObservedArray<MusicResponsiveListItem> | null;\n  #suggestions_continuation: string | null;\n  \n  constructor(response: ApiResponse, actions: Actions) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n\n    this.#last_fetched_suggestions = null;\n    this.#suggestions_continuation = null;\n\n    if (this.#page.continuation_contents) {\n      const data = this.#page.continuation_contents?.as(MusicPlaylistShelfContinuation);\n      if (!data.contents)\n        throw new InnertubeError('No contents found in the response');\n      this.contents = data.contents.as(MusicResponsiveListItem, ContinuationItem);\n      const continuation_item = this.contents.firstOfType(ContinuationItem);\n      this.#continuation = data.continuation || continuation_item;\n    } else if (this.#page.contents_memo) {\n      this.header = this.#page.contents_memo.getType(MusicResponsiveHeader, MusicEditablePlaylistDetailHeader, MusicDetailHeader)?.[0];\n      this.contents = this.#page.contents_memo.getType(MusicPlaylistShelf)?.[0]?.contents.as(MusicResponsiveListItem, ContinuationItem) || observe([]);\n      this.background = this.#page.background;\n      const continuation_item = this.contents.firstOfType(ContinuationItem);\n      this.#continuation = this.#page.contents_memo.getType(MusicPlaylistShelf)?.[0]?.continuation || continuation_item;\n    } else if (this.#page.on_response_received_actions) {\n      const append_continuation_action = this.#page.on_response_received_actions.firstOfType(AppendContinuationItemsAction);\n      this.contents = append_continuation_action?.contents?.as(MusicResponsiveListItem, ContinuationItem);\n      this.#continuation = this.contents?.firstOfType(ContinuationItem);\n    }\n  }\n\n  /**\n   * Retrieves playlist items continuation.\n   */\n  async getContinuation(): Promise<Playlist> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    let response: ApiResponse;\n    \n    if (typeof this.#continuation === 'string') {\n      response = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: this.#continuation\n      });\n    } else {\n      response = await this.#continuation.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    }\n    \n    return new Playlist(response, this.#actions);\n  }\n\n  /**\n   * Retrieves related playlists\n   */\n  async getRelated(): Promise<MusicCarouselShelf> {\n    const target_section_list = this.#page.contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);\n\n    if (!target_section_list)\n      throw new InnertubeError('Could not find \"Related\" section.');\n\n    let section_continuation = target_section_list.continuation;\n\n    while (section_continuation) {\n      const data = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: section_continuation,\n        parse: true\n      });\n\n      const section_list = data.continuation_contents?.as(SectionListContinuation);\n      const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);\n\n      const related = sections?.find((section) => section.is(MusicCarouselShelf))?.as(MusicCarouselShelf);\n\n      if (related)\n        return related;\n\n      section_continuation = section_list?.continuation;\n    }\n\n    throw new InnertubeError('Could not fetch related playlists.');\n  }\n\n  async getSuggestions(refresh = true): Promise<ObservedArray<MusicResponsiveListItem>> {\n    const require_fetch = refresh || !this.#last_fetched_suggestions;\n    const fetch_promise = require_fetch ? this.#fetchSuggestions() : Promise.resolve(null);\n    const fetch_result = await fetch_promise;\n\n    if (fetch_result) {\n      this.#last_fetched_suggestions = fetch_result.items;\n      this.#suggestions_continuation = fetch_result.continuation;\n    }\n\n    return fetch_result?.items || this.#last_fetched_suggestions || observe([]);\n  }\n\n  async #fetchSuggestions(): Promise<{ items: ObservedArray<MusicResponsiveListItem>, continuation: string | null }> {\n    const target_section_list = this.#page.contents_memo?.getType(SectionList).find((section_list) => section_list.continuation);\n    const continuation = this.#suggestions_continuation || target_section_list?.continuation;\n\n    if (continuation) {\n      const page = await this.#actions.execute('/browse', {\n        client: 'YTMUSIC',\n        continuation: continuation,\n        parse: true\n      });\n\n      const section_list = page.continuation_contents?.as(SectionListContinuation);\n      const sections = section_list?.contents?.as(MusicCarouselShelf, MusicShelf);\n\n      const suggestions = sections?.find((section) => section.is(MusicShelf))?.as(MusicShelf);\n\n      return {\n        items: suggestions?.contents || observe([]),\n        continuation: suggestions?.continuation || null\n      };\n    }\n\n    return {\n      items: observe([]),\n      continuation: null\n    };\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n\n  get items(): ObservedArray<MusicResponsiveListItem | ContinuationItem> {\n    return this.contents || observe([]);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n}", "import { Parser } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport Playlist from './Playlist.js';\nimport HighlightsCarousel from '../classes/HighlightsCarousel.js';\nimport MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport MusicElementHeader from '../classes/MusicElementHeader.js';\nimport MusicHeader from '../classes/MusicHeader.js';\nimport SingleColumnBrowseResults from '../classes/SingleColumnBrowseResults.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport Message from '../classes/Message.js';\nimport SectionList from '../classes/SectionList.js';\nimport Tab from '../classes/Tab.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Recap {\n  readonly #page: IBrowseResponse;\n  readonly #actions: Actions;\n\n  public header?: HighlightsCarousel | MusicHeader;\n  public sections?: ObservedArray<ItemSection | MusicCarouselShelf | Message>;\n\n  constructor(response: ApiResponse, actions: Actions) {\n    this.#page = Parser.parseResponse<IBrowseResponse>(response.data);\n    this.#actions = actions;\n\n    const header = this.#page.header?.item();\n\n    this.header = header?.is(MusicElementHeader) ?\n      this.#page.header?.item().as(MusicElementHeader).element?.model?.as(HighlightsCarousel) :\n      this.#page.header?.item().as(MusicHeader);\n\n    const tab = this.#page.contents?.item().as(SingleColumnBrowseResults).tabs.firstOfType(Tab);\n\n    if (!tab)\n      throw new InnertubeError('Target tab not found');\n\n    this.sections = tab.content?.as(SectionList).contents.as(ItemSection, MusicCarouselShelf, Message);\n  }\n\n  /**\n   * Retrieves recap playlist.\n   */\n  async getPlaylist(): Promise<Playlist> {\n    if (!this.header)\n      throw new InnertubeError('Header not found');\n\n    if (!this.header.is(HighlightsCarousel))\n      throw new InnertubeError('Recap playlist not available, check back later.');\n\n    const endpoint = this.header.panels[0].text_on_tap_endpoint;\n    const response = await endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Playlist(response, this.#actions);\n  }\n\n  get page(): IBrowseResponse {\n    return this.#page;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\nimport { Parser, MusicShelfContinuation } from '../index.js';\n\nimport ChipCloud from '../classes/ChipCloud.js';\nimport ChipCloudChip from '../classes/ChipCloudChip.js';\nimport DidYouMean from '../classes/DidYouMean.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport Message from '../classes/Message.js';\nimport MusicCardShelf from '../classes/MusicCardShelf.js';\nimport MusicHeader from '../classes/MusicHeader.js';\nimport MusicShelf from '../classes/MusicShelf.js';\nimport SectionList from '../classes/SectionList.js';\nimport ShowingResultsFor from '../classes/ShowingResultsFor.js';\nimport TabbedSearchResults from '../classes/TabbedSearchResults.js';\n\nimport type { ObservedArray } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Search {\n  readonly #page: ISearchResponse;\n  readonly #actions: Actions;\n  readonly #continuation?: string;\n\n  public header?: ChipCloud;\n  public contents?: ObservedArray<MusicShelf | MusicCardShelf | ItemSection>;\n\n  constructor(response: ApiResponse, actions: Actions, is_filtered?: boolean) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<ISearchResponse>(response.data);\n\n    if (!this.#page.contents || !this.#page.contents_memo)\n      throw new InnertubeError('Response did not contain any contents.');\n\n    const tab = this.#page.contents.item().as(TabbedSearchResults).tabs.get({ selected: true });\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const tab_content = tab.content?.as(SectionList);\n\n    if (!tab_content)\n      throw new InnertubeError('Target tab did not have any content.');\n\n    this.header = tab_content.header?.as(ChipCloud);\n    this.contents = tab_content.contents.as(MusicShelf, MusicCardShelf, ItemSection);\n\n    if (is_filtered) {\n      this.#continuation = this.contents.firstOfType(MusicShelf)?.continuation;\n    }\n  }\n\n  /**\n   * Loads more items for the given shelf.\n   */\n  async getMore(shelf: MusicShelf | undefined): Promise<Search> {\n    if (!shelf || !shelf.endpoint)\n      throw new InnertubeError('Cannot retrieve more items for this shelf because it does not have an endpoint.');\n\n    const response = await shelf.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    if (!response)\n      throw new InnertubeError('Endpoint did not return any data');\n\n    return new Search(response, this.#actions, true);\n  }\n\n  /**\n   * Retrieves search continuation. Only available for filtered searches and shelf continuations.\n   */\n  async getContinuation(): Promise<SearchContinuation> {\n    if (!this.#continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/search', {\n      continuation: this.#continuation,\n      client: 'YTMUSIC'\n    });\n\n    return new SearchContinuation(this.#actions, response);\n  }\n\n  /**\n   * Applies given filter to the search.\n   */\n  async applyFilter(target_filter: string | ChipCloudChip): Promise<Search> {\n    let cloud_chip: ChipCloudChip | undefined;\n\n    if (typeof target_filter === 'string') {\n      cloud_chip = this.header?.chips?.as(ChipCloudChip).get({ text: target_filter });\n      if (!cloud_chip)\n        throw new InnertubeError('Could not find filter with given name.', { available_filters: this.filters });\n    } else if (target_filter?.is(ChipCloudChip)) {\n      cloud_chip = target_filter;\n    }\n\n    if (!cloud_chip)\n      throw new InnertubeError('Invalid filter', { available_filters: this.filters });\n\n    if (cloud_chip?.is_selected) return this;\n\n    if (!cloud_chip.endpoint)\n      throw new InnertubeError('Selected filter does not have an endpoint.');\n\n    const response = await cloud_chip.endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Search(response, this.#actions, true);\n  }\n\n  get filters(): string[] {\n    return this.header?.chips?.as(ChipCloudChip).map((chip) => chip.text) || [];\n  }\n\n  get has_continuation(): boolean {\n    return !!this.#continuation;\n  }\n\n  get did_you_mean(): DidYouMean | undefined {\n    return this.#page.contents_memo?.getType(DidYouMean)[0];\n  }\n\n  get showing_results_for(): ShowingResultsFor | undefined {\n    return this.#page.contents_memo?.getType(ShowingResultsFor)[0];\n  }\n\n  get message(): Message | undefined {\n    return this.#page.contents_memo?.getType(Message)[0];\n  }\n\n  get songs(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Songs');\n  }\n\n  get videos(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Videos');\n  }\n\n  get albums(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Albums');\n  }\n\n  get artists(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Artists');\n  }\n\n  get playlists(): MusicShelf | undefined {\n    return this.contents?.filterType(MusicShelf).find((section) => section.title.toString() === 'Community playlists');\n  }\n\n  get page(): ISearchResponse {\n    return this.#page;\n  }\n}\n\nexport class SearchContinuation {\n  readonly #actions: Actions;\n  readonly #page: ISearchResponse;\n  public header?: MusicHeader;\n  public contents?: MusicShelfContinuation;\n\n  constructor(actions: Actions, response: ApiResponse) {\n    this.#actions = actions;\n    this.#page = Parser.parseResponse<ISearchResponse>(response.data);\n    this.header = this.#page.header?.item().as(MusicHeader);\n    this.contents = this.#page.continuation_contents?.as(MusicShelfContinuation);\n  }\n\n  async getContinuation(): Promise<SearchContinuation> {\n    if (!this.contents?.continuation)\n      throw new InnertubeError('Continuation not found.');\n\n    const response = await this.#actions.execute('/search', {\n      continuation: this.contents.continuation,\n      client: 'YTMUSIC'\n    });\n\n    return new SearchContinuation(this.#actions, response);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.contents?.continuation;\n  }\n\n  get page(): ISearchResponse {\n    return this.#page;\n  }\n}", "import { Constants } from '../../utils/index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { MediaInfo } from '../../core/mixins/index.js';\n\nimport Tab from '../classes/Tab.js';\nimport AutomixPreviewVideo from '../classes/AutomixPreviewVideo.js';\nimport Message from '../classes/Message.js';\nimport MusicDescriptionShelf from '../classes/MusicDescriptionShelf.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport PlaylistPanel from '../classes/PlaylistPanel.js';\nimport SectionList from '../classes/SectionList.js';\nimport WatchNextTabbedResults from '../classes/WatchNextTabbedResults.js';\n\nimport type RichGrid from '../classes/RichGrid.js';\nimport type MusicQueue from '../classes/MusicQueue.js';\nimport type MusicCarouselShelf from '../classes/MusicCarouselShelf.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { Actions, ApiResponse } from '../../core/index.js';\nimport { PlaylistPanelContinuation } from '../continuations.js';\n\nclass TrackInfo extends MediaInfo {\n  public tabs?: ObservedArray<Tab>;\n  public current_video_endpoint?: NavigationEndpoint;\n  public player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const next = this.page[1];\n\n    if (next) {\n      const tabbed_results = next.contents_memo?.getType(WatchNextTabbedResults)?.[0];\n\n      this.tabs = tabbed_results?.tabs.as(Tab);\n      this.current_video_endpoint = next.current_video_endpoint;\n\n      // TODO: update PlayerOverlay, YTMusic's is a little bit different.\n      this.player_overlays = next.player_overlays?.item().as(PlayerOverlay);\n    }\n  }\n\n  /**\n   * Retrieves contents of the given tab.\n   */\n  async getTab(title_or_page_type: string): Promise<ObservedArray<YTNode> | SectionList | MusicQueue | RichGrid | Message> {\n    if (!this.tabs)\n      throw new InnertubeError('Could not find any tab');\n\n    const target_tab =\n      this.tabs.get({ title: title_or_page_type }) ||\n      this.tabs.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === title_or_page_type) ||\n      this.tabs?.[0];\n\n    if (!target_tab)\n      throw new InnertubeError(`Tab \"${title_or_page_type}\" not found`, { available_tabs: this.available_tabs });\n\n    if (target_tab.content)\n      return target_tab.content;\n\n    const page = await target_tab.endpoint.call(this.actions, { client: 'YTMUSIC', parse: true });\n\n    if (page.contents?.item().type === 'Message')\n      return page.contents.item().as(Message);\n\n    if (!page.contents)\n      throw new InnertubeError('Page contents was empty', page);\n\n    return page.contents.item().as(SectionList).contents;\n  }\n\n  /**\n   * Retrieves up next.\n   */\n  async getUpNext(automix = true): Promise<PlaylistPanel> {\n    const music_queue = await this.getTab('Up next') as MusicQueue;\n\n    if (!music_queue || !music_queue.content)\n      throw new InnertubeError('Music queue was empty, the video id is probably invalid.', music_queue);\n\n    const playlist_panel = music_queue.content.as(PlaylistPanel);\n\n    if (!playlist_panel.playlist_id && automix) {\n      const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);\n\n      if (!automix_preview_video)\n        throw new InnertubeError('Automix item not found');\n\n      const page = await automix_preview_video.playlist_video?.endpoint.call(this.actions, {\n        videoId: this.basic_info.id,\n        client: 'YTMUSIC',\n        parse: true\n      });\n\n      if (!page || !page.contents_memo)\n        throw new InnertubeError('Could not fetch automix');\n\n      return page.contents_memo.getType(PlaylistPanel)?.[0];\n    }\n\n    return playlist_panel;\n  }\n\n  /**\n   * Retrieves up next continuation relative to current TrackInfo.\n   */\n  async getUpNextContinuation(playlistPanel: PlaylistPanel | PlaylistPanelContinuation): Promise<PlaylistPanelContinuation> {\n    if (!this.current_video_endpoint)\n      throw new InnertubeError('Current Video Endpoint was not defined.', this.current_video_endpoint);\n    \n    if (playlistPanel instanceof PlaylistPanel && playlistPanel.playlist_id !== this.current_video_endpoint.payload.playlistId) {\n      throw new InnertubeError('PlaylistId from TrackInfo does not match with PlaylistPanel');\n    }\n    \n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation } });\n    const response = await watch_next_endpoint.call(this.actions, { ...this.current_video_endpoint.payload, continuation: playlistPanel.continuation, client: 'YTMUSIC', parse: true });\n\n    const playlistCont = response.continuation_contents?.as(PlaylistPanelContinuation);\n\n    if (!playlistCont)\n      throw new InnertubeError('No PlaylistPanel Continuation available.', response);\n    \n    return playlistCont;\n  }\n\n  /**\n   * Retrieves related content.\n   */\n  async getRelated(): Promise<ObservedArray<MusicCarouselShelf | MusicDescriptionShelf>> {\n    return await this.getTab('MUSIC_PAGE_TYPE_TRACK_RELATED') as ObservedArray<MusicDescriptionShelf>;\n  }\n\n  /**\n   * Retrieves lyrics.\n   */\n  async getLyrics(): Promise<MusicDescriptionShelf | undefined> {\n    const tab = await this.getTab('MUSIC_PAGE_TYPE_TRACK_LYRICS') as ObservedArray<MusicCarouselShelf | MusicDescriptionShelf>;\n    return tab.firstOfType(MusicDescriptionShelf);\n  }\n\n  /**\n   * Adds the song to the watch history.\n   */\n  async addToWatchHistory(): Promise<Response> {\n    return super.addToWatchHistory(Constants.CLIENTS.YTMUSIC.NAME, Constants.CLIENTS.YTMUSIC.VERSION, 'https://music.');\n  }\n  \n  /**\n   * Updates the watch time of the song.\n   */\n  async updateWatchTime(startTime: number): Promise<Response> {\n    return super.updateWatchTime(startTime, Constants.CLIENTS.YTMUSIC.NAME, Constants.CLIENTS.YTMUSIC.VERSION, 'https://music.');\n  }\n\n  get available_tabs(): string[] {\n    return this.tabs ? this.tabs.map((tab) => tab.title) : [];\n  }\n}\n\nexport default TrackInfo;", "export { default as Channel } from './Channel.js';\nexport { default as HomeFeed } from './HomeFeed.js';\nexport { default as Search } from './Search.js';\nexport { default as VideoInfo } from './VideoInfo.js';\n", "import Feed from '../../core/mixins/Feed.js';\nimport C4TabbedHeader from '../classes/C4TabbedHeader.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport { ItemSectionContinuation } from '../index.js';\nimport NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nimport type { IBrowseResponse } from '../types/index.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class Channel extends Feed<IBrowseResponse> {\n  public header?: C4TabbedHeader;\n  public contents?: ItemSection | ItemSectionContinuation;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.page.header?.item().as(C4TabbedHeader);\n    this.contents = this.memo.getType(ItemSection)[0] || this.page.continuation_contents?.as(ItemSectionContinuation);\n  }\n\n  /**\n   * Retrieves next batch of content.\n   */\n  async getContinuation(): Promise<Channel> {\n    if (!this.contents)\n      throw new Error('No continuation available.');\n    \n    const continuation_request = new NavigationEndpoint({\n      continuationCommand: {\n        token: this.contents.continuation,\n        request: 'CONTINUATION_REQUEST_TYPE_BROWSE'\n      }\n    });\n    \n    const continuation_response = await continuation_request.call(this.actions, { client: 'YTKIDS' });\n\n    return new Channel(this.actions, continuation_response);\n  }\n\n  get has_continuation(): boolean {\n    return !!this.contents?.continuation;\n  }\n}", "import { InnertubeError } from '../../utils/Utils.js';\n\nimport Feed from '../../core/mixins/Feed.js';\nimport KidsCategoriesHeader from '../classes/ytkids/KidsCategoriesHeader.js';\nimport KidsCategoryTab from '../classes/ytkids/KidsCategoryTab.js';\nimport KidsHomeScreen from '../classes/ytkids/KidsHomeScreen.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { IBrowseResponse } from '../types/index.js';\n\nexport default class HomeFeed extends Feed<IBrowseResponse> {\n  public header?: KidsCategoriesHeader;\n  public contents?: KidsHomeScreen;\n\n  constructor(actions: Actions, data: ApiResponse | IBrowseResponse, already_parsed = false) {\n    super(actions, data, already_parsed);\n    this.header = this.page.header?.item().as(KidsCategoriesHeader);\n    this.contents = this.page.contents?.item().as(KidsHomeScreen);\n  }\n\n  /**\n   * Retrieves the contents of the given category tab. Use {@link HomeFeed.categories} to get a list of available categories.\n   * @param tab - The tab to select\n   */\n  async selectCategoryTab(tab: string | KidsCategoryTab): Promise<HomeFeed> {\n    let target_tab: KidsCategoryTab | undefined;\n\n    if (typeof tab === 'string') {\n      target_tab = this.header?.category_tabs.find((t) => t.title.toString() === tab);\n    } else if (tab?.is(KidsCategoryTab)) {\n      target_tab = tab;\n    }\n\n    if (!target_tab)\n      throw new InnertubeError(`Tab \"${tab}\" not found`);\n\n    const page = await target_tab.endpoint.call<IBrowseResponse>(this.actions, { client: 'YTKIDS', parse: true });\n\n    // Copy over the header and header memo\n    page.header = this.page.header;\n    page.header_memo = this.page.header_memo;\n\n    return new HomeFeed(this.actions, page, true);\n  }\n\n  get categories(): string[] {\n    return this.header?.category_tabs.map((tab) => tab.title.toString()) || [];\n  }\n}", "import Feed from '../../core/mixins/Feed.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport { InnertubeError } from '../../utils/Utils.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type { ISearchResponse } from '../types/index.js';\n\nexport default class Search extends Feed<ISearchResponse> {\n  public estimated_results?: number;\n  public contents: ObservedArray<YTNode> | null;\n\n  constructor(actions: Actions, data: ApiResponse | ISearchResponse) {\n    super(actions, data);\n    this.estimated_results = this.page.estimated_results;\n\n    const item_section = this.memo.getType(ItemSection)[0];\n\n    if (!item_section)\n      throw new InnertubeError('No item section found in search response.');\n\n    this.contents = item_section.contents;\n  }\n}", "import { MediaInfo } from '../../core/mixins/index.js';\nimport ItemSection from '../classes/ItemSection.js';\nimport PlayerOverlay from '../classes/PlayerOverlay.js';\nimport SlimVideoMetadata from '../classes/SlimVideoMetadata.js';\nimport TwoColumnWatchNextResults from '../classes/TwoColumnWatchNextResults.js';\n\nimport type { ApiResponse, Actions } from '../../core/index.js';\nimport type { ObservedArray, YTNode } from '../helpers.js';\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\n\nexport default class VideoInfo extends MediaInfo {\n  public slim_video_metadata?: SlimVideoMetadata;\n  public watch_next_feed?: ObservedArray<YTNode>;\n  public current_video_endpoint?: NavigationEndpoint;\n  public player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string) {\n    super(data, actions, cpn);\n\n    const next = this.page[1];\n\n    const two_col = next?.contents?.item().as(TwoColumnWatchNextResults);\n\n    const results = two_col?.results;\n    const secondary_results = two_col?.secondary_results;\n\n    if (results && secondary_results) {\n      this.slim_video_metadata = results.firstOfType(ItemSection)?.contents?.firstOfType(SlimVideoMetadata);\n      this.watch_next_feed = secondary_results.firstOfType(ItemSection)?.contents || secondary_results;\n      this.current_video_endpoint = next?.current_video_endpoint;\n      this.player_overlays = next?.player_overlays?.item().as(PlayerOverlay);\n    }\n  }\n}", "export { default as ShortFormVideoInfo } from './ShortFormVideoInfo.js';", "import { Parser, ContinuationCommand } from '../index.js';\nimport { InnertubeError } from '../../utils/Utils.js';\nimport MediaInfo from '../../core/mixins/MediaInfo.js';\n\nimport type NavigationEndpoint from '../classes/NavigationEndpoint.js';\nimport type PlayerOverlay from '../classes/PlayerOverlay.js';\nimport type { ApiResponse, Actions } from '../../core/index.js';\n\nexport default class ShortFormVideoInfo extends MediaInfo {\n  #watch_next_continuation?: ContinuationCommand;\n  watch_next_feed?: NavigationEndpoint[];\n  current_video_endpoint?: NavigationEndpoint;\n  player_overlays?: PlayerOverlay;\n\n  constructor(data: [ApiResponse, ApiResponse?], actions: Actions, cpn: string, reel_watch_sequence_response: ApiResponse) {\n    super(data, actions, cpn);\n    if (reel_watch_sequence_response) {\n      const reel_watch_sequence = Parser.parseResponse(reel_watch_sequence_response.data);\n      if (reel_watch_sequence.entries)\n        this.watch_next_feed = reel_watch_sequence.entries;\n\n      if (reel_watch_sequence.continuation_endpoint)\n        this.#watch_next_continuation = reel_watch_sequence.continuation_endpoint?.as(ContinuationCommand);\n    }\n  }\n\n  async getWatchNextContinuation(): Promise<ShortFormVideoInfo> {\n    if (!this.#watch_next_continuation)\n      throw new InnertubeError('Continuation not found');\n\n    const response = await this.actions.execute('/reel/reel_watch_sequence', {\n      sequenceParams: this.#watch_next_continuation.token,\n      parse: true\n    });\n\n    if (response.entries)\n      this.watch_next_feed = response.entries;\n\n    this.#watch_next_continuation = response.continuation_endpoint?.as(ContinuationCommand);\n\n    return this;\n  }\n\n  /**\n   * Checks if continuation is available for the watch next feed.\n   */\n  get wn_has_continuation(): boolean {\n    return !!this.#watch_next_continuation;\n  }\n}", "export * from './RawResponse.js';\nexport * from './ParsedResponse.js';\nexport * from './CommandEndpoints.js';", "import * as Constants from '../../../utils/Constants.js';\nimport type { YTNode } from '../../helpers.js';\nimport { observe, type ObservedArray } from '../../helpers.js';\nimport { Parser, type RawNode } from '../../index.js';\nimport type NavigationEndpoint from '../NavigationEndpoint.js';\nimport Text from './Text.js';\nimport type TextRun from './TextRun.js';\nimport Thumbnail from './Thumbnail.js';\n\nexport default class Author {\n  id: string;\n  name: string;\n  thumbnails: Thumbnail[];\n  endpoint?: NavigationEndpoint;\n  badges: ObservedArray<YTNode>;\n  is_moderator?: boolean;\n  is_verified?: boolean;\n  is_verified_artist?: boolean;\n  url: string;\n\n  constructor(item: RawNode, badges?: any, thumbs?: any, id?: string) {\n    const nav_text = new Text(item);\n\n    this.id = id || (nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.browseId || nav_text?.endpoint?.payload?.browseId || 'N/A';\n    this.name = nav_text?.text || 'N/A';\n    this.thumbnails = thumbs ? Thumbnail.fromResponse(thumbs) : [];\n    this.endpoint = ((nav_text?.runs?.[0] as TextRun) as TextRun)?.endpoint || nav_text?.endpoint;\n\n    if (badges) {\n      if (Array.isArray(badges)) {\n        this.badges = Parser.parseArray(badges);\n        this.is_moderator = this.badges?.some((badge: any) => badge.icon_type == 'MODERATOR');\n        this.is_verified = this.badges?.some((badge: any) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED');\n        this.is_verified_artist = this.badges?.some((badge: any) => badge.style == 'BADGE_STYLE_TYPE_VERIFIED_ARTIST');\n      } else {\n        this.badges = observe([] as YTNode[]);\n        this.is_verified = !!badges.isVerified;\n        this.is_verified_artist = !!badges.isArtist;\n      }\n    } else {\n      this.badges = observe([] as YTNode[]);\n    }\n\n    // @TODO: Refactor this mess.\n    this.url =\n      (nav_text?.runs?.[0] as TextRun)?.endpoint?.metadata?.api_url === '/browse' &&\n        `${Constants.URLS.YT_BASE}${(nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.canonicalBaseUrl || `/u/${(nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.browseId}`}` ||\n        `${Constants.URLS.YT_BASE}${nav_text?.endpoint?.payload?.canonicalBaseUrl || `/u/${nav_text?.endpoint?.payload?.browseId}`}`;\n  }\n\n  get best_thumbnail(): Thumbnail | undefined {\n    return this.thumbnails[0];\n  }\n}", "/* eslint-disable */\n/* Generated file do not edit */\nexport default {\n  \"desktop\": [\n    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.3 Safari/605.1.15\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Safari/605.1.15\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\",\n    \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36\"\n  ],\n  \"mobile\": [\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 12; SM-G990U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (Linux; Android 13; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/108.1  Mobile/15E148 Safari/605.1.15\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 ChannelId(73) NebulaSDK/1.8.100112 Nebula PSDType(1) AlipayDefined(nt:4G,ws:320|504|2.0) AliApp(AP/10.1.30.300) AlipayClient/10.1.30.300 Alipay Language/zh-Hans\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 13; SM-N981U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (Linux; Android 13; SM-A515F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 12; M2010J19SG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 15_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/109.0.5414.83 Mobile/15E148 Safari/604.1\",\n    \"Mozilla/5.0 (Linux; Android 11; M2102J20SG) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 16_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.2 Mobile/15E148 Safari/604.1\"\n  ]\n} as { desktop: string[], mobile: string[] };", "// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677\nexport default class CustomEvent extends Event {\n  #detail;\n\n  constructor(type: string, options?: CustomEventInit<any[]>) {\n    super(type, options);\n    this.#detail = options?.detail ?? null;\n  }\n\n  get detail() {\n    return this.#detail;\n  }\n}", "import type {\n  IBrowseResponse,\n  IGetChallengeResponse,\n  IGetNotificationsMenuResponse,\n  INextResponse,\n  IParsedResponse,\n  IPlayerResponse,\n  IRawResponse,\n  IResolveURLResponse,\n  ISearchResponse,\n  IUpdatedMetadataResponse\n} from '../parser/index.js';\nimport { NavigateAction, Parser } from '../parser/index.js';\nimport { InnertubeError } from '../utils/Utils.js';\n\nimport type { Session } from './index.js';\n\nexport interface ApiResponse {\n  success: boolean;\n  status_code: number;\n  data: IRawResponse;\n}\n\nexport type InnertubeEndpoint =\n  '/player'\n  | '/search'\n  | '/browse'\n  | '/next'\n  | '/reel'\n  | '/updated_metadata'\n  | '/notification/get_notification_menu'\n  | '/att/get'\n  | string;\n\nexport type ParsedResponse<T> =\n  T extends '/player' ? IPlayerResponse :\n    T extends '/search' ? ISearchResponse :\n      T extends '/browse' ? IBrowseResponse :\n        T extends '/next' ? INextResponse :\n          T extends '/updated_metadata' ? IUpdatedMetadataResponse :\n            T extends '/navigation/resolve_url' ? IResolveURLResponse :\n              T extends '/notification/get_notification_menu' ? IGetNotificationsMenuResponse :\n                T extends '/att/get' ? IGetChallengeResponse :\n                  IParsedResponse;\n\nexport default class Actions {\n  public session: Session;\n\n  constructor(session: Session) {\n    this.session = session;\n  }\n\n  /**\n   * Makes calls to the playback tracking API.\n   * @param url - The URL to call.\n   * @param client - The client to use.\n   * @param params - Call parameters.\n   */\n  async stats(url: string, client: { client_name: string; client_version: string }, params: {\n    [key: string]: any\n  }): Promise<Response> {\n    const s_url = new URL(url);\n\n    s_url.searchParams.set('ver', '2');\n    s_url.searchParams.set('c', client.client_name.toLowerCase());\n    s_url.searchParams.set('cbrver', client.client_version);\n    s_url.searchParams.set('cver', client.client_version);\n\n    for (const key of Object.keys(params)) {\n      s_url.searchParams.set(key, params[key]);\n    }\n\n    return await this.session.http.fetch(s_url);\n  }\n\n  /**\n   * Executes an API call.\n   * @param endpoint - The endpoint to call.\n   * @param args - Call arguments\n   */\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args: {\n    [key: string]: any;\n    parse: true;\n    protobuf?: false;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ParsedResponse<T>>;\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args?: {\n    [key: string]: any;\n    parse?: false;\n    protobuf?: true;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ApiResponse>;\n  async execute<T extends InnertubeEndpoint>(endpoint: T, args?: {\n    [key: string]: any;\n    parse?: boolean;\n    protobuf?: boolean;\n    serialized_data?: any;\n    skip_auth_check?: boolean\n  }): Promise<ParsedResponse<T> | ApiResponse> {\n    let data;\n\n    if (args && !args.protobuf) {\n      data = { ...args };\n\n      if (Reflect.has(data, 'browseId') && !args.skip_auth_check) {\n        if (this.#needsLogin(data.browseId) && !this.session.logged_in)\n          throw new InnertubeError('You must be signed in to perform this operation.');\n      }\n\n      if (Reflect.has(data, 'skip_auth_check'))\n        delete data.skip_auth_check;\n\n      if (Reflect.has(data, 'override_endpoint'))\n        delete data.override_endpoint;\n\n      if (Reflect.has(data, 'parse'))\n        delete data.parse;\n\n      if (Reflect.has(data, 'request'))\n        delete data.request;\n\n      if (Reflect.has(data, 'clientActions'))\n        delete data.clientActions;\n\n      if (Reflect.has(data, 'settingItemIdForClient'))\n        delete data.settingItemIdForClient;\n\n      if (Reflect.has(data, 'action')) {\n        data.actions = [ data.action ];\n        delete data.action;\n      }\n\n      if (Reflect.has(data, 'boolValue')) {\n        data.newValue = { boolValue: data.boolValue };\n        delete data.boolValue;\n      }\n\n      if (Reflect.has(data, 'token')) {\n        data.continuation = data.token;\n        delete data.token;\n      }\n\n      if (data?.client === 'YTMUSIC') {\n        data.isAudioOnly = true;\n      }\n    } else if (args) {\n      data = args.serialized_data;\n    }\n\n    const target_endpoint = Reflect.has(args || {}, 'override_endpoint') ? args?.override_endpoint : endpoint;\n\n    const response = await this.session.http.fetch(target_endpoint, {\n      method: 'POST',\n      body: args?.protobuf ? data : JSON.stringify((data || {})),\n      headers: {\n        'Content-Type': args?.protobuf ?\n          'application/x-protobuf' :\n          'application/json'\n      }\n    });\n\n    if (args?.parse) {\n      let parsed_response = Parser.parseResponse<ParsedResponse<T>>(await response.json());\n\n      // Handle redirects\n      if (this.#isBrowse(parsed_response) && parsed_response.on_response_received_actions?.[0]?.type === 'navigateAction') {\n        const navigate_action = parsed_response.on_response_received_actions.firstOfType(NavigateAction);\n        if (navigate_action) {\n          parsed_response = await navigate_action.endpoint.call(this, { parse: true });\n        }\n      }\n\n      return parsed_response;\n    }\n\n    // Mimics the Axios API using Fetch's Response object.\n    return {\n      success: response.ok,\n      status_code: response.status,\n      data: await response.json()\n    };\n  }\n\n  #isBrowse(response: IParsedResponse): response is IBrowseResponse {\n    return 'on_response_received_actions' in response;\n  }\n\n  #needsLogin(id: string) {\n    return [\n      'FElibrary',\n      'FEhistory',\n      'FEsubscriptions',\n      'FEchannels',\n      'FEplaylist_aggregation',\n      'FEmusic_listening_review',\n      'FEmusic_library_landing',\n      'SPaccount_overview',\n      'SPaccount_notifications',\n      'SPaccount_privacy',\n      'SPtime_watched'\n    ].includes(id);\n  }\n}", "import { OAuth2Error, Platform } from '../utils/Utils.js';\nimport { Log, Constants } from '../utils/index.js';\nimport type Session from './Session.js';\n\nconst TAG = 'OAuth2';\n\nexport type OAuth2ClientID = {\n  client_id: string;\n  client_secret: string;\n};\n\nexport type OAuth2Tokens = {\n  access_token: string;\n  expiry_date: string;\n  expires_in?: number;\n  refresh_token: string;\n  scope?: string;\n  token_type?: string;\n  client?: OAuth2ClientID;\n};\n\nexport type DeviceAndUserCode = {\n  device_code: string;\n  expires_in: number;\n  interval: number;\n  user_code: string;\n  verification_url: string;\n  error_code?: string;\n};\n\nexport type OAuth2AuthEventHandler = (data: { credentials: OAuth2Tokens; }) => void;\nexport type OAuth2AuthPendingEventHandler = (data: DeviceAndUserCode) => void;\nexport type OAuth2AuthErrorEventHandler = (err: OAuth2Error) => void;\n\nexport default class OAuth2 {\n  #session: Session;\n\n  public YTTV_URL: URL;\n  public AUTH_SERVER_CODE_URL: URL;\n  public AUTH_SERVER_TOKEN_URL: URL;\n  public AUTH_SERVER_REVOKE_TOKEN_URL: URL;\n\n  public client_id: OAuth2ClientID | undefined;\n  public oauth2_tokens: OAuth2Tokens | undefined;\n\n  constructor(session: Session) {\n    this.#session = session;\n    this.YTTV_URL = new URL('/tv', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_CODE_URL = new URL('/o/oauth2/device/code', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_TOKEN_URL = new URL('/o/oauth2/token', Constants.URLS.YT_BASE);\n    this.AUTH_SERVER_REVOKE_TOKEN_URL = new URL('/o/oauth2/revoke', Constants.URLS.YT_BASE);\n  }\n\n  async init(tokens?: OAuth2Tokens): Promise<void> {\n    if (tokens) {\n      this.setTokens(tokens);\n\n      if (this.shouldRefreshToken()) {\n        await this.refreshAccessToken();\n      }\n\n      this.#session.emit('auth', { credentials: this.oauth2_tokens });\n\n      return;\n    }\n\n    const loaded_from_cache = await this.#loadFromCache();\n\n    if (loaded_from_cache) {\n      Log.info(TAG, 'Loaded OAuth2 tokens from cache.', this.oauth2_tokens);\n      return;\n    }\n\n    if (!this.client_id)\n      this.client_id = await this.getClientID();\n\n    // Initialize OAuth2 flow\n    const device_and_user_code = await this.getDeviceAndUserCode();\n\n    this.#session.emit('auth-pending', device_and_user_code);\n\n    this.pollForAccessToken(device_and_user_code);\n  }\n\n  setTokens(tokens: OAuth2Tokens): void {\n    const tokensMod = tokens;\n\n    // Convert access token remaining lifetime to ISO string\n    if (tokensMod.expires_in) {\n      tokensMod.expiry_date = new Date(Date.now() + tokensMod.expires_in * 1000).toISOString();\n      delete tokensMod.expires_in; // We don't need this anymore\n    }\n\n    if (!this.validateTokens(tokensMod))\n      throw new OAuth2Error('Invalid tokens provided.');\n\n    this.oauth2_tokens = tokensMod;\n\n    if (tokensMod.client) {\n      Log.info(TAG, 'Using provided client id and secret.');\n      this.client_id = tokensMod.client;\n    }\n  }\n\n  async cacheCredentials(): Promise<void> {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(JSON.stringify(this.oauth2_tokens));\n    await this.#session.cache?.set('youtubei_oauth_credentials', data.buffer);\n  }\n\n  async #loadFromCache(): Promise<boolean> {\n    const data = await this.#session.cache?.get('youtubei_oauth_credentials');\n    if (!data)\n      return false;\n\n    const decoder = new TextDecoder();\n    const credentials = JSON.parse(decoder.decode(data));\n\n    this.setTokens(credentials);\n\n    this.#session.emit('auth', { credentials });\n\n    return true;\n  }\n\n  async removeCache(): Promise<void> {\n    await this.#session.cache?.remove('youtubei_oauth_credentials');\n  }\n\n  pollForAccessToken(device_and_user_code: DeviceAndUserCode): void {\n    if (!this.client_id)\n      throw new OAuth2Error('Client ID is missing.');\n\n    const { device_code, interval } = device_and_user_code;\n    const { client_id, client_secret } = this.client_id;\n\n    const payload = {\n      client_id,\n      client_secret,\n      code: device_code,\n      grant_type: 'http://oauth.net/grant_type/device/1.0'\n    };\n\n    const connInterval = setInterval(async () => {\n      const response = await this.#http.fetch_function(this.AUTH_SERVER_TOKEN_URL, {\n        body: JSON.stringify(payload),\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json'\n        }\n      });\n\n      const response_data = await response.json();\n\n      if (response_data.error) {\n        switch (response_data.error) {\n          case 'access_denied':\n            this.#session.emit('auth-error', new OAuth2Error('Access was denied.', response_data));\n            clearInterval(connInterval);\n            break;\n          case 'expired_token':\n            this.#session.emit('auth-error', new OAuth2Error('The device code has expired.', response_data));\n            clearInterval(connInterval);\n            break;\n          case 'authorization_pending':\n          case 'slow_down':\n            Log.info(TAG, 'Polling for access token...');\n            break;\n          default:\n            this.#session.emit('auth-error', new OAuth2Error('Server returned an unexpected error.', response_data));\n            clearInterval(connInterval);\n            break;\n        }\n        return;\n      }\n\n      this.setTokens(response_data);\n\n      this.#session.emit('auth', { credentials: this.oauth2_tokens });\n\n      clearInterval(connInterval);\n    }, interval * 1000);\n  }\n\n  async revokeCredentials(): Promise<Response | undefined> {\n    if (!this.oauth2_tokens)\n      throw new OAuth2Error('Access token not found');\n\n    await this.removeCache();\n\n    const url = this.AUTH_SERVER_REVOKE_TOKEN_URL;\n    url.searchParams.set('token', this.oauth2_tokens.access_token);\n\n    return this.#session.http.fetch_function(url, { method: 'POST' });\n  }\n\n  async refreshAccessToken(): Promise<void> {\n    if (!this.client_id)\n      this.client_id = await this.getClientID();\n\n    if (!this.oauth2_tokens)\n      throw new OAuth2Error('No tokens available to refresh.');\n\n    const { client_id, client_secret } = this.client_id;\n    const { refresh_token } = this.oauth2_tokens;\n\n    const payload = {\n      client_id,\n      client_secret,\n      refresh_token,\n      grant_type: 'refresh_token'\n    };\n\n    const response = await this.#http.fetch_function(this.AUTH_SERVER_TOKEN_URL, {\n      body: JSON.stringify(payload),\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (!response.ok)\n      throw new OAuth2Error(`Failed to refresh access token: ${response.status}`);\n\n    const response_data = await response.json();\n\n    if (response_data.error_code)\n      throw new OAuth2Error('Authorization server returned an error', response_data);\n\n    this.oauth2_tokens.access_token = response_data.access_token;\n    this.oauth2_tokens.expiry_date = new Date(Date.now() + response_data.expires_in * 1000).toISOString();\n\n    this.#session.emit('update-credentials', { credentials: this.oauth2_tokens });\n  }\n\n  async getDeviceAndUserCode(): Promise<DeviceAndUserCode> {\n    if (!this.client_id)\n      throw new OAuth2Error('Client ID is missing.');\n\n    const { client_id } = this.client_id;\n\n    const payload = {\n      client_id,\n      scope: 'http://gdata.youtube.com https://www.googleapis.com/auth/youtube-paid-content',\n      device_id: Platform.shim.uuidv4(),\n      device_model: 'ytlr::'\n    };\n\n    const response = await this.#http.fetch_function(this.AUTH_SERVER_CODE_URL, {\n      body: JSON.stringify(payload),\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n\n    if (!response.ok)\n      throw new OAuth2Error(`Failed to get device/user code: ${response.status}`);\n\n    const response_data = await response.json();\n\n    if (response_data.error_code)\n      throw new OAuth2Error('Authorization server returned an error', response_data);\n\n    return response_data;\n  }\n\n  async getClientID(): Promise<OAuth2ClientID> {\n    const yttv_response = await this.#http.fetch_function(this.YTTV_URL, {\n      headers: {\n        'User-Agent': 'Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version',\n        'Referer': 'https://www.youtube.com/tv',\n        'Accept-Language': 'en-US'\n      }\n    });\n\n    if (!yttv_response.ok)\n      throw new OAuth2Error(`Failed to get client ID: ${yttv_response.status}`);\n\n    const yttv_response_data = await yttv_response.text();\n\n    let script_url_body: RegExpExecArray | null;\n\n    if ((script_url_body = Constants.OAUTH.REGEX.TV_SCRIPT.exec(yttv_response_data)) !== null) {\n      Log.info(TAG, `Got YouTubeTV script URL (${script_url_body[1]})`);\n\n      const script_response = await this.#http.fetch(script_url_body[1], { baseURL: Constants.URLS.YT_BASE });\n\n      if (!script_response.ok)\n        throw new OAuth2Error(`TV script request failed with status code ${script_response.status}`);\n\n      const script_response_data = await script_response.text();\n\n      const client_identity = script_response_data\n        .match(Constants.OAUTH.REGEX.CLIENT_IDENTITY);\n\n      if (!client_identity || !client_identity.groups)\n        throw new OAuth2Error('Could not obtain client ID.');\n\n      const { client_id, client_secret } = client_identity.groups;\n\n      Log.info(TAG, `Client identity retrieved (clientId=${client_id}, clientSecret=${client_secret}).`);\n\n      return {\n        client_id,\n        client_secret\n      };\n    }\n\n    throw new OAuth2Error('Could not obtain script URL.');\n  }\n\n  shouldRefreshToken(): boolean {\n    if (!this.oauth2_tokens)\n      return false;\n    return Date.now() > new Date(this.oauth2_tokens.expiry_date).getTime();\n  }\n\n  validateTokens(tokens: OAuth2Tokens): boolean {\n    return !(!tokens.access_token || !tokens.refresh_token || !tokens.expiry_date);\n  }\n\n  get #http() {\n    return this.#session.http;\n  }\n}", "import { Jinter } from 'jintr';\nimport type { FetchFunction, ICache } from '../types/index.js';\nimport { Constants, BinarySerializer, Log } from '../utils/index.js';\nimport {\n  type ASTLookupResult,\n  findFunction,\n  findVariable,\n  getRandomUserAgent,\n  getStringBetweenStrings,\n  Platform,\n  PlayerError\n} from '../utils/Utils.js';\n\nconst TAG = 'Player';\n\ninterface SerializablePlayer {\n  player_id: string;\n  sts: number;\n  sig_sc?: string;\n  nsig_sc?: string;\n  library_version: number;\n}\n\n/**\n * Represents YouTube's player script. This is required to decipher signatures.\n */\nexport default class Player {\n  public player_id: string;\n  public sts: number;\n  public nsig_sc?: string;\n  public sig_sc?: string;\n  public po_token?: string;\n\n  constructor(player_id: string, signature_timestamp: number, sig_sc?: string, nsig_sc?: string) {\n    this.player_id = player_id;\n    this.sts = signature_timestamp;\n    this.nsig_sc = nsig_sc;\n    this.sig_sc = sig_sc;\n  }\n\n  static async create(cache: ICache | undefined, fetch: FetchFunction = Platform.shim.fetch, po_token?: string, player_id?: string): Promise<Player> {\n    if (!player_id) {\n      const url = new URL('/iframe_api', Constants.URLS.YT_BASE);\n      const res = await fetch(url);\n\n      if (!res.ok)\n        throw new PlayerError(`Failed to get player id: ${res.status} (${res.statusText})`);\n\n      const js = await res.text();\n\n      player_id = getStringBetweenStrings(js, 'player\\\\/', '\\\\/');\n    }\n\n    Log.info(TAG, `Using player id (${player_id}). Checking for cached players..`);\n\n    if (!player_id)\n      throw new PlayerError('Failed to get player id');\n\n    // We have the player id, now we can check if we have a cached player.\n    if (cache) {\n      const cached_player = await Player.fromCache(cache, player_id);\n      if (cached_player) {\n        Log.info(TAG, 'Found up-to-date player data in cache.');\n        cached_player.po_token = po_token;\n        return cached_player;\n      }\n    }\n\n    const player_url = new URL(`/s/player/${player_id}/player_ias.vflset/en_US/base.js`, Constants.URLS.YT_BASE);\n\n    Log.info(TAG, `Could not find any cached player. Will download a new player from ${player_url}.`);\n\n    const player_res = await fetch(player_url, {\n      headers: {\n        'user-agent': getRandomUserAgent('desktop')\n      }\n    });\n\n    if (!player_res.ok) {\n      throw new PlayerError(`Failed to get player data: ${player_res.status}`);\n    }\n\n    const player_js = await player_res.text();\n\n    const ast = Jinter.parseScript(player_js, { ecmaVersion: 'latest', ranges: true });\n\n    const sig_timestamp = this.extractSigTimestamp(player_js);\n    const global_variable = this.extractGlobalVariable(player_js, ast);\n    const sig_sc = this.extractSigSourceCode(player_js, global_variable);\n    const nsig_sc = this.extractNSigSourceCode(player_js, ast, global_variable);\n\n    Log.info(TAG, `Got signature timestamp (${sig_timestamp}) and algorithms needed to decipher signatures.`);\n\n    const player = await Player.fromSource(player_id, sig_timestamp, cache, sig_sc, nsig_sc);\n    player.po_token = po_token;\n\n    return player;\n  }\n\n  decipher(url?: string, signature_cipher?: string, cipher?: string, this_response_nsig_cache?: Map<string, string>): string {\n    url = url || signature_cipher || cipher;\n\n    if (!url)\n      throw new PlayerError('No valid URL to decipher');\n\n    const args = new URLSearchParams(url);\n    const url_components = new URL(args.get('url') || url);\n\n    if (this.sig_sc && (signature_cipher || cipher)) {\n      const signature = Platform.shim.eval(this.sig_sc, {\n        sig: args.get('s')\n      });\n\n      Log.info(TAG, `Transformed signature from ${args.get('s')} to ${signature}.`);\n\n      if (typeof signature !== 'string')\n        throw new PlayerError('Failed to decipher signature');\n\n      const sp = args.get('sp');\n\n      if (sp) {\n        url_components.searchParams.set(sp, signature);\n      } else {\n        url_components.searchParams.set('signature', signature);\n      }\n    }\n\n    const n = url_components.searchParams.get('n');\n\n    if (this.nsig_sc && n) {\n      let nsig;\n\n      if (this_response_nsig_cache && this_response_nsig_cache.has(n)) {\n        nsig = this_response_nsig_cache.get(n) as string;\n      } else {\n        nsig = Platform.shim.eval(this.nsig_sc, {\n          nsig: n\n        });\n\n        Log.info(TAG, `Transformed n signature from ${n} to ${nsig}.`);\n\n        if (typeof nsig !== 'string')\n          throw new PlayerError('Failed to decipher nsig');\n\n        if (nsig.startsWith('enhanced_except_')) {\n          Log.warn(TAG, 'Something went wrong while deciphering nsig.');\n        } else if (this_response_nsig_cache) {\n          this_response_nsig_cache.set(n, nsig);\n        }\n      }\n\n      url_components.searchParams.set('n', nsig);\n    }\n\n    // @NOTE: SABR requests should include the PoToken (not base64d, but as bytes!) in the payload.\n    if (url_components.searchParams.get('sabr') !== '1' && this.po_token)\n      url_components.searchParams.set('pot', this.po_token);\n\n    const client = url_components.searchParams.get('c');\n\n    switch (client) {\n      case 'WEB':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB.VERSION);\n        break;\n      case 'MWEB':\n        url_components.searchParams.set('cver', Constants.CLIENTS.MWEB.VERSION);\n        break;\n      case 'WEB_REMIX':\n        url_components.searchParams.set('cver', Constants.CLIENTS.YTMUSIC.VERSION);\n        break;\n      case 'WEB_KIDS':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB_KIDS.VERSION);\n        break;\n      case 'TVHTML5':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV.VERSION);\n        break;\n      case 'TVHTML5_SIMPLY':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV_SIMPLY.VERSION);\n        break;\n      case 'TVHTML5_SIMPLY_EMBEDDED_PLAYER':\n        url_components.searchParams.set('cver', Constants.CLIENTS.TV_EMBEDDED.VERSION);\n        break;\n      case 'WEB_EMBEDDED_PLAYER':\n        url_components.searchParams.set('cver', Constants.CLIENTS.WEB_EMBEDDED.VERSION);\n        break;\n    }\n\n    const result = url_components.toString();\n\n    Log.info(TAG, `Deciphered URL: ${result}`);\n\n    return url_components.toString();\n  }\n\n  static async fromCache(cache: ICache, player_id: string): Promise<Player | null> {\n    const buffer = await cache.get(player_id);\n\n    if (!buffer)\n      return null;\n\n    try {\n      const current_library_version = parseInt(Platform.shim.info.version.split('.')[0]);\n      const player_data = BinarySerializer.deserialize<SerializablePlayer>(new Uint8Array(buffer));\n\n      if (player_data.library_version !== current_library_version) {\n        Log.warn(TAG, `Cached player data is from a different library version (${player_data.library_version}). Ignoring it.`);\n        return null;\n      }\n\n      return new Player(player_data.player_id, player_data.sts, player_data.sig_sc, player_data.nsig_sc);\n    } catch (e) {\n      Log.error(TAG, 'Failed to deserialize player data from cache:', e);\n      return null;\n    }\n  }\n\n  static async fromSource(player_id: string, sig_timestamp: number, cache?: ICache, sig_sc?: string, nsig_sc?: string): Promise<Player> {\n    const player = new Player(player_id, sig_timestamp, sig_sc, nsig_sc);\n    await player.cache(cache);\n    return player;\n  }\n\n  async cache(cache?: ICache): Promise<void> {\n    if (!cache || !this.sig_sc || !this.nsig_sc)\n      return;\n\n    const current_library_version = parseInt(Platform.shim.info.version.split('.')[0]);\n\n    const buffer = BinarySerializer.serialize({\n      player_id: this.player_id,\n      sts: this.sts,\n      sig_sc: this.sig_sc,\n      nsig_sc: this.nsig_sc,\n      library_version: current_library_version\n    });\n\n    await cache.set(this.player_id, buffer);\n  }\n\n  static extractSigTimestamp(data: string): number {\n    return parseInt(getStringBetweenStrings(data, 'signatureTimestamp:', ',') || '0');\n  }\n\n  static extractGlobalVariable(data: string, ast: ReturnType<typeof Jinter.parseScript>): ASTLookupResult | undefined {\n    let variable = findVariable(data, { includes: '-_w8_', ast });\n\n    // For redundancy/the above fails:\n    if (!variable)\n      variable = findVariable(data, { includes: 'Untrusted URL{', ast });\n\n    if (!variable)\n      variable = findVariable(data, { includes: '1969', ast });\n\n    if (!variable)\n      variable = findVariable(data, { includes: '1970', ast });\n\n    if (!variable)\n      variable = findVariable(data, { includes: 'playerfallback', ast });\n\n    return variable;\n  }\n\n  static extractSigSourceCode(data: string, global_variable?: ASTLookupResult): string | undefined {\n    // Classic static split/join.\n    const split_join_regex = /function\\(([A-Za-z_0-9]+)\\)\\{([A-Za-z_0-9]+=[A-Za-z_0-9]+\\.split\\((?:[^)]+)\\)(.+?)\\.join\\((?:[^)]+)\\))\\}/;\n\n    // Using the global lookup variable.\n    const lookup_var = global_variable?.name?.replace(/[$^\\\\.*+?()[\\]{}|]/g, '\\\\$&');\n    const lookup_regex = lookup_var\n      ? new RegExp(\n        `function\\\\(([A-Za-z_0-9]+)\\\\)\\\\{([A-Za-z_0-9]+=[A-Za-z_0-9]+\\\\[${lookup_var}\\\\[\\\\d+\\\\]\\\\]\\\\([^)]*\\\\)([\\\\s\\\\S]+?)\\\\[${lookup_var}\\\\[\\\\d+\\\\]\\\\]\\\\([^)]*\\\\))\\\\}`\n      )\n      : null;\n\n    const match = data.match(split_join_regex) || (lookup_regex ? data.match(lookup_regex) : null);\n\n    if (!match) {\n      Log.warn(TAG, 'Failed to extract signature decipher algorithm.');\n      return;\n    }\n\n    const var_name = match[1];\n    const obj_name = match[3].split(/\\.|\\[/)[0]?.replace(';', '').trim();\n    const functions = getStringBetweenStrings(data, `var ${obj_name}={`, '};');\n\n    if (!functions || !var_name)\n      Log.warn(TAG, 'Failed to extract signature decipher algorithm.');\n\n    return `${global_variable?.result || ''} function descramble_sig(${var_name}) { let ${obj_name}={${functions}}; ${match[2]} } descramble_sig(sig);`;\n  }\n\n  static extractNSigSourceCode(data: string, ast?: ReturnType<typeof Jinter.parseScript>, global_variable?: ASTLookupResult): string | undefined {\n    let nsig_function;\n\n    if (global_variable) {\n      nsig_function = findFunction(data, { includes: `new Date(${global_variable.name}`, ast });\n\n      // For redundancy/the above fails:\n      if (!nsig_function)\n        nsig_function = findFunction(data, { includes: '.push(String.fromCharCode(', ast });\n\n      if (!nsig_function)\n        nsig_function = findFunction(data, { includes: '.reverse().forEach(function', ast });\n\n      if (nsig_function)\n        return `${global_variable.result} var ${nsig_function.result} ${nsig_function.name}(nsig);`;\n    }\n\n    // This is the suffix of the error tag.\n    nsig_function = findFunction(data, { includes: '-_w8_', ast });\n\n    // Usually, only this function uses these dates in the entire script.\n    if (!nsig_function)\n      nsig_function = findFunction(data, { includes: '1969', ast });\n\n    // This used to be the prefix of the error tag (leaving it here for reference).\n    if (!nsig_function)\n      nsig_function = findFunction(data, { includes: 'enhanced_except', ast });\n\n    if (nsig_function)\n      return `let ${nsig_function.result} ${nsig_function.name}(nsig);`;\n  }\n\n  get url(): string {\n    return new URL(`/s/player/${this.player_id}/player_ias.vflset/en_US/base.js`, Constants.URLS.YT_BASE).toString();\n  }\n\n  static get LIBRARY_VERSION(): number {\n    return 14;\n  }\n}", "import Actions from './Actions.js';\nimport OAuth2 from './OAuth2.js';\nimport Player from './Player.js';\nimport * as Constants from '../utils/Constants.js';\nimport { EventEmitter, HTTPClient, BinarySerializer, Log, ProtoUtils } from '../utils/index.js';\nimport {\n  generateRandomString, getRandomUserAgent,\n  InnertubeError, Platform, SessionError\n} from '../utils/Utils.js';\n\nimport type { DeviceCategory } from '../utils/Utils.js';\nimport type { FetchFunction, ICache } from '../types/index.js';\nimport type {\n  OAuth2Tokens,\n  OAuth2AuthErrorEventHandler,\n  OAuth2AuthPendingEventHandler,\n  OAuth2AuthEventHandler\n} from './OAuth2.js';\nimport type { IRawResponse } from '../parser/index.js';\n\nexport enum ClientType {\n  WEB = 'WEB',\n  MWEB = 'MWEB',\n  KIDS = 'WEB_KIDS',\n  MUSIC = 'WEB_REMIX',\n  IOS = 'iOS',\n  ANDROID = 'ANDROID',\n  ANDROID_MUSIC = 'ANDROID_MUSIC',\n  ANDROID_CREATOR = 'ANDROID_CREATOR',\n  TV = 'TVHTML5',\n  TV_SIMPLY = 'TVHTML5_SIMPLY',\n  TV_EMBEDDED = 'TVHTML5_SIMPLY_EMBEDDED_PLAYER',\n  WEB_EMBEDDED = 'WEB_EMBEDDED_PLAYER',\n  WEB_CREATOR = 'WEB_CREATOR'\n}\n\nexport type Context = {\n  client: {\n    hl: string;\n    gl: string;\n    remoteHost?: string;\n    screenDensityFloat?: number;\n    screenHeightPoints?: number;\n    screenPixelDensity?: number;\n    screenWidthPoints?: number;\n    visitorData?: string;\n    clientName: string;\n    clientVersion: string;\n    clientScreen?: string,\n    androidSdkVersion?: number;\n    osName: string;\n    osVersion: string;\n    platform: string;\n    clientFormFactor: string;\n    userInterfaceTheme?: string;\n    timeZone: string;\n    userAgent: string;\n    browserName?: string;\n    browserVersion?: string;\n    originalUrl?: string;\n    deviceMake: string;\n    deviceModel: string;\n    deviceExperimentId?: string;\n    rolloutToken?: string;\n    utcOffsetMinutes: number;\n    mainAppWebInfo?: {\n      graftUrl: string;\n      pwaInstallabilityStatus: string;\n      webDisplayMode: string;\n      isWebNativeShareAvailable: boolean;\n    };\n    memoryTotalKbytes?: string;\n    configInfo?: {\n      appInstallData?: string;\n      coldConfigData?: string;\n      coldHashData?: string;\n      hotHashData?: string;\n    },\n    kidsAppInfo?: {\n      categorySettings: {\n        enabledCategories: string[];\n      };\n      contentSettings: {\n        corpusPreference: string;\n        kidsNoSearchMode: string;\n      };\n    };\n  };\n  user: {\n    enableSafetyMode: boolean;\n    lockedSafetyMode: boolean;\n    onBehalfOfUser?: string;\n  };\n  thirdParty?: {\n    embedUrl: string;\n  };\n  request?: {\n    useSsl: boolean;\n    internalExperimentFlags: any[];\n  };\n}\n\ntype ContextData = {\n  hl: string;\n  gl: string;\n  remote_host?: string;\n  visitor_data: string;\n  client_name: string;\n  client_version: string;\n  user_agent: string;\n  os_name: string;\n  os_version: string;\n  device_category: string;\n  time_zone: string;\n  enable_safety_mode: boolean;\n  browser_name?: string;\n  browser_version?: string;\n  app_install_data?: string;\n  device_make: string;\n  device_model: string;\n  on_behalf_of_user?: string;\n  device_experiment_id?: string;\n  rollout_token?: string;\n}\n\nexport type SessionOptions = {\n  /**\n   * Language.\n   */\n  lang?: string;\n  /**\n   * Geolocation.\n   */\n  location?: string;\n  /**\n   * User agent (InnerTube requests only).\n   */\n  user_agent?: string;\n  /**\n   * The account index to use. This is useful if you have multiple accounts logged in.\n   *\n   * **NOTE:** Only works if you are signed in with cookies.\n   */\n  account_index?: number;\n  /**\n   * Specify the Page ID of the YouTube profile/channel to use, if the logged-in account has multiple profiles.\n   */\n  on_behalf_of_user?: string;\n  /**\n   * Specifies whether to retrieve the JS player. Disabling this will make session creation faster.\n   *\n   * **NOTE:** Deciphering formats is not possible without the JS player.\n   */\n  retrieve_player?: boolean;\n  /**\n   * Specifies whether to enable safety mode. This will prevent the session from loading any potentially unsafe content.\n   */\n  enable_safety_mode?: boolean;\n  /**\n   * Specifies whether to retrieve the InnerTube config. Useful for \"onesie\" requests.\n   */\n  retrieve_innertube_config?: boolean;\n  /**\n   * Specifies whether to generate the session data locally or retrieve it from YouTube.\n   * This can be useful if you need more performance.\n   *\n   * **NOTE:** If you are using the cache option and a session has already been generated, this will be ignored.\n   * If you want to force a new session to be generated, you must clear the cache or disable session caching.\n   */\n  generate_session_locally?: boolean;\n  /**\n   * Specifies whether the session data should be cached.\n   */\n  enable_session_cache?: boolean;\n  /**\n   * Platform to use for the session.\n   */\n  device_category?: DeviceCategory;\n  /**\n   * InnerTube client type.\n   */\n  client_type?: ClientType;\n  /**\n   * The time zone.\n   */\n  timezone?: string;\n  /**\n   * Used to cache algorithms, session data, and OAuth2 tokens.\n   */\n  cache?: ICache;\n  /**\n   * YouTube cookies.\n   */\n  cookie?: string;\n  /**\n   * Setting this to a valid and persistent visitor data string will allow YouTube to give this session tailored content even when not logged in.\n   * A good way to get a valid one is by either grabbing it from a browser or calling InnerTube's `/visitor_id` endpoint.\n   */\n  visitor_data?: string;\n  /**\n   * Fetch function to use.\n   */\n  fetch?: FetchFunction;\n  /**\n   * Session bound Proof of Origin Token. This is an attestation token generated by BotGuard/DroidGuard. It is used to confirm that the request is coming from a real client.\n   */\n  po_token?: string;\n  /**\n   * Player ID override.\n   * In most cases, this isn't necessary; but when YouTube introduces breaking changes,\n   * forcing an older Player ID can help work around temporary issues.\n   */\n  player_id?: string;\n}\n\nexport type SessionData = {\n  context: Context;\n  api_key: string;\n  api_version: string;\n  config_data?: string;\n}\n\ninterface SerializableSession extends SessionData {\n  library_version: number;\n}\n\nexport type SWSessionData = {\n  context_data: ContextData;\n  api_key: string;\n  api_version: string;\n}\n\nexport type SessionArgs = {\n  lang: string;\n  location: string;\n  time_zone: string;\n  user_agent: string;\n  device_category: DeviceCategory;\n  client_name: ClientType;\n  enable_safety_mode: boolean;\n  visitor_data: string;\n  on_behalf_of_user: string | undefined;\n}\n\nconst TAG = 'Session';\n\n/**\n * Represents an InnerTube session. This holds all the data needed to make requests to YouTube.\n */\nexport default class Session extends EventEmitter {\n  public oauth: OAuth2;\n  public http: HTTPClient;\n  public logged_in: boolean;\n  public actions: Actions;\n  public user_agent?: string;\n\n  constructor(\n    public context: Context,\n    public api_key: string,\n    public api_version: string,\n    public account_index: number,\n    public config_data?: string,\n    public player?: Player,\n    public cookie?: string,\n    fetch?: FetchFunction,\n    public cache?: ICache,\n    public po_token?: string\n  ) {\n    super();\n    this.http = new HTTPClient(this, cookie, fetch);\n    this.actions = new Actions(this);\n    this.oauth = new OAuth2(this);\n    this.logged_in = !!cookie;\n    this.user_agent = context.client.userAgent;\n  }\n\n  on(type: 'auth', listener: OAuth2AuthEventHandler): void;\n  on(type: 'auth-pending', listener: OAuth2AuthPendingEventHandler): void;\n  on(type: 'auth-error', listener: OAuth2AuthErrorEventHandler): void;\n  on(type: 'update-credentials', listener: OAuth2AuthEventHandler): void;\n\n  on(type: string, listener: (...args: any[]) => void): void {\n    super.on(type, listener);\n  }\n\n  once(type: 'auth', listener: OAuth2AuthEventHandler): void;\n  once(type: 'auth-pending', listener: OAuth2AuthPendingEventHandler): void;\n  once(type: 'auth-error', listener: OAuth2AuthErrorEventHandler): void;\n\n  once(type: string, listener: (...args: any[]) => void): void {\n    super.once(type, listener);\n  }\n\n  static async create(options: SessionOptions = {}) {\n    const { context, api_key, api_version, account_index, config_data } = await Session.getSessionData(\n      options.lang,\n      options.location,\n      options.account_index,\n      options.visitor_data,\n      options.user_agent,\n      options.enable_safety_mode,\n      options.generate_session_locally,\n      options.device_category,\n      options.client_type,\n      options.timezone,\n      options.fetch,\n      options.on_behalf_of_user,\n      options.cache,\n      options.enable_session_cache,\n      options.po_token,\n      options.retrieve_innertube_config\n    );\n\n    return new Session(\n      context, api_key, api_version, account_index, config_data,\n      options.retrieve_player === false ? undefined : await Player.create(options.cache, options.fetch, options.po_token, options.player_id),\n      options.cookie, options.fetch, options.cache, options.po_token\n    );\n  }\n\n  /**\n   * Retrieves session data from cache.\n   * @param cache - A valid cache implementation.\n   * @param session_args - User provided session arguments.\n   */\n  static async fromCache(cache: ICache, session_args: SessionArgs): Promise<SessionData | null> {\n    const buffer = await cache.get('innertube_session_data');\n\n    if (!buffer)\n      return null;\n\n    try {\n      const session_data = BinarySerializer.deserialize<SerializableSession>(new Uint8Array(buffer));\n\n      if (session_data.library_version !== parseInt(Platform.shim.info.version.split('.')[0])) {\n        Log.warn(TAG, `Cached session data is from a different library version (${session_data.library_version}). Regenerating session data.`);\n        return null;\n      }\n\n      if (session_args.visitor_data) {\n        session_data.context.client.visitorData = session_args.visitor_data;\n      }\n\n      if (session_args.lang)\n        session_data.context.client.hl = session_args.lang;\n\n      if (session_args.location)\n        session_data.context.client.gl = session_args.location;\n\n      if (session_args.on_behalf_of_user)\n        session_data.context.user.onBehalfOfUser = session_args.on_behalf_of_user;\n\n      if (session_args.user_agent)\n        session_data.context.client.userAgent = session_args.user_agent;\n\n      if (session_args.client_name) {\n        const client = Object.values(Constants.CLIENTS).find((c) => c.NAME === session_args.client_name);\n        if (client) {\n          session_data.context.client.clientName = client.NAME;\n          session_data.context.client.clientVersion = client.VERSION;\n        } else Log.warn(TAG, `Unknown client name: ${session_args.client_name}.`);\n      }\n\n      session_data.context.client.timeZone = session_args.time_zone;\n      session_data.context.client.platform = session_args.device_category.toUpperCase();\n      session_data.context.user.enableSafetyMode = session_args.enable_safety_mode;\n\n      return session_data;\n    } catch (error) {\n      Log.error(TAG, 'Failed to deserialize session data from cache.', error);\n      return null;\n    }\n  }\n\n  static async getSessionData(\n    lang = '',\n    location = '',\n    account_index = 0,\n    visitor_data = '',\n    user_agent: string = getRandomUserAgent('desktop'),\n    enable_safety_mode = false,\n    generate_session_locally = false,\n    device_category: DeviceCategory = 'desktop',\n    client_name: ClientType = ClientType.WEB,\n    tz: string = Intl.DateTimeFormat().resolvedOptions().timeZone,\n    fetch: FetchFunction = Platform.shim.fetch,\n    on_behalf_of_user?: string,\n    cache?: ICache,\n    enable_session_cache = true,\n    po_token?: string,\n    retrieve_innertube_config = true\n  ) {\n    const session_args = {\n      lang,\n      location,\n      time_zone: tz,\n      user_agent,\n      device_category,\n      client_name,\n      enable_safety_mode,\n      visitor_data,\n      on_behalf_of_user,\n      po_token\n    };\n\n    let session_data: SessionData | undefined;\n\n    if (cache && enable_session_cache) {\n      const cached_session_data = await this.fromCache(cache, session_args);\n      if (cached_session_data) {\n        Log.info(TAG, 'Found session data in cache.');\n        session_data = cached_session_data;\n      }\n    }\n\n    if (!session_data) {\n      Log.info(TAG, 'Generating session data.');\n\n      let api_key: string = Constants.CLIENTS.WEB.API_KEY;\n      let api_version: string = Constants.CLIENTS.WEB.API_VERSION;\n\n      let context_data: ContextData = {\n        hl: lang || 'en',\n        gl: location || 'US',\n        remote_host: '',\n        user_agent: user_agent,\n        visitor_data: visitor_data || ProtoUtils.encodeVisitorData(generateRandomString(11), Math.floor(Date.now() / 1000)),\n        client_name: client_name,\n        client_version: Object.values(Constants.CLIENTS).find((v) => v.NAME === client_name)?.VERSION ?? Constants.CLIENTS.WEB.VERSION,\n        device_category: device_category.toUpperCase(),\n        os_name: 'Windows',\n        os_version: '10.0',\n        time_zone: tz,\n        browser_name: 'Chrome',\n        browser_version: '125.0.0.0',\n        device_make: '',\n        device_model: '',\n        enable_safety_mode: enable_safety_mode\n      };\n\n      if (!generate_session_locally) {\n        try {\n          const sw_session_data = await this.#getSessionData(session_args, fetch);\n          api_key = sw_session_data.api_key;\n          api_version = sw_session_data.api_version;\n          context_data = sw_session_data.context_data;\n        } catch (error) {\n          Log.error(TAG, 'Failed to retrieve session data from server. Session data generated locally will be used instead.', error);\n        }\n      }\n\n      if (on_behalf_of_user) {\n        context_data.on_behalf_of_user = on_behalf_of_user;\n      }\n\n      session_data = {\n        api_key,\n        api_version,\n        context: this.#buildContext(context_data)\n      };\n\n      if (retrieve_innertube_config) {\n        try {\n          Log.info(TAG, 'Retrieving InnerTube config data.');\n\n          const config_headers: Record<string, any> = {\n            'Accept-Language': lang,\n            'Accept': '*/*',\n            'Referer': Constants.URLS.YT_BASE,\n            'X-Goog-Visitor-Id': context_data.visitor_data,\n            'X-Origin': Constants.URLS.YT_BASE,\n            'X-Youtube-Client-Version': context_data.client_version\n          };\n\n          if (Platform.shim.server) {\n            config_headers['User-Agent'] = user_agent;\n            config_headers['Origin'] = Constants.URLS.YT_BASE;\n          }\n\n          const config = await fetch(`${Constants.URLS.API.PRODUCTION_1}v1/config?prettyPrint=false`, {\n            headers: config_headers,\n            method: 'POST',\n            body: JSON.stringify({ context: session_data.context })\n          });\n\n          const configJson = await config.json() as IRawResponse;\n\n          const coldConfigData = configJson.responseContext?.globalConfigGroup?.rawColdConfigGroup?.configData;\n          const coldHashData = configJson.responseContext?.globalConfigGroup?.coldHashData;\n          const hotHashData = configJson.responseContext?.globalConfigGroup?.hotHashData;\n\n          session_data.config_data = configJson.configData;\n          session_data.context.client.configInfo = {\n            ...session_data.context.client.configInfo,\n            coldConfigData,\n            coldHashData,\n            hotHashData\n          };\n        } catch (error) {\n          Log.error(TAG, 'Failed to retrieve config data.', error);\n        }\n      }\n\n      if (enable_session_cache)\n        await this.#storeSession(session_data, cache);\n    }\n\n    Log.debug(TAG, 'Session data:', session_data);\n\n    return { ...session_data, account_index };\n  }\n\n  static async #storeSession(session_data: SessionData, cache?: ICache) {\n    if (!cache) return;\n\n    Log.info(TAG, 'Compressing and caching session data.');\n\n    const buffer = BinarySerializer.serialize({\n      ...session_data,\n      library_version: parseInt(Platform.shim.info.version)\n    });\n\n    await cache.set('innertube_session_data', buffer);\n  }\n\n  static async #getSessionData(options: SessionArgs, fetch: FetchFunction = Platform.shim.fetch): Promise<SWSessionData> {\n    let visitor_id = generateRandomString(11);\n\n    if (options.visitor_data)\n      visitor_id = this.#getVisitorID(options.visitor_data);\n\n    const url = new URL('/sw.js_data', Constants.URLS.YT_BASE);\n\n    const res = await fetch(url, {\n      headers: {\n        'Accept-Language': options.lang || 'en-US',\n        'User-Agent': options.user_agent,\n        'Accept': '*/*',\n        'Referer': `${Constants.URLS.YT_BASE}/sw.js`,\n        'Cookie': `PREF=tz=${options.time_zone.replace('/', '.')};VISITOR_INFO1_LIVE=${visitor_id};`\n      }\n    });\n\n    if (!res.ok)\n      throw new SessionError(`Failed to retrieve session data: ${res.status}`);\n\n    const text = await res.text();\n\n    if (!text.startsWith(')]}\\''))\n      throw new SessionError('Invalid JSPB response');\n\n    const data = JSON.parse(text.replace(/^\\)\\]\\}'/, ''));\n\n    const ytcfg = data[0][2];\n\n    const api_version = Constants.CLIENTS.WEB.API_VERSION;\n\n    const [ [ device_info ], api_key ] = ytcfg;\n\n    const config_info = device_info[61];\n    const app_install_data = config_info[config_info.length - 1];\n\n    const context_info = {\n      hl: options.lang || device_info[0],\n      gl: options.location || device_info[1],\n      remote_host: device_info[3],\n      visitor_data: options.visitor_data || device_info[13],\n      user_agent: options.user_agent,\n      client_name: options.client_name,\n      client_version: options.client_name === 'WEB' ? device_info[16] : Object.values(Constants.CLIENTS).find(\n        (c) => c.NAME === options.client_name\n      )?.VERSION || device_info[16],\n      os_name: device_info[17],\n      os_version: device_info[18],\n      time_zone: device_info[79] || options.time_zone,\n      device_category: options.device_category,\n      browser_name: device_info[86],\n      browser_version: device_info[87],\n      device_make: device_info[11],\n      device_model: device_info[12],\n      app_install_data: app_install_data,\n      device_experiment_id: device_info[103],\n      rollout_token: device_info[107],\n      enable_safety_mode: options.enable_safety_mode\n    };\n\n    return { context_data: context_info, api_key, api_version };\n  }\n\n  static #buildContext(args: ContextData) {\n    const context: Context = {\n      client: {\n        hl: args.hl || 'en',\n        gl: args.gl || 'US',\n        remoteHost: args.remote_host,\n        screenDensityFloat: 1,\n        screenHeightPoints: 1440,\n        screenPixelDensity: 1,\n        screenWidthPoints: 2560,\n        visitorData: args.visitor_data,\n        clientName: args.client_name,\n        clientVersion: args.client_version,\n        osName: args.os_name,\n        osVersion: args.os_version,\n        userAgent: args.user_agent,\n        platform: args.device_category.toUpperCase(),\n        clientFormFactor: 'UNKNOWN_FORM_FACTOR',\n        userInterfaceTheme: 'USER_INTERFACE_THEME_LIGHT',\n        timeZone: args.time_zone,\n        originalUrl: Constants.URLS.YT_BASE,\n        deviceMake: args.device_make,\n        deviceModel: args.device_model,\n        browserName: args.browser_name,\n        browserVersion: args.browser_version,\n        utcOffsetMinutes: -Math.floor((new Date()).getTimezoneOffset()),\n        memoryTotalKbytes: '8000000',\n        rolloutToken: args.rollout_token,\n        deviceExperimentId: args.device_experiment_id,\n        mainAppWebInfo: {\n          graftUrl: Constants.URLS.YT_BASE,\n          pwaInstallabilityStatus: 'PWA_INSTALLABILITY_STATUS_UNKNOWN',\n          webDisplayMode: 'WEB_DISPLAY_MODE_BROWSER',\n          isWebNativeShareAvailable: true\n        }\n      },\n      user: {\n        enableSafetyMode: args.enable_safety_mode,\n        lockedSafetyMode: false\n      },\n      request: {\n        useSsl: true,\n        internalExperimentFlags: []\n      }\n    };\n\n    if (args.app_install_data)\n      context.client.configInfo = { appInstallData: args.app_install_data };\n\n    if (args.on_behalf_of_user)\n      context.user.onBehalfOfUser = args.on_behalf_of_user;\n\n    return context;\n  }\n\n  static #getVisitorID(visitor_data: string) {\n    const decoded_visitor_data = ProtoUtils.decodeVisitorData(visitor_data);\n    return decoded_visitor_data.id;\n  }\n\n  async signIn(credentials?: OAuth2Tokens): Promise<void> {\n    return new Promise(async (resolve, reject) => {\n      const error_handler: OAuth2AuthErrorEventHandler = (err) => reject(err);\n\n      this.once('auth-error', error_handler);\n\n      this.once('auth', () => {\n        this.off('auth-error', error_handler);\n        this.logged_in = true;\n        resolve();\n      });\n\n      try {\n        await this.oauth.init(credentials);\n      } catch (err) {\n        reject(err);\n      }\n    });\n  }\n\n  /**\n   * Signs out of the current account and revokes the credentials.\n   */\n  async signOut(): Promise<Response | undefined> {\n    if (!this.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const response = await this.oauth.revokeCredentials();\n    this.logged_in = false;\n\n    return response;\n  }\n\n  get client_version(): string {\n    return this.context.client.clientVersion;\n  }\n\n  get client_name(): string {\n    return this.context.client.clientName;\n  }\n\n  get lang(): string {\n    return this.context.client.hl;\n  }\n}\n", "export { default as Kids } from './Kids.js';\nexport { default as Music } from './Music.js';\nexport { default as Studio } from './Studio.js';", "import { Parser } from '../../parser/index.js';\nimport { Channel, HomeFeed, Search, VideoInfo } from '../../parser/ytkids/index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\nimport KidsBlocklistPickerItem from '../../parser/classes/ytkids/KidsBlocklistPickerItem.js';\nimport { InnertubeError, generateRandomString } from '../../utils/Utils.js';\nimport type { Session, ApiResponse } from '../index.js';\nimport type { GetVideoInfoOptions } from '../../types/index.js';\n\nexport default class Kids {\n  #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  async search(query: string): Promise<Search> {\n    const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query } });\n    const response = await search_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new Search(this.#session.actions, response);\n  }\n\n  async getInfo(video_id: string, options?: Omit<GetVideoInfoOptions, 'client'>): Promise<VideoInfo> {\n    const payload = { videoId: video_id };\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.sts\n        }\n      },\n      client: 'YTKIDS'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n    \n    const watch_response = watch_endpoint.call(session.actions, extra_payload);\n\n    const watch_next_response = watch_next_endpoint.call(session.actions, { client: 'YTKIDS' });\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo(response, session.actions, cpn);\n  }\n\n  async getChannel(channel_id: string): Promise<Channel> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: channel_id } });\n    const response = await browse_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new Channel(this.#session.actions, response);\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEkids_home' } });\n    const response = await browse_endpoint.call(this.#session.actions, { client: 'YTKIDS' });\n    return new HomeFeed(this.#session.actions, response);\n  }\n\n  /**\n   * Retrieves the list of supervised accounts that the signed-in user has\n   * access to, and blocks the given channel for each of them.\n   * @param channel_id - The channel id to block.\n   * @returns A list of API responses.\n   */\n  async blockChannel(channel_id: string): Promise<ApiResponse[]> {\n    const session = this.#session;\n\n    if (!session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const kids_blocklist_picker_command = new NavigationEndpoint({\n      getKidsBlocklistPickerCommand: {\n        blockedForKidsContent: {\n          external_channel_id: channel_id\n        }\n      }\n    });\n\n    const response = await kids_blocklist_picker_command.call(session.actions, { client: 'YTKIDS' });\n    const popup = response.data.command.confirmDialogEndpoint;\n    const popup_fragment = { contents: popup.content, engagementPanels: [] };\n    const kid_picker = Parser.parseResponse(popup_fragment);\n    const kids = kid_picker.contents_memo?.getType(KidsBlocklistPickerItem);\n\n    if (!kids)\n      throw new InnertubeError('Could not find any kids profiles or supervised accounts.');\n\n    // Iterate through the kids and block the channel if not already blocked.\n    const responses: ApiResponse[] = [];\n\n    for (const kid of kids) {\n      if (!kid.block_button?.is_toggled) {\n        kid.setActions(session.actions);\n        // Block channel and add to the response list.\n        responses.push(await kid.blockChannel());\n      }\n    }\n\n    return responses;\n  }\n}", "import { generateRandomString, InnertubeError, throwIfMissing, u8ToBase64 } from '../../utils/Utils.js';\n\nimport {\n  Album,\n  Artist,\n  Explore,\n  HomeFeed,\n  Library,\n  Playlist,\n  Recap,\n  Search,\n  TrackInfo\n} from '../../parser/ytmusic/index.js';\n\nimport AutomixPreviewVideo from '../../parser/classes/AutomixPreviewVideo.js';\nimport Message from '../../parser/classes/Message.js';\nimport MusicDescriptionShelf from '../../parser/classes/MusicDescriptionShelf.js';\nimport MusicQueue from '../../parser/classes/MusicQueue.js';\nimport MusicResponsiveListItem from '../../parser/classes/MusicResponsiveListItem.js';\nimport MusicTwoRowItem from '../../parser/classes/MusicTwoRowItem.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\nimport PlaylistPanel from '../../parser/classes/PlaylistPanel.js';\nimport SearchSuggestionsSection from '../../parser/classes/SearchSuggestionsSection.js';\nimport SectionList from '../../parser/classes/SectionList.js';\nimport Tab from '../../parser/classes/Tab.js';\n\nimport { SearchFilter } from '../../../protos/generated/misc/params.js';\n\nimport type { ObservedArray } from '../../parser/helpers.js';\nimport type { GetVideoInfoOptions, MusicSearchFilters } from '../../types/index.js';\nimport type { Actions, Session } from '../index.js';\n\nexport default class Music {\n  #session: Session;\n  readonly #actions: Actions;\n\n  constructor(session: Session) {\n    this.#session = session;\n    this.#actions = session.actions;\n  }\n\n  /**\n   * Retrieves track info. Passing a list item of type MusicTwoRowItem automatically starts a radio.\n   * @param target - Video id or a list item.\n   * @param options - Options for fetching video info.\n   */\n  getInfo(target: string | MusicTwoRowItem | MusicResponsiveListItem | NavigationEndpoint, options?: Omit<GetVideoInfoOptions, 'client'>): Promise<TrackInfo> {\n    if (target instanceof MusicTwoRowItem) {\n      return this.#fetchInfoFromEndpoint(target.endpoint, options);\n    } else if (target instanceof MusicResponsiveListItem) {\n      return this.#fetchInfoFromEndpoint(target.overlay?.content?.endpoint ?? target.endpoint, options);\n    } else if (target instanceof NavigationEndpoint) {\n      return this.#fetchInfoFromEndpoint(target, options);\n    }\n    return this.#fetchInfoFromVideoId(target, options);\n  }\n\n  async #fetchInfoFromVideoId(video_id: string, options?: GetVideoInfoOptions): Promise<TrackInfo> {\n    const payload = { videoId: video_id, racyCheckOk: true, contentCheckOk: true };\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: this.#session.player?.sts\n        }\n      },\n      client: 'YTMUSIC'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (this.#session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: this.#session.po_token\n      };\n    }\n\n    const watch_response = watch_endpoint.call(this.#actions, extra_payload);\n\n    const watch_next_response = watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n    const cpn = generateRandomString(16);\n\n    return new TrackInfo(response, this.#actions, cpn);\n  }\n\n  async #fetchInfoFromEndpoint(endpoint?: NavigationEndpoint, options?: GetVideoInfoOptions): Promise<TrackInfo> {\n    if (!endpoint)\n      throw new Error('This item does not have an endpoint.');\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: this.#session.player?.sts\n        }\n      },\n      client: 'YTMUSIC'\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (this.#session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: this.#session.po_token\n      };\n    }\n    \n    const player_response = endpoint.call(this.#actions, extra_payload);\n\n    const next_response = endpoint.call(this.#actions, {\n      client: 'YTMUSIC',\n      enablePersistentPlaylistPanel: true,\n      override_endpoint: '/next'\n    });\n\n    const cpn = generateRandomString(16);\n\n    const response = await Promise.all([ player_response, next_response ]);\n    return new TrackInfo(response, this.#actions, cpn);\n  }\n\n  async search(query: string, filters: MusicSearchFilters = {}): Promise<Search> {\n    throwIfMissing({ query });\n\n    let params: string | undefined;\n\n    if (filters.type && filters.type !== 'all') {\n      const writer = SearchFilter.encode({\n        filters: {\n          musicSearchType: {\n            [filters.type]: true\n          }\n        }\n      });\n      params = encodeURIComponent(u8ToBase64(writer.finish()));\n    }\n\n    const search_endpoint = new NavigationEndpoint({ searchEndpoint: { query, params } });\n    const response = await search_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Search(response, this.#actions, Reflect.has(filters, 'type') && filters.type !== 'all');\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_home' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new HomeFeed(response, this.#actions);\n  }\n\n  async getExplore(): Promise<Explore> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_explore' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Explore(response);\n    // TODO: return new Explore(response, this.#actions);\n  }\n\n  async getLibrary(): Promise<Library> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_library_landing' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Library(response, this.#actions);\n  }\n\n  async getArtist(artist_id: string): Promise<Artist> {\n    if (!artist_id || !artist_id.startsWith('UC') && !artist_id.startsWith('FEmusic_library_privately_owned_artist'))\n      throw new InnertubeError('Invalid artist id', artist_id);\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: artist_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Artist(response, this.#actions);\n  }\n\n  async getAlbum(album_id: string): Promise<Album> {\n    if (!album_id || !album_id.startsWith('MPR') && !album_id.startsWith('FEmusic_library_privately_owned_release'))\n      throw new InnertubeError('Invalid album id', album_id);\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: album_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Album(response);\n  }\n\n  async getPlaylist(playlist_id: string): Promise<Playlist> {\n    if (!playlist_id.startsWith('VL'))\n      playlist_id = `VL${playlist_id}`;\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n\n    return new Playlist(response, this.#actions);\n  }\n\n  async getUpNext(video_id: string, automix = true): Promise<PlaylistPanel> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n    const tab = tabs?.[0];\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const music_queue = tab.content?.as(MusicQueue);\n\n    if (!music_queue || !music_queue.content)\n      throw new InnertubeError('Music queue was empty, the given id is probably invalid.', music_queue);\n\n    const playlist_panel = music_queue.content.as(PlaylistPanel);\n\n    if (!playlist_panel.playlist_id && automix) {\n      const automix_preview_video = playlist_panel.contents.firstOfType(AutomixPreviewVideo);\n\n      if (!automix_preview_video)\n        throw new InnertubeError('Automix item not found');\n\n      const page = await automix_preview_video.playlist_video?.endpoint.call(this.#actions, {\n        videoId: video_id,\n        client: 'YTMUSIC',\n        parse: true\n      });\n\n      if (!page || !page.contents_memo)\n        throw new InnertubeError('Could not fetch automix');\n\n      return page.contents_memo.getType(PlaylistPanel)[0];\n    }\n\n    return playlist_panel;\n  }\n\n  async getRelated(video_id: string): Promise<SectionList | Message> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n\n    const tab = tabs?.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_TRACK_RELATED');\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const page = await tab.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    if (!page.contents)\n      throw new InnertubeError('Unexpected response', page);\n\n    return page.contents.item().as(SectionList, Message);\n  }\n\n  async getLyrics(video_id: string): Promise<MusicDescriptionShelf | undefined> {\n    throwIfMissing({ video_id });\n\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: { videoId: video_id } });\n    const response = await watch_next_endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    const tabs = response.contents_memo?.getType(Tab);\n\n    const tab = tabs?.find((tab) => tab.endpoint.payload.browseEndpointContextSupportedConfigs?.browseEndpointContextMusicConfig?.pageType === 'MUSIC_PAGE_TYPE_TRACK_LYRICS');\n\n    if (!tab)\n      throw new InnertubeError('Could not find target tab.');\n\n    const page = await tab.endpoint.call(this.#actions, { client: 'YTMUSIC', parse: true });\n\n    if (!page.contents)\n      throw new InnertubeError('Unexpected response', page);\n\n    if (page.contents.item().type === 'Message')\n      throw new InnertubeError(page.contents.item().as(Message).text.toString(), video_id);\n\n    const section_list = page.contents.item().as(SectionList).contents;\n\n    return section_list.firstOfType(MusicDescriptionShelf);\n  }\n\n  async getRecap(): Promise<Recap> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEmusic_listening_review' } });\n    const response = await browse_endpoint.call(this.#actions, { client: 'YTMUSIC' });\n    return new Recap(response, this.#actions);\n  }\n\n  async getSearchSuggestions(input: string): Promise<ObservedArray<SearchSuggestionsSection>> {\n    const response = await this.#actions.execute('/music/get_search_suggestions', {\n      input,\n      client: 'YTMUSIC',\n      parse: true\n    });\n\n    if (!response.contents_memo)\n      return [] as unknown as ObservedArray<SearchSuggestionsSection>;\n\n    return response.contents_memo.getType(SearchSuggestionsSection);\n  }\n}", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/capability_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface CapabilityInfo {\n  profile?: string | undefined;\n  supportedCapabilities: InnerTubeCapability[];\n  disabledCapabilities: InnerTubeCapability[];\n  snapshot?: string | undefined;\n}\n\nexport interface InnerTubeCapability {\n  capability?: number | undefined;\n  features?: number | undefined;\n  experimentFlags?: string | undefined;\n}\n\nfunction createBaseCapabilityInfo(): CapabilityInfo {\n  return { profile: undefined, supportedCapabilities: [], disabledCapabilities: [], snapshot: undefined };\n}\n\nexport const CapabilityInfo: MessageFns<CapabilityInfo> = {\n  encode(message: CapabilityInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.profile !== undefined) {\n      writer.uint32(10).string(message.profile);\n    }\n    for (const v of message.supportedCapabilities) {\n      InnerTubeCapability.encode(v!, writer.uint32(18).fork()).join();\n    }\n    for (const v of message.disabledCapabilities) {\n      InnerTubeCapability.encode(v!, writer.uint32(26).fork()).join();\n    }\n    if (message.snapshot !== undefined) {\n      writer.uint32(42).string(message.snapshot);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): CapabilityInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseCapabilityInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.profile = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.supportedCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.disabledCapabilities.push(InnerTubeCapability.decode(reader, reader.uint32()));\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.snapshot = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeCapability(): InnerTubeCapability {\n  return { capability: undefined, features: undefined, experimentFlags: undefined };\n}\n\nexport const InnerTubeCapability: MessageFns<InnerTubeCapability> = {\n  encode(message: InnerTubeCapability, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.capability !== undefined) {\n      writer.uint32(8).uint32(message.capability);\n    }\n    if (message.features !== undefined) {\n      writer.uint32(16).uint32(message.features);\n    }\n    if (message.experimentFlags !== undefined) {\n      writer.uint32(50).string(message.experimentFlags);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeCapability {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeCapability();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.capability = reader.uint32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.features = reader.uint32();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.experimentFlags = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/client_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface ClientInfo {\n  hl?: string | undefined;\n  gl?: string | undefined;\n  remoteHost?: string | undefined;\n  deviceId?: string | undefined;\n  debugDeviceIdOverride?: string | undefined;\n  carrierGeo?: string | undefined;\n  crackedHl?: boolean | undefined;\n  deviceMake?: string | undefined;\n  deviceModel?: string | undefined;\n  visitorData?: string | undefined;\n  userAgent?: string | undefined;\n  clientName?: number | undefined;\n  clientVersion?: string | undefined;\n  osName?: string | undefined;\n  osVersion?: string | undefined;\n  projectId?: string | undefined;\n  acceptLanguage?: string | undefined;\n  acceptRegion?: string | undefined;\n  originalUrl?: string | undefined;\n  rawDeviceId?: string | undefined;\n  configData?: string | undefined;\n  spacecastToken?: string | undefined;\n  internalGeo?: string | undefined;\n  screenWidthPoints?: number | undefined;\n  screenHeightPoints?: number | undefined;\n  screenWidthInches?: number | undefined;\n  screenHeightInches?: number | undefined;\n  screenPixelDensity?: number | undefined;\n  platform?: number | undefined;\n  spacecastClientInfo?: ClientInfo_SpacecastClientInfo | undefined;\n  clientFormFactor?: ClientInfo_ClientFormFactor | undefined;\n  forwardedFor?: string | undefined;\n  mobileDataPlanInfo?:\n    | ClientInfo_MobileDataPlanInfo\n    | undefined;\n  /** e.g. 241757026 */\n  gmscoreVersionCode?: number | undefined;\n  webpSupport?: boolean | undefined;\n  cameraType?: ClientInfo_CameraType | undefined;\n  experimentsToken?: string | undefined;\n  windowWidthPoints?: number | undefined;\n  windowHeightPoints?: number | undefined;\n  configInfo?: ClientInfo_ConfigGroupsClientInfo | undefined;\n  unpluggedLocationInfo?: ClientInfo_UnpluggedLocationInfo | undefined;\n  androidSdkVersion?: number | undefined;\n  screenDensityFloat?: number | undefined;\n  firstTimeSignInExperimentIds?: number | undefined;\n  utcOffsetMinutes?: number | undefined;\n  animatedWebpSupport?: boolean | undefined;\n  kidsAppInfo?: ClientInfo_KidsAppInfo | undefined;\n  musicAppInfo?: ClientInfo_MusicAppInfo | undefined;\n  tvAppInfo?: ClientInfo_TvAppInfo | undefined;\n  internalGeoIp?: string | undefined;\n  unpluggedAppInfo?: ClientInfo_UnpluggedAppInfo | undefined;\n  locationInfo?: ClientInfo_LocationInfo | undefined;\n  contentSizeCategory?: string | undefined;\n  fontScale?: number | undefined;\n  userInterfaceTheme?: ClientInfo_UserInterfaceTheme | undefined;\n  timeZone?: string | undefined;\n  homeGroupInfo?: ClientInfo_HomeGroupInfo | undefined;\n  emlTemplateContext?: Uint8Array | undefined;\n  coldAppBundleConfigData?:\n    | Uint8Array\n    | undefined;\n  /** repeated ExperimentsHeterodyne.ExperimentIds heterodyne_ids = 86; */\n  browserName?: string | undefined;\n  browserVersion?: string | undefined;\n  locationPlayabilityToken?:\n    | string\n    | undefined;\n  /** e.g. \"qcom;taro\" */\n  chipset?: string | undefined;\n  firmwareVersion?: string | undefined;\n  memoryTotalKbytes?: number | undefined;\n  mainAppWebInfo?: ClientInfo_MainAppWebInfo | undefined;\n  notificationPermissionInfo?: ClientInfo_NotificationPermissionInfo | undefined;\n  deviceBrand?:\n    | string\n    | undefined;\n  /**\n   * optional ClientStoreInfo client_store_info = 99;\n   * optional SRSDataPushVersion srs_datapush_build_ids = 100;\n   * optional PlayerDataPushVersion player_datapush_build_ids = 101;\n   */\n  glDeviceInfo?: ClientInfo_GLDeviceInfo | undefined;\n}\n\nexport enum ClientInfo_ClientFormFactor {\n  /** UNKNOWN_FORM_FACTOR - @TODO: Check these. */\n  UNKNOWN_FORM_FACTOR = 0,\n  FORM_FACTOR_VAL1 = 1,\n  FORM_FACTOR_VAL2 = 2,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_CameraType {\n  UNKNOWN_CAMERA_TYPE = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_UserInterfaceTheme {\n  USER_INTERFACE_THEME_DARK = 0,\n  USER_INTERFACE_THEME_LIGHT = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_MainAppWebInfo {\n  graftUrl?: string | undefined;\n  pwaInstallabilityStatus?: ClientInfo_MainAppWebInfo_PwaInstallabilityStatus | undefined;\n  webDisplayMode?: ClientInfo_MainAppWebInfo_WebDisplayMode | undefined;\n  isWebNativeShareAvailable?: boolean | undefined;\n  storeDigitalGoodsApiSupportStatus?: ClientInfo_MainAppWebInfo_StoreDigitalGoodsApiSupportStatus | undefined;\n}\n\nexport enum ClientInfo_MainAppWebInfo_StoreDigitalGoodsApiSupportStatus {\n  STORE_DIGITAL_GOODS_API_SUPPORT_STATUS_VAL0 = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MainAppWebInfo_PwaInstallabilityStatus {\n  PWA_INSTALLABILITY_STATUS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MainAppWebInfo_WebDisplayMode {\n  WEB_DISPLAY_MODE_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_NotificationPermissionInfo {\n  notificationsSetting?: ClientInfo_NotificationPermissionInfo_NotificationsSetting | undefined;\n  lastDeviceOptInChangeTimeAgoSec?: number | undefined;\n}\n\nexport enum ClientInfo_NotificationPermissionInfo_NotificationsSetting {\n  NOTIFICATIONS_SETTING_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_GLDeviceInfo {\n  glRenderer?: string | undefined;\n  glEsVersionMajor?: number | undefined;\n  glEsVersionMinor?: number | undefined;\n}\n\nexport interface ClientInfo_SpacecastClientInfo {\n  appliances?: ClientInfo_SpacecastClientInfo_SpacecastAppliance | undefined;\n  interactionLevel?: ClientInfo_SpacecastClientInfo_SpacecastInteractionLevel | undefined;\n}\n\nexport enum ClientInfo_SpacecastClientInfo_SpacecastInteractionLevel {\n  UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n  contentProfileToken?: Uint8Array | undefined;\n  status?: ClientInfo_SpacecastClientInfo_SpacecastAppliance_OperationalStatus | undefined;\n  hostname?: string | undefined;\n  active?: boolean | undefined;\n  deviceId?: string | undefined;\n}\n\nexport enum ClientInfo_SpacecastClientInfo_SpacecastAppliance_OperationalStatus {\n  UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_MobileDataPlanInfo {\n  cpid?: string | undefined;\n  serializedDataPlanStatus?: string | undefined;\n  dataSavingQualityPickerEnabled?: boolean | undefined;\n  mccmnc?: string | undefined;\n}\n\nexport interface ClientInfo_ConfigGroupsClientInfo {\n  coldConfigData?: string | undefined;\n  coldHashData?: string | undefined;\n  hotHashData?: string | undefined;\n  appInstallData?: string | undefined;\n}\n\nexport interface ClientInfo_UnpluggedLocationInfo {\n  latitudeE7?: number | undefined;\n  longitudeE7?: number | undefined;\n  localTimestampMs?: number | undefined;\n  ipAddress?: string | undefined;\n  timezone?: string | undefined;\n  prefer24HourTime?: boolean | undefined;\n  locationRadiusMeters?: number | undefined;\n  isInitialLoad?: boolean | undefined;\n  browserPermissionGranted?: boolean | undefined;\n  clientPermissionState?: number | undefined;\n  locationOverrideToken?: string | undefined;\n}\n\nexport interface ClientInfo_KidsAppInfo {\n  contentSettings?: ClientInfo_KidsAppInfo_KidsContentSettings | undefined;\n  parentCurationMode?: ClientInfo_KidsAppInfo_KidsParentCurationMode | undefined;\n  categorySettings?: ClientInfo_KidsAppInfo_KidsCategorySettings | undefined;\n  userEducationSettings?: ClientInfo_KidsAppInfo_KidsUserEducationSettings | undefined;\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsParentCurationMode {\n  KPCM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsContentSettings {\n  kidsNoSearchMode?: ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsNoSearchMode | undefined;\n  ageUpMode?: ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsAgeUpMode | undefined;\n  contentDensity?: ClientInfo_KidsAppInfo_KidsContentSettings_KidsContentDensity | undefined;\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsNoSearchMode {\n  YT_KIDS_NO_SEARCH_MODE_OFF = 0,\n  YT_KIDS_NO_SEARCH_MODE_ON = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_YTKidsAgeUpMode {\n  YT_KIDS_AGE_UP_MODE_OFF = 0,\n  YT_KIDS_AGE_UP_MODE_ON = 1,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_KidsAppInfo_KidsContentSettings_KidsContentDensity {\n  /** YT_KIDS_CONTENT_DENSITY_VAL1 - @TODO: Check these. */\n  YT_KIDS_CONTENT_DENSITY_VAL1 = 0,\n  YT_KIDS_CONTENT_DENSITY_VAL2 = 1,\n  YT_KIDS_CONTENT_DENSITY_VAL3 = 2,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsCategorySettings {\n  enabledCategories?: string | undefined;\n}\n\nexport interface ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n  hasSeenHomeChipBarUserEducation?: boolean | undefined;\n  hasSeenHomePivotBarUserEducation?: boolean | undefined;\n  hasSeenParentMuirUserEducation?: boolean | undefined;\n}\n\nexport interface ClientInfo_MusicAppInfo {\n  playBackMode?: ClientInfo_MusicAppInfo_MusicPlayBackMode | undefined;\n  musicLocationMasterSwitch?: ClientInfo_MusicAppInfo_MusicLocationMasterSwitch | undefined;\n  musicActivityMasterSwitch?: ClientInfo_MusicAppInfo_MusicActivityMasterSwitch | undefined;\n  offlineMixtapeEnabled?: boolean | undefined;\n  autoOfflineEnabled?: boolean | undefined;\n  iosBackgroundRefreshStatus?: ClientInfo_MusicAppInfo_IosBackgroundRefreshStatus | undefined;\n  smartDownloadsSongLimit?: number | undefined;\n  transitionedFromMixtapeToSmartDownloads?: boolean | undefined;\n  pwaInstallabilityStatus?: ClientInfo_MusicAppInfo_PwaInstallabilityStatus | undefined;\n  webDisplayMode?: ClientInfo_MusicAppInfo_WebDisplayMode | undefined;\n  musicTier?: ClientInfo_MusicAppInfo_MusicTier | undefined;\n  storeDigitalGoodsApiSupportStatus?: ClientInfo_MusicAppInfo_StoreDigitalGoodsApiSupportStatus | undefined;\n  smartDownloadsTimeSinceLastOptOutSec?: number | undefined;\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicPlayBackMode {\n  MPBM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicLocationMasterSwitch {\n  MLMS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicActivityMasterSwitch {\n  MAMS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_IosBackgroundRefreshStatus {\n  UNKNOWN_STATUS = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_PwaInstallabilityStatus {\n  PIS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_WebDisplayMode {\n  WDM_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_MusicTier {\n  UNKNOWN_TIER = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport enum ClientInfo_MusicAppInfo_StoreDigitalGoodsApiSupportStatus {\n  SDGAS_UNKNOWN = 0,\n  UNRECOGNIZED = -1,\n}\n\nexport interface ClientInfo_TvAppInfo {\n  mdxImpactedSessionsServerEvents?: string | undefined;\n  enablePrivacyFilter?: boolean | undefined;\n  zylonLeftNav?: boolean | undefined;\n  certificationScope?: string | undefined;\n  livingRoomPoTokenId?: string | undefined;\n  jsEngineString?: string | undefined;\n  voiceCapability?: ClientInfo_TvAppInfo_VoiceCapability | undefined;\n  systemIntegrator?: string | undefined;\n  androidBuildFingerprint?: string | undefined;\n  cobaltAppVersion?: string | undefined;\n  cobaltStarboardVersion?: string | undefined;\n  useStartPlaybackPreviewCommand?: boolean | undefined;\n  shouldShowPersistentSigninOnHome?: boolean | undefined;\n  androidPlayServicesVersion?: string | undefined;\n}\n\nexport interface ClientInfo_TvAppInfo_VoiceCapability {\n  hasSoftMicSupport?: boolean | undefined;\n  hasHardMicSupport?: boolean | undefined;\n}\n\nexport interface ClientInfo_UnpluggedAppInfo {\n  enableFilterMode?: boolean | undefined;\n  iosNotificationPermission?: boolean | undefined;\n  forceEnableEpg3?: boolean | undefined;\n}\n\nexport interface ClientInfo_LocationInfo {\n  locationInfoStatus?: number | undefined;\n  ulrStatus?: ClientInfo_LocationInfo_UrlStatus | undefined;\n  latitudeE7?: string | undefined;\n  longitudeE7?: string | undefined;\n  horizontalAccuracyMeters?: string | undefined;\n  locationFreshnessMs?: string | undefined;\n  locationPermissionAuthorizationStatus?: number | undefined;\n  locationOverrideToken?: string | undefined;\n  forceLocationPlayabilityTokenRefresh?: boolean | undefined;\n}\n\nexport interface ClientInfo_LocationInfo_UrlStatus {\n  reportingEnabledSetting?: number | undefined;\n  historyEnabledSetting?: number | undefined;\n  isAllowed?: boolean | undefined;\n  isActive?: boolean | undefined;\n}\n\nexport interface ClientInfo_HomeGroupInfo {\n  isPartOfGroup?: boolean | undefined;\n  isGroup?: boolean | undefined;\n}\n\nfunction createBaseClientInfo(): ClientInfo {\n  return {\n    hl: undefined,\n    gl: undefined,\n    remoteHost: undefined,\n    deviceId: undefined,\n    debugDeviceIdOverride: undefined,\n    carrierGeo: undefined,\n    crackedHl: undefined,\n    deviceMake: undefined,\n    deviceModel: undefined,\n    visitorData: undefined,\n    userAgent: undefined,\n    clientName: undefined,\n    clientVersion: undefined,\n    osName: undefined,\n    osVersion: undefined,\n    projectId: undefined,\n    acceptLanguage: undefined,\n    acceptRegion: undefined,\n    originalUrl: undefined,\n    rawDeviceId: undefined,\n    configData: undefined,\n    spacecastToken: undefined,\n    internalGeo: undefined,\n    screenWidthPoints: undefined,\n    screenHeightPoints: undefined,\n    screenWidthInches: undefined,\n    screenHeightInches: undefined,\n    screenPixelDensity: undefined,\n    platform: undefined,\n    spacecastClientInfo: undefined,\n    clientFormFactor: undefined,\n    forwardedFor: undefined,\n    mobileDataPlanInfo: undefined,\n    gmscoreVersionCode: undefined,\n    webpSupport: undefined,\n    cameraType: undefined,\n    experimentsToken: undefined,\n    windowWidthPoints: undefined,\n    windowHeightPoints: undefined,\n    configInfo: undefined,\n    unpluggedLocationInfo: undefined,\n    androidSdkVersion: undefined,\n    screenDensityFloat: undefined,\n    firstTimeSignInExperimentIds: undefined,\n    utcOffsetMinutes: undefined,\n    animatedWebpSupport: undefined,\n    kidsAppInfo: undefined,\n    musicAppInfo: undefined,\n    tvAppInfo: undefined,\n    internalGeoIp: undefined,\n    unpluggedAppInfo: undefined,\n    locationInfo: undefined,\n    contentSizeCategory: undefined,\n    fontScale: undefined,\n    userInterfaceTheme: undefined,\n    timeZone: undefined,\n    homeGroupInfo: undefined,\n    emlTemplateContext: undefined,\n    coldAppBundleConfigData: undefined,\n    browserName: undefined,\n    browserVersion: undefined,\n    locationPlayabilityToken: undefined,\n    chipset: undefined,\n    firmwareVersion: undefined,\n    memoryTotalKbytes: undefined,\n    mainAppWebInfo: undefined,\n    notificationPermissionInfo: undefined,\n    deviceBrand: undefined,\n    glDeviceInfo: undefined,\n  };\n}\n\nexport const ClientInfo: MessageFns<ClientInfo> = {\n  encode(message: ClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hl !== undefined) {\n      writer.uint32(10).string(message.hl);\n    }\n    if (message.gl !== undefined) {\n      writer.uint32(18).string(message.gl);\n    }\n    if (message.remoteHost !== undefined) {\n      writer.uint32(34).string(message.remoteHost);\n    }\n    if (message.deviceId !== undefined) {\n      writer.uint32(50).string(message.deviceId);\n    }\n    if (message.debugDeviceIdOverride !== undefined) {\n      writer.uint32(66).string(message.debugDeviceIdOverride);\n    }\n    if (message.carrierGeo !== undefined) {\n      writer.uint32(82).string(message.carrierGeo);\n    }\n    if (message.crackedHl !== undefined) {\n      writer.uint32(88).bool(message.crackedHl);\n    }\n    if (message.deviceMake !== undefined) {\n      writer.uint32(98).string(message.deviceMake);\n    }\n    if (message.deviceModel !== undefined) {\n      writer.uint32(106).string(message.deviceModel);\n    }\n    if (message.visitorData !== undefined) {\n      writer.uint32(114).string(message.visitorData);\n    }\n    if (message.userAgent !== undefined) {\n      writer.uint32(122).string(message.userAgent);\n    }\n    if (message.clientName !== undefined) {\n      writer.uint32(128).int32(message.clientName);\n    }\n    if (message.clientVersion !== undefined) {\n      writer.uint32(138).string(message.clientVersion);\n    }\n    if (message.osName !== undefined) {\n      writer.uint32(146).string(message.osName);\n    }\n    if (message.osVersion !== undefined) {\n      writer.uint32(154).string(message.osVersion);\n    }\n    if (message.projectId !== undefined) {\n      writer.uint32(162).string(message.projectId);\n    }\n    if (message.acceptLanguage !== undefined) {\n      writer.uint32(170).string(message.acceptLanguage);\n    }\n    if (message.acceptRegion !== undefined) {\n      writer.uint32(178).string(message.acceptRegion);\n    }\n    if (message.originalUrl !== undefined) {\n      writer.uint32(186).string(message.originalUrl);\n    }\n    if (message.rawDeviceId !== undefined) {\n      writer.uint32(202).string(message.rawDeviceId);\n    }\n    if (message.configData !== undefined) {\n      writer.uint32(218).string(message.configData);\n    }\n    if (message.spacecastToken !== undefined) {\n      writer.uint32(250).string(message.spacecastToken);\n    }\n    if (message.internalGeo !== undefined) {\n      writer.uint32(274).string(message.internalGeo);\n    }\n    if (message.screenWidthPoints !== undefined) {\n      writer.uint32(296).int32(message.screenWidthPoints);\n    }\n    if (message.screenHeightPoints !== undefined) {\n      writer.uint32(304).int32(message.screenHeightPoints);\n    }\n    if (message.screenWidthInches !== undefined) {\n      writer.uint32(317).float(message.screenWidthInches);\n    }\n    if (message.screenHeightInches !== undefined) {\n      writer.uint32(325).float(message.screenHeightInches);\n    }\n    if (message.screenPixelDensity !== undefined) {\n      writer.uint32(328).int32(message.screenPixelDensity);\n    }\n    if (message.platform !== undefined) {\n      writer.uint32(336).int32(message.platform);\n    }\n    if (message.spacecastClientInfo !== undefined) {\n      ClientInfo_SpacecastClientInfo.encode(message.spacecastClientInfo, writer.uint32(362).fork()).join();\n    }\n    if (message.clientFormFactor !== undefined) {\n      writer.uint32(368).int32(message.clientFormFactor);\n    }\n    if (message.forwardedFor !== undefined) {\n      writer.uint32(386).string(message.forwardedFor);\n    }\n    if (message.mobileDataPlanInfo !== undefined) {\n      ClientInfo_MobileDataPlanInfo.encode(message.mobileDataPlanInfo, writer.uint32(394).fork()).join();\n    }\n    if (message.gmscoreVersionCode !== undefined) {\n      writer.uint32(400).int32(message.gmscoreVersionCode);\n    }\n    if (message.webpSupport !== undefined) {\n      writer.uint32(408).bool(message.webpSupport);\n    }\n    if (message.cameraType !== undefined) {\n      writer.uint32(416).int32(message.cameraType);\n    }\n    if (message.experimentsToken !== undefined) {\n      writer.uint32(434).string(message.experimentsToken);\n    }\n    if (message.windowWidthPoints !== undefined) {\n      writer.uint32(440).int32(message.windowWidthPoints);\n    }\n    if (message.windowHeightPoints !== undefined) {\n      writer.uint32(448).int32(message.windowHeightPoints);\n    }\n    if (message.configInfo !== undefined) {\n      ClientInfo_ConfigGroupsClientInfo.encode(message.configInfo, writer.uint32(498).fork()).join();\n    }\n    if (message.unpluggedLocationInfo !== undefined) {\n      ClientInfo_UnpluggedLocationInfo.encode(message.unpluggedLocationInfo, writer.uint32(506).fork()).join();\n    }\n    if (message.androidSdkVersion !== undefined) {\n      writer.uint32(512).int32(message.androidSdkVersion);\n    }\n    if (message.screenDensityFloat !== undefined) {\n      writer.uint32(525).float(message.screenDensityFloat);\n    }\n    if (message.firstTimeSignInExperimentIds !== undefined) {\n      writer.uint32(528).int32(message.firstTimeSignInExperimentIds);\n    }\n    if (message.utcOffsetMinutes !== undefined) {\n      writer.uint32(536).int32(message.utcOffsetMinutes);\n    }\n    if (message.animatedWebpSupport !== undefined) {\n      writer.uint32(544).bool(message.animatedWebpSupport);\n    }\n    if (message.kidsAppInfo !== undefined) {\n      ClientInfo_KidsAppInfo.encode(message.kidsAppInfo, writer.uint32(554).fork()).join();\n    }\n    if (message.musicAppInfo !== undefined) {\n      ClientInfo_MusicAppInfo.encode(message.musicAppInfo, writer.uint32(562).fork()).join();\n    }\n    if (message.tvAppInfo !== undefined) {\n      ClientInfo_TvAppInfo.encode(message.tvAppInfo, writer.uint32(570).fork()).join();\n    }\n    if (message.internalGeoIp !== undefined) {\n      writer.uint32(578).string(message.internalGeoIp);\n    }\n    if (message.unpluggedAppInfo !== undefined) {\n      ClientInfo_UnpluggedAppInfo.encode(message.unpluggedAppInfo, writer.uint32(586).fork()).join();\n    }\n    if (message.locationInfo !== undefined) {\n      ClientInfo_LocationInfo.encode(message.locationInfo, writer.uint32(594).fork()).join();\n    }\n    if (message.contentSizeCategory !== undefined) {\n      writer.uint32(610).string(message.contentSizeCategory);\n    }\n    if (message.fontScale !== undefined) {\n      writer.uint32(621).float(message.fontScale);\n    }\n    if (message.userInterfaceTheme !== undefined) {\n      writer.uint32(624).int32(message.userInterfaceTheme);\n    }\n    if (message.timeZone !== undefined) {\n      writer.uint32(642).string(message.timeZone);\n    }\n    if (message.homeGroupInfo !== undefined) {\n      ClientInfo_HomeGroupInfo.encode(message.homeGroupInfo, writer.uint32(650).fork()).join();\n    }\n    if (message.emlTemplateContext !== undefined) {\n      writer.uint32(674).bytes(message.emlTemplateContext);\n    }\n    if (message.coldAppBundleConfigData !== undefined) {\n      writer.uint32(682).bytes(message.coldAppBundleConfigData);\n    }\n    if (message.browserName !== undefined) {\n      writer.uint32(698).string(message.browserName);\n    }\n    if (message.browserVersion !== undefined) {\n      writer.uint32(706).string(message.browserVersion);\n    }\n    if (message.locationPlayabilityToken !== undefined) {\n      writer.uint32(714).string(message.locationPlayabilityToken);\n    }\n    if (message.chipset !== undefined) {\n      writer.uint32(738).string(message.chipset);\n    }\n    if (message.firmwareVersion !== undefined) {\n      writer.uint32(746).string(message.firmwareVersion);\n    }\n    if (message.memoryTotalKbytes !== undefined) {\n      writer.uint32(760).int64(message.memoryTotalKbytes);\n    }\n    if (message.mainAppWebInfo !== undefined) {\n      ClientInfo_MainAppWebInfo.encode(message.mainAppWebInfo, writer.uint32(770).fork()).join();\n    }\n    if (message.notificationPermissionInfo !== undefined) {\n      ClientInfo_NotificationPermissionInfo.encode(message.notificationPermissionInfo, writer.uint32(778).fork())\n        .join();\n    }\n    if (message.deviceBrand !== undefined) {\n      writer.uint32(786).string(message.deviceBrand);\n    }\n    if (message.glDeviceInfo !== undefined) {\n      ClientInfo_GLDeviceInfo.encode(message.glDeviceInfo, writer.uint32(818).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.hl = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.gl = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.remoteHost = reader.string();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.deviceId = reader.string();\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.debugDeviceIdOverride = reader.string();\n          continue;\n        case 10:\n          if (tag !== 82) {\n            break;\n          }\n\n          message.carrierGeo = reader.string();\n          continue;\n        case 11:\n          if (tag !== 88) {\n            break;\n          }\n\n          message.crackedHl = reader.bool();\n          continue;\n        case 12:\n          if (tag !== 98) {\n            break;\n          }\n\n          message.deviceMake = reader.string();\n          continue;\n        case 13:\n          if (tag !== 106) {\n            break;\n          }\n\n          message.deviceModel = reader.string();\n          continue;\n        case 14:\n          if (tag !== 114) {\n            break;\n          }\n\n          message.visitorData = reader.string();\n          continue;\n        case 15:\n          if (tag !== 122) {\n            break;\n          }\n\n          message.userAgent = reader.string();\n          continue;\n        case 16:\n          if (tag !== 128) {\n            break;\n          }\n\n          message.clientName = reader.int32();\n          continue;\n        case 17:\n          if (tag !== 138) {\n            break;\n          }\n\n          message.clientVersion = reader.string();\n          continue;\n        case 18:\n          if (tag !== 146) {\n            break;\n          }\n\n          message.osName = reader.string();\n          continue;\n        case 19:\n          if (tag !== 154) {\n            break;\n          }\n\n          message.osVersion = reader.string();\n          continue;\n        case 20:\n          if (tag !== 162) {\n            break;\n          }\n\n          message.projectId = reader.string();\n          continue;\n        case 21:\n          if (tag !== 170) {\n            break;\n          }\n\n          message.acceptLanguage = reader.string();\n          continue;\n        case 22:\n          if (tag !== 178) {\n            break;\n          }\n\n          message.acceptRegion = reader.string();\n          continue;\n        case 23:\n          if (tag !== 186) {\n            break;\n          }\n\n          message.originalUrl = reader.string();\n          continue;\n        case 25:\n          if (tag !== 202) {\n            break;\n          }\n\n          message.rawDeviceId = reader.string();\n          continue;\n        case 27:\n          if (tag !== 218) {\n            break;\n          }\n\n          message.configData = reader.string();\n          continue;\n        case 31:\n          if (tag !== 250) {\n            break;\n          }\n\n          message.spacecastToken = reader.string();\n          continue;\n        case 34:\n          if (tag !== 274) {\n            break;\n          }\n\n          message.internalGeo = reader.string();\n          continue;\n        case 37:\n          if (tag !== 296) {\n            break;\n          }\n\n          message.screenWidthPoints = reader.int32();\n          continue;\n        case 38:\n          if (tag !== 304) {\n            break;\n          }\n\n          message.screenHeightPoints = reader.int32();\n          continue;\n        case 39:\n          if (tag !== 317) {\n            break;\n          }\n\n          message.screenWidthInches = reader.float();\n          continue;\n        case 40:\n          if (tag !== 325) {\n            break;\n          }\n\n          message.screenHeightInches = reader.float();\n          continue;\n        case 41:\n          if (tag !== 328) {\n            break;\n          }\n\n          message.screenPixelDensity = reader.int32();\n          continue;\n        case 42:\n          if (tag !== 336) {\n            break;\n          }\n\n          message.platform = reader.int32();\n          continue;\n        case 45:\n          if (tag !== 362) {\n            break;\n          }\n\n          message.spacecastClientInfo = ClientInfo_SpacecastClientInfo.decode(reader, reader.uint32());\n          continue;\n        case 46:\n          if (tag !== 368) {\n            break;\n          }\n\n          message.clientFormFactor = reader.int32() as any;\n          continue;\n        case 48:\n          if (tag !== 386) {\n            break;\n          }\n\n          message.forwardedFor = reader.string();\n          continue;\n        case 49:\n          if (tag !== 394) {\n            break;\n          }\n\n          message.mobileDataPlanInfo = ClientInfo_MobileDataPlanInfo.decode(reader, reader.uint32());\n          continue;\n        case 50:\n          if (tag !== 400) {\n            break;\n          }\n\n          message.gmscoreVersionCode = reader.int32();\n          continue;\n        case 51:\n          if (tag !== 408) {\n            break;\n          }\n\n          message.webpSupport = reader.bool();\n          continue;\n        case 52:\n          if (tag !== 416) {\n            break;\n          }\n\n          message.cameraType = reader.int32() as any;\n          continue;\n        case 54:\n          if (tag !== 434) {\n            break;\n          }\n\n          message.experimentsToken = reader.string();\n          continue;\n        case 55:\n          if (tag !== 440) {\n            break;\n          }\n\n          message.windowWidthPoints = reader.int32();\n          continue;\n        case 56:\n          if (tag !== 448) {\n            break;\n          }\n\n          message.windowHeightPoints = reader.int32();\n          continue;\n        case 62:\n          if (tag !== 498) {\n            break;\n          }\n\n          message.configInfo = ClientInfo_ConfigGroupsClientInfo.decode(reader, reader.uint32());\n          continue;\n        case 63:\n          if (tag !== 506) {\n            break;\n          }\n\n          message.unpluggedLocationInfo = ClientInfo_UnpluggedLocationInfo.decode(reader, reader.uint32());\n          continue;\n        case 64:\n          if (tag !== 512) {\n            break;\n          }\n\n          message.androidSdkVersion = reader.int32();\n          continue;\n        case 65:\n          if (tag !== 525) {\n            break;\n          }\n\n          message.screenDensityFloat = reader.float();\n          continue;\n        case 66:\n          if (tag !== 528) {\n            break;\n          }\n\n          message.firstTimeSignInExperimentIds = reader.int32();\n          continue;\n        case 67:\n          if (tag !== 536) {\n            break;\n          }\n\n          message.utcOffsetMinutes = reader.int32();\n          continue;\n        case 68:\n          if (tag !== 544) {\n            break;\n          }\n\n          message.animatedWebpSupport = reader.bool();\n          continue;\n        case 69:\n          if (tag !== 554) {\n            break;\n          }\n\n          message.kidsAppInfo = ClientInfo_KidsAppInfo.decode(reader, reader.uint32());\n          continue;\n        case 70:\n          if (tag !== 562) {\n            break;\n          }\n\n          message.musicAppInfo = ClientInfo_MusicAppInfo.decode(reader, reader.uint32());\n          continue;\n        case 71:\n          if (tag !== 570) {\n            break;\n          }\n\n          message.tvAppInfo = ClientInfo_TvAppInfo.decode(reader, reader.uint32());\n          continue;\n        case 72:\n          if (tag !== 578) {\n            break;\n          }\n\n          message.internalGeoIp = reader.string();\n          continue;\n        case 73:\n          if (tag !== 586) {\n            break;\n          }\n\n          message.unpluggedAppInfo = ClientInfo_UnpluggedAppInfo.decode(reader, reader.uint32());\n          continue;\n        case 74:\n          if (tag !== 594) {\n            break;\n          }\n\n          message.locationInfo = ClientInfo_LocationInfo.decode(reader, reader.uint32());\n          continue;\n        case 76:\n          if (tag !== 610) {\n            break;\n          }\n\n          message.contentSizeCategory = reader.string();\n          continue;\n        case 77:\n          if (tag !== 621) {\n            break;\n          }\n\n          message.fontScale = reader.float();\n          continue;\n        case 78:\n          if (tag !== 624) {\n            break;\n          }\n\n          message.userInterfaceTheme = reader.int32() as any;\n          continue;\n        case 80:\n          if (tag !== 642) {\n            break;\n          }\n\n          message.timeZone = reader.string();\n          continue;\n        case 81:\n          if (tag !== 650) {\n            break;\n          }\n\n          message.homeGroupInfo = ClientInfo_HomeGroupInfo.decode(reader, reader.uint32());\n          continue;\n        case 84:\n          if (tag !== 674) {\n            break;\n          }\n\n          message.emlTemplateContext = reader.bytes();\n          continue;\n        case 85:\n          if (tag !== 682) {\n            break;\n          }\n\n          message.coldAppBundleConfigData = reader.bytes();\n          continue;\n        case 87:\n          if (tag !== 698) {\n            break;\n          }\n\n          message.browserName = reader.string();\n          continue;\n        case 88:\n          if (tag !== 706) {\n            break;\n          }\n\n          message.browserVersion = reader.string();\n          continue;\n        case 89:\n          if (tag !== 714) {\n            break;\n          }\n\n          message.locationPlayabilityToken = reader.string();\n          continue;\n        case 92:\n          if (tag !== 738) {\n            break;\n          }\n\n          message.chipset = reader.string();\n          continue;\n        case 93:\n          if (tag !== 746) {\n            break;\n          }\n\n          message.firmwareVersion = reader.string();\n          continue;\n        case 95:\n          if (tag !== 760) {\n            break;\n          }\n\n          message.memoryTotalKbytes = longToNumber(reader.int64());\n          continue;\n        case 96:\n          if (tag !== 770) {\n            break;\n          }\n\n          message.mainAppWebInfo = ClientInfo_MainAppWebInfo.decode(reader, reader.uint32());\n          continue;\n        case 97:\n          if (tag !== 778) {\n            break;\n          }\n\n          message.notificationPermissionInfo = ClientInfo_NotificationPermissionInfo.decode(reader, reader.uint32());\n          continue;\n        case 98:\n          if (tag !== 786) {\n            break;\n          }\n\n          message.deviceBrand = reader.string();\n          continue;\n        case 102:\n          if (tag !== 818) {\n            break;\n          }\n\n          message.glDeviceInfo = ClientInfo_GLDeviceInfo.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MainAppWebInfo(): ClientInfo_MainAppWebInfo {\n  return {\n    graftUrl: undefined,\n    pwaInstallabilityStatus: undefined,\n    webDisplayMode: undefined,\n    isWebNativeShareAvailable: undefined,\n    storeDigitalGoodsApiSupportStatus: undefined,\n  };\n}\n\nexport const ClientInfo_MainAppWebInfo: MessageFns<ClientInfo_MainAppWebInfo> = {\n  encode(message: ClientInfo_MainAppWebInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.graftUrl !== undefined) {\n      writer.uint32(10).string(message.graftUrl);\n    }\n    if (message.pwaInstallabilityStatus !== undefined) {\n      writer.uint32(16).int32(message.pwaInstallabilityStatus);\n    }\n    if (message.webDisplayMode !== undefined) {\n      writer.uint32(24).int32(message.webDisplayMode);\n    }\n    if (message.isWebNativeShareAvailable !== undefined) {\n      writer.uint32(32).bool(message.isWebNativeShareAvailable);\n    }\n    if (message.storeDigitalGoodsApiSupportStatus !== undefined) {\n      writer.uint32(40).int32(message.storeDigitalGoodsApiSupportStatus);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MainAppWebInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MainAppWebInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.graftUrl = reader.string();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.pwaInstallabilityStatus = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.webDisplayMode = reader.int32() as any;\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.isWebNativeShareAvailable = reader.bool();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.storeDigitalGoodsApiSupportStatus = reader.int32() as any;\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_NotificationPermissionInfo(): ClientInfo_NotificationPermissionInfo {\n  return { notificationsSetting: undefined, lastDeviceOptInChangeTimeAgoSec: undefined };\n}\n\nexport const ClientInfo_NotificationPermissionInfo: MessageFns<ClientInfo_NotificationPermissionInfo> = {\n  encode(message: ClientInfo_NotificationPermissionInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.notificationsSetting !== undefined) {\n      writer.uint32(8).int32(message.notificationsSetting);\n    }\n    if (message.lastDeviceOptInChangeTimeAgoSec !== undefined) {\n      writer.uint32(16).int64(message.lastDeviceOptInChangeTimeAgoSec);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_NotificationPermissionInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_NotificationPermissionInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.notificationsSetting = reader.int32() as any;\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.lastDeviceOptInChangeTimeAgoSec = longToNumber(reader.int64());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_GLDeviceInfo(): ClientInfo_GLDeviceInfo {\n  return { glRenderer: undefined, glEsVersionMajor: undefined, glEsVersionMinor: undefined };\n}\n\nexport const ClientInfo_GLDeviceInfo: MessageFns<ClientInfo_GLDeviceInfo> = {\n  encode(message: ClientInfo_GLDeviceInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.glRenderer !== undefined) {\n      writer.uint32(10).string(message.glRenderer);\n    }\n    if (message.glEsVersionMajor !== undefined) {\n      writer.uint32(16).int32(message.glEsVersionMajor);\n    }\n    if (message.glEsVersionMinor !== undefined) {\n      writer.uint32(24).int32(message.glEsVersionMinor);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_GLDeviceInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_GLDeviceInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.glRenderer = reader.string();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.glEsVersionMajor = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.glEsVersionMinor = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_SpacecastClientInfo(): ClientInfo_SpacecastClientInfo {\n  return { appliances: undefined, interactionLevel: undefined };\n}\n\nexport const ClientInfo_SpacecastClientInfo: MessageFns<ClientInfo_SpacecastClientInfo> = {\n  encode(message: ClientInfo_SpacecastClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.appliances !== undefined) {\n      ClientInfo_SpacecastClientInfo_SpacecastAppliance.encode(message.appliances, writer.uint32(10).fork()).join();\n    }\n    if (message.interactionLevel !== undefined) {\n      writer.uint32(16).int32(message.interactionLevel);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_SpacecastClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_SpacecastClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.appliances = ClientInfo_SpacecastClientInfo_SpacecastAppliance.decode(reader, reader.uint32());\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.interactionLevel = reader.int32() as any;\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance(): ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n  return {\n    contentProfileToken: undefined,\n    status: undefined,\n    hostname: undefined,\n    active: undefined,\n    deviceId: undefined,\n  };\n}\n\nexport const ClientInfo_SpacecastClientInfo_SpacecastAppliance: MessageFns<\n  ClientInfo_SpacecastClientInfo_SpacecastAppliance\n> = {\n  encode(\n    message: ClientInfo_SpacecastClientInfo_SpacecastAppliance,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.contentProfileToken !== undefined) {\n      writer.uint32(10).bytes(message.contentProfileToken);\n    }\n    if (message.status !== undefined) {\n      writer.uint32(16).int32(message.status);\n    }\n    if (message.hostname !== undefined) {\n      writer.uint32(26).string(message.hostname);\n    }\n    if (message.active !== undefined) {\n      writer.uint32(32).bool(message.active);\n    }\n    if (message.deviceId !== undefined) {\n      writer.uint32(42).string(message.deviceId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_SpacecastClientInfo_SpacecastAppliance {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_SpacecastClientInfo_SpacecastAppliance();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.contentProfileToken = reader.bytes();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.status = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.hostname = reader.string();\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.active = reader.bool();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.deviceId = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MobileDataPlanInfo(): ClientInfo_MobileDataPlanInfo {\n  return {\n    cpid: undefined,\n    serializedDataPlanStatus: undefined,\n    dataSavingQualityPickerEnabled: undefined,\n    mccmnc: undefined,\n  };\n}\n\nexport const ClientInfo_MobileDataPlanInfo: MessageFns<ClientInfo_MobileDataPlanInfo> = {\n  encode(message: ClientInfo_MobileDataPlanInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.cpid !== undefined) {\n      writer.uint32(394).string(message.cpid);\n    }\n    if (message.serializedDataPlanStatus !== undefined) {\n      writer.uint32(402).string(message.serializedDataPlanStatus);\n    }\n    if (message.dataSavingQualityPickerEnabled !== undefined) {\n      writer.uint32(416).bool(message.dataSavingQualityPickerEnabled);\n    }\n    if (message.mccmnc !== undefined) {\n      writer.uint32(426).string(message.mccmnc);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MobileDataPlanInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MobileDataPlanInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 49:\n          if (tag !== 394) {\n            break;\n          }\n\n          message.cpid = reader.string();\n          continue;\n        case 50:\n          if (tag !== 402) {\n            break;\n          }\n\n          message.serializedDataPlanStatus = reader.string();\n          continue;\n        case 52:\n          if (tag !== 416) {\n            break;\n          }\n\n          message.dataSavingQualityPickerEnabled = reader.bool();\n          continue;\n        case 53:\n          if (tag !== 426) {\n            break;\n          }\n\n          message.mccmnc = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_ConfigGroupsClientInfo(): ClientInfo_ConfigGroupsClientInfo {\n  return { coldConfigData: undefined, coldHashData: undefined, hotHashData: undefined, appInstallData: undefined };\n}\n\nexport const ClientInfo_ConfigGroupsClientInfo: MessageFns<ClientInfo_ConfigGroupsClientInfo> = {\n  encode(message: ClientInfo_ConfigGroupsClientInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.coldConfigData !== undefined) {\n      writer.uint32(10).string(message.coldConfigData);\n    }\n    if (message.coldHashData !== undefined) {\n      writer.uint32(26).string(message.coldHashData);\n    }\n    if (message.hotHashData !== undefined) {\n      writer.uint32(42).string(message.hotHashData);\n    }\n    if (message.appInstallData !== undefined) {\n      writer.uint32(50).string(message.appInstallData);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_ConfigGroupsClientInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_ConfigGroupsClientInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.coldConfigData = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.coldHashData = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.hotHashData = reader.string();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.appInstallData = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_UnpluggedLocationInfo(): ClientInfo_UnpluggedLocationInfo {\n  return {\n    latitudeE7: undefined,\n    longitudeE7: undefined,\n    localTimestampMs: undefined,\n    ipAddress: undefined,\n    timezone: undefined,\n    prefer24HourTime: undefined,\n    locationRadiusMeters: undefined,\n    isInitialLoad: undefined,\n    browserPermissionGranted: undefined,\n    clientPermissionState: undefined,\n    locationOverrideToken: undefined,\n  };\n}\n\nexport const ClientInfo_UnpluggedLocationInfo: MessageFns<ClientInfo_UnpluggedLocationInfo> = {\n  encode(message: ClientInfo_UnpluggedLocationInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.latitudeE7 !== undefined) {\n      writer.uint32(8).int32(message.latitudeE7);\n    }\n    if (message.longitudeE7 !== undefined) {\n      writer.uint32(16).int32(message.longitudeE7);\n    }\n    if (message.localTimestampMs !== undefined) {\n      writer.uint32(24).int64(message.localTimestampMs);\n    }\n    if (message.ipAddress !== undefined) {\n      writer.uint32(34).string(message.ipAddress);\n    }\n    if (message.timezone !== undefined) {\n      writer.uint32(42).string(message.timezone);\n    }\n    if (message.prefer24HourTime !== undefined) {\n      writer.uint32(48).bool(message.prefer24HourTime);\n    }\n    if (message.locationRadiusMeters !== undefined) {\n      writer.uint32(56).int32(message.locationRadiusMeters);\n    }\n    if (message.isInitialLoad !== undefined) {\n      writer.uint32(64).bool(message.isInitialLoad);\n    }\n    if (message.browserPermissionGranted !== undefined) {\n      writer.uint32(72).bool(message.browserPermissionGranted);\n    }\n    if (message.clientPermissionState !== undefined) {\n      writer.uint32(80).int32(message.clientPermissionState);\n    }\n    if (message.locationOverrideToken !== undefined) {\n      writer.uint32(90).string(message.locationOverrideToken);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_UnpluggedLocationInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_UnpluggedLocationInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.latitudeE7 = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.longitudeE7 = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.localTimestampMs = longToNumber(reader.int64());\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.ipAddress = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.timezone = reader.string();\n          continue;\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.prefer24HourTime = reader.bool();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.locationRadiusMeters = reader.int32();\n          continue;\n        case 8:\n          if (tag !== 64) {\n            break;\n          }\n\n          message.isInitialLoad = reader.bool();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.browserPermissionGranted = reader.bool();\n          continue;\n        case 10:\n          if (tag !== 80) {\n            break;\n          }\n\n          message.clientPermissionState = reader.int32();\n          continue;\n        case 11:\n          if (tag !== 90) {\n            break;\n          }\n\n          message.locationOverrideToken = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo(): ClientInfo_KidsAppInfo {\n  return {\n    contentSettings: undefined,\n    parentCurationMode: undefined,\n    categorySettings: undefined,\n    userEducationSettings: undefined,\n  };\n}\n\nexport const ClientInfo_KidsAppInfo: MessageFns<ClientInfo_KidsAppInfo> = {\n  encode(message: ClientInfo_KidsAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.contentSettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsContentSettings.encode(message.contentSettings, writer.uint32(10).fork()).join();\n    }\n    if (message.parentCurationMode !== undefined) {\n      writer.uint32(16).int32(message.parentCurationMode);\n    }\n    if (message.categorySettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsCategorySettings.encode(message.categorySettings, writer.uint32(26).fork()).join();\n    }\n    if (message.userEducationSettings !== undefined) {\n      ClientInfo_KidsAppInfo_KidsUserEducationSettings.encode(message.userEducationSettings, writer.uint32(34).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.contentSettings = ClientInfo_KidsAppInfo_KidsContentSettings.decode(reader, reader.uint32());\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.parentCurationMode = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.categorySettings = ClientInfo_KidsAppInfo_KidsCategorySettings.decode(reader, reader.uint32());\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.userEducationSettings = ClientInfo_KidsAppInfo_KidsUserEducationSettings.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsContentSettings(): ClientInfo_KidsAppInfo_KidsContentSettings {\n  return { kidsNoSearchMode: undefined, ageUpMode: undefined, contentDensity: undefined };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsContentSettings: MessageFns<ClientInfo_KidsAppInfo_KidsContentSettings> = {\n  encode(message: ClientInfo_KidsAppInfo_KidsContentSettings, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.kidsNoSearchMode !== undefined) {\n      writer.uint32(8).int32(message.kidsNoSearchMode);\n    }\n    if (message.ageUpMode !== undefined) {\n      writer.uint32(16).int32(message.ageUpMode);\n    }\n    if (message.contentDensity !== undefined) {\n      writer.uint32(24).int32(message.contentDensity);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsContentSettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsContentSettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.kidsNoSearchMode = reader.int32() as any;\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.ageUpMode = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.contentDensity = reader.int32() as any;\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsCategorySettings(): ClientInfo_KidsAppInfo_KidsCategorySettings {\n  return { enabledCategories: undefined };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsCategorySettings: MessageFns<ClientInfo_KidsAppInfo_KidsCategorySettings> = {\n  encode(\n    message: ClientInfo_KidsAppInfo_KidsCategorySettings,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.enabledCategories !== undefined) {\n      writer.uint32(10).string(message.enabledCategories);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsCategorySettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsCategorySettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.enabledCategories = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings(): ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n  return {\n    hasSeenHomeChipBarUserEducation: undefined,\n    hasSeenHomePivotBarUserEducation: undefined,\n    hasSeenParentMuirUserEducation: undefined,\n  };\n}\n\nexport const ClientInfo_KidsAppInfo_KidsUserEducationSettings: MessageFns<\n  ClientInfo_KidsAppInfo_KidsUserEducationSettings\n> = {\n  encode(\n    message: ClientInfo_KidsAppInfo_KidsUserEducationSettings,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.hasSeenHomeChipBarUserEducation !== undefined) {\n      writer.uint32(8).bool(message.hasSeenHomeChipBarUserEducation);\n    }\n    if (message.hasSeenHomePivotBarUserEducation !== undefined) {\n      writer.uint32(16).bool(message.hasSeenHomePivotBarUserEducation);\n    }\n    if (message.hasSeenParentMuirUserEducation !== undefined) {\n      writer.uint32(24).bool(message.hasSeenParentMuirUserEducation);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_KidsAppInfo_KidsUserEducationSettings {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_KidsAppInfo_KidsUserEducationSettings();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.hasSeenHomeChipBarUserEducation = reader.bool();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.hasSeenHomePivotBarUserEducation = reader.bool();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.hasSeenParentMuirUserEducation = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_MusicAppInfo(): ClientInfo_MusicAppInfo {\n  return {\n    playBackMode: undefined,\n    musicLocationMasterSwitch: undefined,\n    musicActivityMasterSwitch: undefined,\n    offlineMixtapeEnabled: undefined,\n    autoOfflineEnabled: undefined,\n    iosBackgroundRefreshStatus: undefined,\n    smartDownloadsSongLimit: undefined,\n    transitionedFromMixtapeToSmartDownloads: undefined,\n    pwaInstallabilityStatus: undefined,\n    webDisplayMode: undefined,\n    musicTier: undefined,\n    storeDigitalGoodsApiSupportStatus: undefined,\n    smartDownloadsTimeSinceLastOptOutSec: undefined,\n  };\n}\n\nexport const ClientInfo_MusicAppInfo: MessageFns<ClientInfo_MusicAppInfo> = {\n  encode(message: ClientInfo_MusicAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.playBackMode !== undefined) {\n      writer.uint32(8).int32(message.playBackMode);\n    }\n    if (message.musicLocationMasterSwitch !== undefined) {\n      writer.uint32(16).int32(message.musicLocationMasterSwitch);\n    }\n    if (message.musicActivityMasterSwitch !== undefined) {\n      writer.uint32(24).int32(message.musicActivityMasterSwitch);\n    }\n    if (message.offlineMixtapeEnabled !== undefined) {\n      writer.uint32(32).bool(message.offlineMixtapeEnabled);\n    }\n    if (message.autoOfflineEnabled !== undefined) {\n      writer.uint32(40).bool(message.autoOfflineEnabled);\n    }\n    if (message.iosBackgroundRefreshStatus !== undefined) {\n      writer.uint32(48).int32(message.iosBackgroundRefreshStatus);\n    }\n    if (message.smartDownloadsSongLimit !== undefined) {\n      writer.uint32(56).int32(message.smartDownloadsSongLimit);\n    }\n    if (message.transitionedFromMixtapeToSmartDownloads !== undefined) {\n      writer.uint32(64).bool(message.transitionedFromMixtapeToSmartDownloads);\n    }\n    if (message.pwaInstallabilityStatus !== undefined) {\n      writer.uint32(72).int32(message.pwaInstallabilityStatus);\n    }\n    if (message.webDisplayMode !== undefined) {\n      writer.uint32(80).int32(message.webDisplayMode);\n    }\n    if (message.musicTier !== undefined) {\n      writer.uint32(88).int32(message.musicTier);\n    }\n    if (message.storeDigitalGoodsApiSupportStatus !== undefined) {\n      writer.uint32(96).int32(message.storeDigitalGoodsApiSupportStatus);\n    }\n    if (message.smartDownloadsTimeSinceLastOptOutSec !== undefined) {\n      writer.uint32(104).int64(message.smartDownloadsTimeSinceLastOptOutSec);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_MusicAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_MusicAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.playBackMode = reader.int32() as any;\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.musicLocationMasterSwitch = reader.int32() as any;\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.musicActivityMasterSwitch = reader.int32() as any;\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.offlineMixtapeEnabled = reader.bool();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.autoOfflineEnabled = reader.bool();\n          continue;\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.iosBackgroundRefreshStatus = reader.int32() as any;\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.smartDownloadsSongLimit = reader.int32();\n          continue;\n        case 8:\n          if (tag !== 64) {\n            break;\n          }\n\n          message.transitionedFromMixtapeToSmartDownloads = reader.bool();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.pwaInstallabilityStatus = reader.int32() as any;\n          continue;\n        case 10:\n          if (tag !== 80) {\n            break;\n          }\n\n          message.webDisplayMode = reader.int32() as any;\n          continue;\n        case 11:\n          if (tag !== 88) {\n            break;\n          }\n\n          message.musicTier = reader.int32() as any;\n          continue;\n        case 12:\n          if (tag !== 96) {\n            break;\n          }\n\n          message.storeDigitalGoodsApiSupportStatus = reader.int32() as any;\n          continue;\n        case 13:\n          if (tag !== 104) {\n            break;\n          }\n\n          message.smartDownloadsTimeSinceLastOptOutSec = longToNumber(reader.int64());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_TvAppInfo(): ClientInfo_TvAppInfo {\n  return {\n    mdxImpactedSessionsServerEvents: undefined,\n    enablePrivacyFilter: undefined,\n    zylonLeftNav: undefined,\n    certificationScope: undefined,\n    livingRoomPoTokenId: undefined,\n    jsEngineString: undefined,\n    voiceCapability: undefined,\n    systemIntegrator: undefined,\n    androidBuildFingerprint: undefined,\n    cobaltAppVersion: undefined,\n    cobaltStarboardVersion: undefined,\n    useStartPlaybackPreviewCommand: undefined,\n    shouldShowPersistentSigninOnHome: undefined,\n    androidPlayServicesVersion: undefined,\n  };\n}\n\nexport const ClientInfo_TvAppInfo: MessageFns<ClientInfo_TvAppInfo> = {\n  encode(message: ClientInfo_TvAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.mdxImpactedSessionsServerEvents !== undefined) {\n      writer.uint32(26).string(message.mdxImpactedSessionsServerEvents);\n    }\n    if (message.enablePrivacyFilter !== undefined) {\n      writer.uint32(48).bool(message.enablePrivacyFilter);\n    }\n    if (message.zylonLeftNav !== undefined) {\n      writer.uint32(56).bool(message.zylonLeftNav);\n    }\n    if (message.certificationScope !== undefined) {\n      writer.uint32(74).string(message.certificationScope);\n    }\n    if (message.livingRoomPoTokenId !== undefined) {\n      writer.uint32(82).string(message.livingRoomPoTokenId);\n    }\n    if (message.jsEngineString !== undefined) {\n      writer.uint32(98).string(message.jsEngineString);\n    }\n    if (message.voiceCapability !== undefined) {\n      ClientInfo_TvAppInfo_VoiceCapability.encode(message.voiceCapability, writer.uint32(106).fork()).join();\n    }\n    if (message.systemIntegrator !== undefined) {\n      writer.uint32(114).string(message.systemIntegrator);\n    }\n    if (message.androidBuildFingerprint !== undefined) {\n      writer.uint32(146).string(message.androidBuildFingerprint);\n    }\n    if (message.cobaltAppVersion !== undefined) {\n      writer.uint32(154).string(message.cobaltAppVersion);\n    }\n    if (message.cobaltStarboardVersion !== undefined) {\n      writer.uint32(162).string(message.cobaltStarboardVersion);\n    }\n    if (message.useStartPlaybackPreviewCommand !== undefined) {\n      writer.uint32(176).bool(message.useStartPlaybackPreviewCommand);\n    }\n    if (message.shouldShowPersistentSigninOnHome !== undefined) {\n      writer.uint32(184).bool(message.shouldShowPersistentSigninOnHome);\n    }\n    if (message.androidPlayServicesVersion !== undefined) {\n      writer.uint32(194).string(message.androidPlayServicesVersion);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_TvAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_TvAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.mdxImpactedSessionsServerEvents = reader.string();\n          continue;\n        case 6:\n          if (tag !== 48) {\n            break;\n          }\n\n          message.enablePrivacyFilter = reader.bool();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.zylonLeftNav = reader.bool();\n          continue;\n        case 9:\n          if (tag !== 74) {\n            break;\n          }\n\n          message.certificationScope = reader.string();\n          continue;\n        case 10:\n          if (tag !== 82) {\n            break;\n          }\n\n          message.livingRoomPoTokenId = reader.string();\n          continue;\n        case 12:\n          if (tag !== 98) {\n            break;\n          }\n\n          message.jsEngineString = reader.string();\n          continue;\n        case 13:\n          if (tag !== 106) {\n            break;\n          }\n\n          message.voiceCapability = ClientInfo_TvAppInfo_VoiceCapability.decode(reader, reader.uint32());\n          continue;\n        case 14:\n          if (tag !== 114) {\n            break;\n          }\n\n          message.systemIntegrator = reader.string();\n          continue;\n        case 18:\n          if (tag !== 146) {\n            break;\n          }\n\n          message.androidBuildFingerprint = reader.string();\n          continue;\n        case 19:\n          if (tag !== 154) {\n            break;\n          }\n\n          message.cobaltAppVersion = reader.string();\n          continue;\n        case 20:\n          if (tag !== 162) {\n            break;\n          }\n\n          message.cobaltStarboardVersion = reader.string();\n          continue;\n        case 22:\n          if (tag !== 176) {\n            break;\n          }\n\n          message.useStartPlaybackPreviewCommand = reader.bool();\n          continue;\n        case 23:\n          if (tag !== 184) {\n            break;\n          }\n\n          message.shouldShowPersistentSigninOnHome = reader.bool();\n          continue;\n        case 24:\n          if (tag !== 194) {\n            break;\n          }\n\n          message.androidPlayServicesVersion = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_TvAppInfo_VoiceCapability(): ClientInfo_TvAppInfo_VoiceCapability {\n  return { hasSoftMicSupport: undefined, hasHardMicSupport: undefined };\n}\n\nexport const ClientInfo_TvAppInfo_VoiceCapability: MessageFns<ClientInfo_TvAppInfo_VoiceCapability> = {\n  encode(message: ClientInfo_TvAppInfo_VoiceCapability, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.hasSoftMicSupport !== undefined) {\n      writer.uint32(8).bool(message.hasSoftMicSupport);\n    }\n    if (message.hasHardMicSupport !== undefined) {\n      writer.uint32(16).bool(message.hasHardMicSupport);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_TvAppInfo_VoiceCapability {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_TvAppInfo_VoiceCapability();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.hasSoftMicSupport = reader.bool();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.hasHardMicSupport = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_UnpluggedAppInfo(): ClientInfo_UnpluggedAppInfo {\n  return { enableFilterMode: undefined, iosNotificationPermission: undefined, forceEnableEpg3: undefined };\n}\n\nexport const ClientInfo_UnpluggedAppInfo: MessageFns<ClientInfo_UnpluggedAppInfo> = {\n  encode(message: ClientInfo_UnpluggedAppInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.enableFilterMode !== undefined) {\n      writer.uint32(16).bool(message.enableFilterMode);\n    }\n    if (message.iosNotificationPermission !== undefined) {\n      writer.uint32(24).bool(message.iosNotificationPermission);\n    }\n    if (message.forceEnableEpg3 !== undefined) {\n      writer.uint32(56).bool(message.forceEnableEpg3);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_UnpluggedAppInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_UnpluggedAppInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.enableFilterMode = reader.bool();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.iosNotificationPermission = reader.bool();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.forceEnableEpg3 = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_LocationInfo(): ClientInfo_LocationInfo {\n  return {\n    locationInfoStatus: undefined,\n    ulrStatus: undefined,\n    latitudeE7: undefined,\n    longitudeE7: undefined,\n    horizontalAccuracyMeters: undefined,\n    locationFreshnessMs: undefined,\n    locationPermissionAuthorizationStatus: undefined,\n    locationOverrideToken: undefined,\n    forceLocationPlayabilityTokenRefresh: undefined,\n  };\n}\n\nexport const ClientInfo_LocationInfo: MessageFns<ClientInfo_LocationInfo> = {\n  encode(message: ClientInfo_LocationInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.locationInfoStatus !== undefined) {\n      writer.uint32(8).int32(message.locationInfoStatus);\n    }\n    if (message.ulrStatus !== undefined) {\n      ClientInfo_LocationInfo_UrlStatus.encode(message.ulrStatus, writer.uint32(18).fork()).join();\n    }\n    if (message.latitudeE7 !== undefined) {\n      writer.uint32(26).string(message.latitudeE7);\n    }\n    if (message.longitudeE7 !== undefined) {\n      writer.uint32(34).string(message.longitudeE7);\n    }\n    if (message.horizontalAccuracyMeters !== undefined) {\n      writer.uint32(42).string(message.horizontalAccuracyMeters);\n    }\n    if (message.locationFreshnessMs !== undefined) {\n      writer.uint32(50).string(message.locationFreshnessMs);\n    }\n    if (message.locationPermissionAuthorizationStatus !== undefined) {\n      writer.uint32(56).int32(message.locationPermissionAuthorizationStatus);\n    }\n    if (message.locationOverrideToken !== undefined) {\n      writer.uint32(66).string(message.locationOverrideToken);\n    }\n    if (message.forceLocationPlayabilityTokenRefresh !== undefined) {\n      writer.uint32(72).bool(message.forceLocationPlayabilityTokenRefresh);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_LocationInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_LocationInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.locationInfoStatus = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.ulrStatus = ClientInfo_LocationInfo_UrlStatus.decode(reader, reader.uint32());\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.latitudeE7 = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.longitudeE7 = reader.string();\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.horizontalAccuracyMeters = reader.string();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.locationFreshnessMs = reader.string();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.locationPermissionAuthorizationStatus = reader.int32();\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.locationOverrideToken = reader.string();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.forceLocationPlayabilityTokenRefresh = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_LocationInfo_UrlStatus(): ClientInfo_LocationInfo_UrlStatus {\n  return {\n    reportingEnabledSetting: undefined,\n    historyEnabledSetting: undefined,\n    isAllowed: undefined,\n    isActive: undefined,\n  };\n}\n\nexport const ClientInfo_LocationInfo_UrlStatus: MessageFns<ClientInfo_LocationInfo_UrlStatus> = {\n  encode(message: ClientInfo_LocationInfo_UrlStatus, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.reportingEnabledSetting !== undefined) {\n      writer.uint32(8).int32(message.reportingEnabledSetting);\n    }\n    if (message.historyEnabledSetting !== undefined) {\n      writer.uint32(16).int32(message.historyEnabledSetting);\n    }\n    if (message.isAllowed !== undefined) {\n      writer.uint32(24).bool(message.isAllowed);\n    }\n    if (message.isActive !== undefined) {\n      writer.uint32(32).bool(message.isActive);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_LocationInfo_UrlStatus {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_LocationInfo_UrlStatus();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.reportingEnabledSetting = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.historyEnabledSetting = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.isAllowed = reader.bool();\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.isActive = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseClientInfo_HomeGroupInfo(): ClientInfo_HomeGroupInfo {\n  return { isPartOfGroup: undefined, isGroup: undefined };\n}\n\nexport const ClientInfo_HomeGroupInfo: MessageFns<ClientInfo_HomeGroupInfo> = {\n  encode(message: ClientInfo_HomeGroupInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.isPartOfGroup !== undefined) {\n      writer.uint32(8).bool(message.isPartOfGroup);\n    }\n    if (message.isGroup !== undefined) {\n      writer.uint32(24).bool(message.isGroup);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ClientInfo_HomeGroupInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseClientInfo_HomeGroupInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.isPartOfGroup = reader.bool();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.isGroup = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/attestation_response_data.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface AttestationResponseData {\n  challenge?: string | undefined;\n  webResponse?: string | undefined;\n  androidResponse?: string | undefined;\n  iosResponse?: Uint8Array | undefined;\n  error?: number | undefined;\n  adblockReporting?: AttestationResponseData_AdblockReporting | undefined;\n}\n\nexport interface AttestationResponseData_AdblockReporting {\n  reportingStatus?: number | undefined;\n  broadSpectrumDetectionResult?: number | undefined;\n}\n\nfunction createBaseAttestationResponseData(): AttestationResponseData {\n  return {\n    challenge: undefined,\n    webResponse: undefined,\n    androidResponse: undefined,\n    iosResponse: undefined,\n    error: undefined,\n    adblockReporting: undefined,\n  };\n}\n\nexport const AttestationResponseData: MessageFns<AttestationResponseData> = {\n  encode(message: AttestationResponseData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.challenge !== undefined) {\n      writer.uint32(10).string(message.challenge);\n    }\n    if (message.webResponse !== undefined) {\n      writer.uint32(18).string(message.webResponse);\n    }\n    if (message.androidResponse !== undefined) {\n      writer.uint32(26).string(message.androidResponse);\n    }\n    if (message.iosResponse !== undefined) {\n      writer.uint32(34).bytes(message.iosResponse);\n    }\n    if (message.error !== undefined) {\n      writer.uint32(40).int32(message.error);\n    }\n    if (message.adblockReporting !== undefined) {\n      AttestationResponseData_AdblockReporting.encode(message.adblockReporting, writer.uint32(50).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): AttestationResponseData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseAttestationResponseData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.challenge = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.webResponse = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.androidResponse = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.iosResponse = reader.bytes();\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.error = reader.int32();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.adblockReporting = AttestationResponseData_AdblockReporting.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseAttestationResponseData_AdblockReporting(): AttestationResponseData_AdblockReporting {\n  return { reportingStatus: undefined, broadSpectrumDetectionResult: undefined };\n}\n\nexport const AttestationResponseData_AdblockReporting: MessageFns<AttestationResponseData_AdblockReporting> = {\n  encode(message: AttestationResponseData_AdblockReporting, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.reportingStatus !== undefined) {\n      writer.uint32(8).uint64(message.reportingStatus);\n    }\n    if (message.broadSpectrumDetectionResult !== undefined) {\n      writer.uint32(16).uint64(message.broadSpectrumDetectionResult);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): AttestationResponseData_AdblockReporting {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseAttestationResponseData_AdblockReporting();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.reportingStatus = longToNumber(reader.uint64());\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.broadSpectrumDetectionResult = longToNumber(reader.uint64());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/request_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { KeyValuePair } from \"../../../misc/common.js\";\nimport { AttestationResponseData } from \"./attestation_response_data.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface RequestInfo {\n  thirdPartyDigest?: string | undefined;\n  useSsl?: boolean | undefined;\n  returnErrorDetail?:\n    | boolean\n    | undefined;\n  /** \"If-None-Match\" HTTP header? */\n  ifNoneMatch?: string | undefined;\n  returnLogEntry?: boolean | undefined;\n  isPrefetch?: boolean | undefined;\n  internalExperimentFlags: KeyValuePair[];\n  returnDebugData?: boolean | undefined;\n  innertubez?: string | undefined;\n  traceProto?: boolean | undefined;\n  returnLogEntryJson?: boolean | undefined;\n  sherlogUsername?:\n    | string\n    | undefined;\n  /** repeated ConsistencyTokenJar consistency_token_jars = 26; */\n  reauthRequestInfo?: RequestInfo_ReauthRequestInfo | undefined;\n  sessionInfo?: RequestInfo_SessionInfo | undefined;\n  returnLogEntryProto?:\n    | boolean\n    | undefined;\n  /** External pre-request context as a string */\n  externalPrequestContext?:\n    | string\n    | undefined;\n  /**\n   * repeated InnerTubeTokenJar innertube_token_jar = 33;\n   * Would a botguard/droidguard response here allow playback?\n   */\n  attestationResponseData?: AttestationResponseData | undefined;\n  eats?: Uint8Array | undefined;\n  requestQos?: RequestInfo_RequestQoS | undefined;\n}\n\nexport enum RequestInfo_Criticality {\n  CRITICALITY_UNSPECIFIED = 0,\n  CRITICALITY_CRITICAL = 1,\n  CRITICALITY_NON_CRITICAL = 2,\n  UNRECOGNIZED = -1,\n}\n\n/** Quality of Service? */\nexport interface RequestInfo_RequestQoS {\n  criticality?: RequestInfo_Criticality | undefined;\n}\n\nexport interface RequestInfo_SessionInfo {\n  token?: string | undefined;\n}\n\nexport interface RequestInfo_ReauthRequestInfo {\n  encodedReauthProofToken?: string | undefined;\n}\n\nfunction createBaseRequestInfo(): RequestInfo {\n  return {\n    thirdPartyDigest: undefined,\n    useSsl: undefined,\n    returnErrorDetail: undefined,\n    ifNoneMatch: undefined,\n    returnLogEntry: undefined,\n    isPrefetch: undefined,\n    internalExperimentFlags: [],\n    returnDebugData: undefined,\n    innertubez: undefined,\n    traceProto: undefined,\n    returnLogEntryJson: undefined,\n    sherlogUsername: undefined,\n    reauthRequestInfo: undefined,\n    sessionInfo: undefined,\n    returnLogEntryProto: undefined,\n    externalPrequestContext: undefined,\n    attestationResponseData: undefined,\n    eats: undefined,\n    requestQos: undefined,\n  };\n}\n\nexport const RequestInfo: MessageFns<RequestInfo> = {\n  encode(message: RequestInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.thirdPartyDigest !== undefined) {\n      writer.uint32(50).string(message.thirdPartyDigest);\n    }\n    if (message.useSsl !== undefined) {\n      writer.uint32(56).bool(message.useSsl);\n    }\n    if (message.returnErrorDetail !== undefined) {\n      writer.uint32(72).bool(message.returnErrorDetail);\n    }\n    if (message.ifNoneMatch !== undefined) {\n      writer.uint32(98).string(message.ifNoneMatch);\n    }\n    if (message.returnLogEntry !== undefined) {\n      writer.uint32(104).bool(message.returnLogEntry);\n    }\n    if (message.isPrefetch !== undefined) {\n      writer.uint32(112).bool(message.isPrefetch);\n    }\n    for (const v of message.internalExperimentFlags) {\n      KeyValuePair.encode(v!, writer.uint32(122).fork()).join();\n    }\n    if (message.returnDebugData !== undefined) {\n      writer.uint32(128).bool(message.returnDebugData);\n    }\n    if (message.innertubez !== undefined) {\n      writer.uint32(146).string(message.innertubez);\n    }\n    if (message.traceProto !== undefined) {\n      writer.uint32(184).bool(message.traceProto);\n    }\n    if (message.returnLogEntryJson !== undefined) {\n      writer.uint32(192).bool(message.returnLogEntryJson);\n    }\n    if (message.sherlogUsername !== undefined) {\n      writer.uint32(202).string(message.sherlogUsername);\n    }\n    if (message.reauthRequestInfo !== undefined) {\n      RequestInfo_ReauthRequestInfo.encode(message.reauthRequestInfo, writer.uint32(234).fork()).join();\n    }\n    if (message.sessionInfo !== undefined) {\n      RequestInfo_SessionInfo.encode(message.sessionInfo, writer.uint32(242).fork()).join();\n    }\n    if (message.returnLogEntryProto !== undefined) {\n      writer.uint32(248).bool(message.returnLogEntryProto);\n    }\n    if (message.externalPrequestContext !== undefined) {\n      writer.uint32(258).string(message.externalPrequestContext);\n    }\n    if (message.attestationResponseData !== undefined) {\n      AttestationResponseData.encode(message.attestationResponseData, writer.uint32(274).fork()).join();\n    }\n    if (message.eats !== undefined) {\n      writer.uint32(282).bytes(message.eats);\n    }\n    if (message.requestQos !== undefined) {\n      RequestInfo_RequestQoS.encode(message.requestQos, writer.uint32(290).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.thirdPartyDigest = reader.string();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.useSsl = reader.bool();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.returnErrorDetail = reader.bool();\n          continue;\n        case 12:\n          if (tag !== 98) {\n            break;\n          }\n\n          message.ifNoneMatch = reader.string();\n          continue;\n        case 13:\n          if (tag !== 104) {\n            break;\n          }\n\n          message.returnLogEntry = reader.bool();\n          continue;\n        case 14:\n          if (tag !== 112) {\n            break;\n          }\n\n          message.isPrefetch = reader.bool();\n          continue;\n        case 15:\n          if (tag !== 122) {\n            break;\n          }\n\n          message.internalExperimentFlags.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        case 16:\n          if (tag !== 128) {\n            break;\n          }\n\n          message.returnDebugData = reader.bool();\n          continue;\n        case 18:\n          if (tag !== 146) {\n            break;\n          }\n\n          message.innertubez = reader.string();\n          continue;\n        case 23:\n          if (tag !== 184) {\n            break;\n          }\n\n          message.traceProto = reader.bool();\n          continue;\n        case 24:\n          if (tag !== 192) {\n            break;\n          }\n\n          message.returnLogEntryJson = reader.bool();\n          continue;\n        case 25:\n          if (tag !== 202) {\n            break;\n          }\n\n          message.sherlogUsername = reader.string();\n          continue;\n        case 29:\n          if (tag !== 234) {\n            break;\n          }\n\n          message.reauthRequestInfo = RequestInfo_ReauthRequestInfo.decode(reader, reader.uint32());\n          continue;\n        case 30:\n          if (tag !== 242) {\n            break;\n          }\n\n          message.sessionInfo = RequestInfo_SessionInfo.decode(reader, reader.uint32());\n          continue;\n        case 31:\n          if (tag !== 248) {\n            break;\n          }\n\n          message.returnLogEntryProto = reader.bool();\n          continue;\n        case 32:\n          if (tag !== 258) {\n            break;\n          }\n\n          message.externalPrequestContext = reader.string();\n          continue;\n        case 34:\n          if (tag !== 274) {\n            break;\n          }\n\n          message.attestationResponseData = AttestationResponseData.decode(reader, reader.uint32());\n          continue;\n        case 35:\n          if (tag !== 282) {\n            break;\n          }\n\n          message.eats = reader.bytes();\n          continue;\n        case 36:\n          if (tag !== 290) {\n            break;\n          }\n\n          message.requestQos = RequestInfo_RequestQoS.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_RequestQoS(): RequestInfo_RequestQoS {\n  return { criticality: undefined };\n}\n\nexport const RequestInfo_RequestQoS: MessageFns<RequestInfo_RequestQoS> = {\n  encode(message: RequestInfo_RequestQoS, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.criticality !== undefined) {\n      writer.uint32(8).int32(message.criticality);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_RequestQoS {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_RequestQoS();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.criticality = reader.int32() as any;\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_SessionInfo(): RequestInfo_SessionInfo {\n  return { token: undefined };\n}\n\nexport const RequestInfo_SessionInfo: MessageFns<RequestInfo_SessionInfo> = {\n  encode(message: RequestInfo_SessionInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.token !== undefined) {\n      writer.uint32(10).string(message.token);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_SessionInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_SessionInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.token = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseRequestInfo_ReauthRequestInfo(): RequestInfo_ReauthRequestInfo {\n  return { encodedReauthProofToken: undefined };\n}\n\nexport const RequestInfo_ReauthRequestInfo: MessageFns<RequestInfo_ReauthRequestInfo> = {\n  encode(message: RequestInfo_ReauthRequestInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.encodedReauthProofToken !== undefined) {\n      writer.uint32(10).string(message.encodedReauthProofToken);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): RequestInfo_ReauthRequestInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseRequestInfo_ReauthRequestInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.encodedReauthProofToken = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/third_party_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface ThirdPartyInfo {\n  developerKey?: string | undefined;\n  appName?: string | undefined;\n  appPublisher?: string | undefined;\n  embedUrl?: string | undefined;\n  appVersion?: string | undefined;\n  embeddedPlayerContext?: ThirdPartyInfo_EmbeddedPlayerContext | undefined;\n}\n\nexport interface ThirdPartyInfo_EmbeddedPlayerContext {\n  ancestorOrigins?: string | undefined;\n  embeddedPlayerEncryptedContext?: string | undefined;\n  ancestorOriginsSupported?: boolean | undefined;\n}\n\nfunction createBaseThirdPartyInfo(): ThirdPartyInfo {\n  return {\n    developerKey: undefined,\n    appName: undefined,\n    appPublisher: undefined,\n    embedUrl: undefined,\n    appVersion: undefined,\n    embeddedPlayerContext: undefined,\n  };\n}\n\nexport const ThirdPartyInfo: MessageFns<ThirdPartyInfo> = {\n  encode(message: ThirdPartyInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.developerKey !== undefined) {\n      writer.uint32(10).string(message.developerKey);\n    }\n    if (message.appName !== undefined) {\n      writer.uint32(18).string(message.appName);\n    }\n    if (message.appPublisher !== undefined) {\n      writer.uint32(26).string(message.appPublisher);\n    }\n    if (message.embedUrl !== undefined) {\n      writer.uint32(34).string(message.embedUrl);\n    }\n    if (message.appVersion !== undefined) {\n      writer.uint32(50).string(message.appVersion);\n    }\n    if (message.embeddedPlayerContext !== undefined) {\n      ThirdPartyInfo_EmbeddedPlayerContext.encode(message.embeddedPlayerContext, writer.uint32(58).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ThirdPartyInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseThirdPartyInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.developerKey = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.appName = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.appPublisher = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.embedUrl = reader.string();\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.appVersion = reader.string();\n          continue;\n        case 7:\n          if (tag !== 58) {\n            break;\n          }\n\n          message.embeddedPlayerContext = ThirdPartyInfo_EmbeddedPlayerContext.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseThirdPartyInfo_EmbeddedPlayerContext(): ThirdPartyInfo_EmbeddedPlayerContext {\n  return { ancestorOrigins: undefined, embeddedPlayerEncryptedContext: undefined, ancestorOriginsSupported: undefined };\n}\n\nexport const ThirdPartyInfo_EmbeddedPlayerContext: MessageFns<ThirdPartyInfo_EmbeddedPlayerContext> = {\n  encode(message: ThirdPartyInfo_EmbeddedPlayerContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.ancestorOrigins !== undefined) {\n      writer.uint32(10).string(message.ancestorOrigins);\n    }\n    if (message.embeddedPlayerEncryptedContext !== undefined) {\n      writer.uint32(18).string(message.embeddedPlayerEncryptedContext);\n    }\n    if (message.ancestorOriginsSupported !== undefined) {\n      writer.uint32(24).bool(message.ancestorOriginsSupported);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): ThirdPartyInfo_EmbeddedPlayerContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseThirdPartyInfo_EmbeddedPlayerContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.ancestorOrigins = reader.string();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.embeddedPlayerEncryptedContext = reader.string();\n          continue;\n        case 3:\n          if (tag !== 24) {\n            break;\n          }\n\n          message.ancestorOriginsSupported = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/user_info.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface UserInfo {\n  onBehalfOfUser?: string | undefined;\n  enableSafetyMode?: boolean | undefined;\n  credentialTransferTokens: UserInfo_CredentialTransferToken[];\n  delegatePurchases?: UserInfo_DelegatePurchases | undefined;\n  kidsParent?: UserInfo_KidsParent | undefined;\n  isIncognito?: boolean | undefined;\n  lockedSafetyMode?: boolean | undefined;\n  delegationContext?: UserInfo_DelegationContext | undefined;\n  serializedDelegationContext?: string | undefined;\n}\n\nexport interface UserInfo_KidsParent {\n}\n\nexport interface UserInfo_DelegatePurchases {\n}\n\nexport interface UserInfo_DelegationContext {\n}\n\nexport interface UserInfo_CredentialTransferToken {\n}\n\nfunction createBaseUserInfo(): UserInfo {\n  return {\n    onBehalfOfUser: undefined,\n    enableSafetyMode: undefined,\n    credentialTransferTokens: [],\n    delegatePurchases: undefined,\n    kidsParent: undefined,\n    isIncognito: undefined,\n    lockedSafetyMode: undefined,\n    delegationContext: undefined,\n    serializedDelegationContext: undefined,\n  };\n}\n\nexport const UserInfo: MessageFns<UserInfo> = {\n  encode(message: UserInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.onBehalfOfUser !== undefined) {\n      writer.uint32(26).string(message.onBehalfOfUser);\n    }\n    if (message.enableSafetyMode !== undefined) {\n      writer.uint32(56).bool(message.enableSafetyMode);\n    }\n    for (const v of message.credentialTransferTokens) {\n      UserInfo_CredentialTransferToken.encode(v!, writer.uint32(98).fork()).join();\n    }\n    if (message.delegatePurchases !== undefined) {\n      UserInfo_DelegatePurchases.encode(message.delegatePurchases, writer.uint32(106).fork()).join();\n    }\n    if (message.kidsParent !== undefined) {\n      UserInfo_KidsParent.encode(message.kidsParent, writer.uint32(114).fork()).join();\n    }\n    if (message.isIncognito !== undefined) {\n      writer.uint32(120).bool(message.isIncognito);\n    }\n    if (message.lockedSafetyMode !== undefined) {\n      writer.uint32(128).bool(message.lockedSafetyMode);\n    }\n    if (message.delegationContext !== undefined) {\n      UserInfo_DelegationContext.encode(message.delegationContext, writer.uint32(138).fork()).join();\n    }\n    if (message.serializedDelegationContext !== undefined) {\n      writer.uint32(146).string(message.serializedDelegationContext);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.onBehalfOfUser = reader.string();\n          continue;\n        case 7:\n          if (tag !== 56) {\n            break;\n          }\n\n          message.enableSafetyMode = reader.bool();\n          continue;\n        case 12:\n          if (tag !== 98) {\n            break;\n          }\n\n          message.credentialTransferTokens.push(UserInfo_CredentialTransferToken.decode(reader, reader.uint32()));\n          continue;\n        case 13:\n          if (tag !== 106) {\n            break;\n          }\n\n          message.delegatePurchases = UserInfo_DelegatePurchases.decode(reader, reader.uint32());\n          continue;\n        case 14:\n          if (tag !== 114) {\n            break;\n          }\n\n          message.kidsParent = UserInfo_KidsParent.decode(reader, reader.uint32());\n          continue;\n        case 15:\n          if (tag !== 120) {\n            break;\n          }\n\n          message.isIncognito = reader.bool();\n          continue;\n        case 16:\n          if (tag !== 128) {\n            break;\n          }\n\n          message.lockedSafetyMode = reader.bool();\n          continue;\n        case 17:\n          if (tag !== 138) {\n            break;\n          }\n\n          message.delegationContext = UserInfo_DelegationContext.decode(reader, reader.uint32());\n          continue;\n        case 18:\n          if (tag !== 146) {\n            break;\n          }\n\n          message.serializedDelegationContext = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_KidsParent(): UserInfo_KidsParent {\n  return {};\n}\n\nexport const UserInfo_KidsParent: MessageFns<UserInfo_KidsParent> = {\n  encode(_: UserInfo_KidsParent, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_KidsParent {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_KidsParent();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_DelegatePurchases(): UserInfo_DelegatePurchases {\n  return {};\n}\n\nexport const UserInfo_DelegatePurchases: MessageFns<UserInfo_DelegatePurchases> = {\n  encode(_: UserInfo_DelegatePurchases, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_DelegatePurchases {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_DelegatePurchases();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_DelegationContext(): UserInfo_DelegationContext {\n  return {};\n}\n\nexport const UserInfo_DelegationContext: MessageFns<UserInfo_DelegationContext> = {\n  encode(_: UserInfo_DelegationContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_DelegationContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_DelegationContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseUserInfo_CredentialTransferToken(): UserInfo_CredentialTransferToken {\n  return {};\n}\n\nexport const UserInfo_CredentialTransferToken: MessageFns<UserInfo_CredentialTransferToken> = {\n  encode(_: UserInfo_CredentialTransferToken, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): UserInfo_CredentialTransferToken {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseUserInfo_CredentialTransferToken();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/innertube_context.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { KeyValuePair } from \"../../../misc/common.js\";\nimport { CapabilityInfo } from \"./capability_info.js\";\nimport { ClientInfo } from \"./client_info.js\";\nimport { RequestInfo } from \"./request_info.js\";\nimport { ThirdPartyInfo } from \"./third_party_info.js\";\nimport { UserInfo } from \"./user_info.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface InnerTubeContext {\n  client?: ClientInfo | undefined;\n  user?: UserInfo | undefined;\n  capabilities?: CapabilityInfo | undefined;\n  request?: RequestInfo | undefined;\n  clickTracking?: InnerTubeContext_ClickTrackingInfo | undefined;\n  thirdParty?: ThirdPartyInfo | undefined;\n  remoteClient?: ClientInfo | undefined;\n  adSignalsInfo?: InnerTubeContext_AdSignalsInfo | undefined;\n  experimentalData?: InnerTubeContext_ExperimentalData | undefined;\n  clientScreenNonce?: string | undefined;\n  activePlayers: InnerTubeContext_ActivePlayerInfo[];\n}\n\nexport interface InnerTubeContext_ExperimentalData {\n  params: KeyValuePair[];\n}\n\nexport interface InnerTubeContext_ActivePlayerInfo {\n  playerContextParams?: Uint8Array | undefined;\n}\n\nexport interface InnerTubeContext_ClickTrackingInfo {\n  clickTrackingParams?: Uint8Array | undefined;\n}\n\nexport interface InnerTubeContext_AdSignalsInfo {\n  params: KeyValuePair[];\n  bid?: string | undefined;\n  mutsuId?: string | undefined;\n  consentBumpState?: string | undefined;\n  advertisingId?: string | undefined;\n  limitAdTracking?: boolean | undefined;\n  attributionOsSupportedVersion?: string | undefined;\n}\n\nfunction createBaseInnerTubeContext(): InnerTubeContext {\n  return {\n    client: undefined,\n    user: undefined,\n    capabilities: undefined,\n    request: undefined,\n    clickTracking: undefined,\n    thirdParty: undefined,\n    remoteClient: undefined,\n    adSignalsInfo: undefined,\n    experimentalData: undefined,\n    clientScreenNonce: undefined,\n    activePlayers: [],\n  };\n}\n\nexport const InnerTubeContext: MessageFns<InnerTubeContext> = {\n  encode(message: InnerTubeContext, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.client !== undefined) {\n      ClientInfo.encode(message.client, writer.uint32(10).fork()).join();\n    }\n    if (message.user !== undefined) {\n      UserInfo.encode(message.user, writer.uint32(26).fork()).join();\n    }\n    if (message.capabilities !== undefined) {\n      CapabilityInfo.encode(message.capabilities, writer.uint32(34).fork()).join();\n    }\n    if (message.request !== undefined) {\n      RequestInfo.encode(message.request, writer.uint32(42).fork()).join();\n    }\n    if (message.clickTracking !== undefined) {\n      InnerTubeContext_ClickTrackingInfo.encode(message.clickTracking, writer.uint32(50).fork()).join();\n    }\n    if (message.thirdParty !== undefined) {\n      ThirdPartyInfo.encode(message.thirdParty, writer.uint32(58).fork()).join();\n    }\n    if (message.remoteClient !== undefined) {\n      ClientInfo.encode(message.remoteClient, writer.uint32(66).fork()).join();\n    }\n    if (message.adSignalsInfo !== undefined) {\n      InnerTubeContext_AdSignalsInfo.encode(message.adSignalsInfo, writer.uint32(74).fork()).join();\n    }\n    if (message.experimentalData !== undefined) {\n      InnerTubeContext_ExperimentalData.encode(message.experimentalData, writer.uint32(82).fork()).join();\n    }\n    if (message.clientScreenNonce !== undefined) {\n      writer.uint32(90).string(message.clientScreenNonce);\n    }\n    for (const v of message.activePlayers) {\n      InnerTubeContext_ActivePlayerInfo.encode(v!, writer.uint32(98).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.client = ClientInfo.decode(reader, reader.uint32());\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.user = UserInfo.decode(reader, reader.uint32());\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.capabilities = CapabilityInfo.decode(reader, reader.uint32());\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.request = RequestInfo.decode(reader, reader.uint32());\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.clickTracking = InnerTubeContext_ClickTrackingInfo.decode(reader, reader.uint32());\n          continue;\n        case 7:\n          if (tag !== 58) {\n            break;\n          }\n\n          message.thirdParty = ThirdPartyInfo.decode(reader, reader.uint32());\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.remoteClient = ClientInfo.decode(reader, reader.uint32());\n          continue;\n        case 9:\n          if (tag !== 74) {\n            break;\n          }\n\n          message.adSignalsInfo = InnerTubeContext_AdSignalsInfo.decode(reader, reader.uint32());\n          continue;\n        case 10:\n          if (tag !== 82) {\n            break;\n          }\n\n          message.experimentalData = InnerTubeContext_ExperimentalData.decode(reader, reader.uint32());\n          continue;\n        case 11:\n          if (tag !== 90) {\n            break;\n          }\n\n          message.clientScreenNonce = reader.string();\n          continue;\n        case 12:\n          if (tag !== 98) {\n            break;\n          }\n\n          message.activePlayers.push(InnerTubeContext_ActivePlayerInfo.decode(reader, reader.uint32()));\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ExperimentalData(): InnerTubeContext_ExperimentalData {\n  return { params: [] };\n}\n\nexport const InnerTubeContext_ExperimentalData: MessageFns<InnerTubeContext_ExperimentalData> = {\n  encode(message: InnerTubeContext_ExperimentalData, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.params) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ExperimentalData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ExperimentalData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ActivePlayerInfo(): InnerTubeContext_ActivePlayerInfo {\n  return { playerContextParams: undefined };\n}\n\nexport const InnerTubeContext_ActivePlayerInfo: MessageFns<InnerTubeContext_ActivePlayerInfo> = {\n  encode(message: InnerTubeContext_ActivePlayerInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.playerContextParams !== undefined) {\n      writer.uint32(10).bytes(message.playerContextParams);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ActivePlayerInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ActivePlayerInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.playerContextParams = reader.bytes();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_ClickTrackingInfo(): InnerTubeContext_ClickTrackingInfo {\n  return { clickTrackingParams: undefined };\n}\n\nexport const InnerTubeContext_ClickTrackingInfo: MessageFns<InnerTubeContext_ClickTrackingInfo> = {\n  encode(message: InnerTubeContext_ClickTrackingInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.clickTrackingParams !== undefined) {\n      writer.uint32(18).bytes(message.clickTrackingParams);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_ClickTrackingInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_ClickTrackingInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.clickTrackingParams = reader.bytes();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseInnerTubeContext_AdSignalsInfo(): InnerTubeContext_AdSignalsInfo {\n  return {\n    params: [],\n    bid: undefined,\n    mutsuId: undefined,\n    consentBumpState: undefined,\n    advertisingId: undefined,\n    limitAdTracking: undefined,\n    attributionOsSupportedVersion: undefined,\n  };\n}\n\nexport const InnerTubeContext_AdSignalsInfo: MessageFns<InnerTubeContext_AdSignalsInfo> = {\n  encode(message: InnerTubeContext_AdSignalsInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.params) {\n      KeyValuePair.encode(v!, writer.uint32(10).fork()).join();\n    }\n    if (message.bid !== undefined) {\n      writer.uint32(18).string(message.bid);\n    }\n    if (message.mutsuId !== undefined) {\n      writer.uint32(26).string(message.mutsuId);\n    }\n    if (message.consentBumpState !== undefined) {\n      writer.uint32(34).string(message.consentBumpState);\n    }\n    if (message.advertisingId !== undefined) {\n      writer.uint32(58).string(message.advertisingId);\n    }\n    if (message.limitAdTracking !== undefined) {\n      writer.uint32(72).bool(message.limitAdTracking);\n    }\n    if (message.attributionOsSupportedVersion !== undefined) {\n      writer.uint32(82).string(message.attributionOsSupportedVersion);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): InnerTubeContext_AdSignalsInfo {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseInnerTubeContext_AdSignalsInfo();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.params.push(KeyValuePair.decode(reader, reader.uint32()));\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.bid = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.mutsuId = reader.string();\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.consentBumpState = reader.string();\n          continue;\n        case 7:\n          if (tag !== 58) {\n            break;\n          }\n\n          message.advertisingId = reader.string();\n          continue;\n        case 9:\n          if (tag !== 72) {\n            break;\n          }\n\n          message.limitAdTracking = reader.bool();\n          continue;\n        case 10:\n          if (tag !== 82) {\n            break;\n          }\n\n          message.attributionOsSupportedVersion = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "// Code generated by protoc-gen-ts_proto. DO NOT EDIT.\n// versions:\n//   protoc-gen-ts_proto  v2.2.0\n//   protoc               v5.29.2\n// source: youtube/api/pfiinnertube/metadata_update_request.proto\n\n/* eslint-disable */\nimport { BinaryReader, BinaryWriter } from \"@bufbuild/protobuf/wire\";\nimport { InnerTubeContext } from \"./innertube_context.js\";\n\nexport const protobufPackage = \"youtube.api.pfiinnertube\";\n\nexport interface MetadataUpdateRequest {\n  context?: InnerTubeContext | undefined;\n  encryptedVideoId?: string | undefined;\n  title?: MetadataUpdateRequest_MdeTitleUpdateRequest | undefined;\n  description?: MetadataUpdateRequest_MdeDescriptionUpdateRequest | undefined;\n  privacy?: MetadataUpdateRequest_MdePrivacyUpdateRequest | undefined;\n  tags?: MetadataUpdateRequest_MdeTagsUpdateRequest | undefined;\n  category?: MetadataUpdateRequest_MdeCategoryUpdateRequest | undefined;\n  license?: MetadataUpdateRequest_MdeLicenseUpdateRequest | undefined;\n  ageRestriction?: MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest | undefined;\n  videoStill?: MetadataUpdateRequest_MdeVideoStillRequestParams | undefined;\n  madeForKids?: MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams | undefined;\n  racy?: MetadataUpdateRequest_MdeRacyRequestParams | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeTitleUpdateRequest {\n  newTitle?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n  newDescription?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdePrivacyUpdateRequest {\n  newPrivacy?: number | undefined;\n  clearPrivacyDraft?: boolean | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeTagsUpdateRequest {\n  newTags: string[];\n}\n\nexport interface MetadataUpdateRequest_MdeCategoryUpdateRequest {\n  newCategoryId?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeLicenseUpdateRequest {\n  newLicenseId?: string | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n  operation?: number | undefined;\n  newMfk?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeRacyRequestParams {\n  operation?: number | undefined;\n  newRacy?: number | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n  newIsAgeRestricted?: boolean | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams {\n  operation?: number | undefined;\n  newStillId?: number | undefined;\n  image?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n  testImage?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n  experimentImage: MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData[];\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n  image?: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage | undefined;\n}\n\nexport interface MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n  rawBytes?: Uint8Array | undefined;\n  dataUri?: string | undefined;\n  frameTimestampUs?: number | undefined;\n  isVertical?: boolean | undefined;\n}\n\nfunction createBaseMetadataUpdateRequest(): MetadataUpdateRequest {\n  return {\n    context: undefined,\n    encryptedVideoId: undefined,\n    title: undefined,\n    description: undefined,\n    privacy: undefined,\n    tags: undefined,\n    category: undefined,\n    license: undefined,\n    ageRestriction: undefined,\n    videoStill: undefined,\n    madeForKids: undefined,\n    racy: undefined,\n  };\n}\n\nexport const MetadataUpdateRequest: MessageFns<MetadataUpdateRequest> = {\n  encode(message: MetadataUpdateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.context !== undefined) {\n      InnerTubeContext.encode(message.context, writer.uint32(10).fork()).join();\n    }\n    if (message.encryptedVideoId !== undefined) {\n      writer.uint32(18).string(message.encryptedVideoId);\n    }\n    if (message.title !== undefined) {\n      MetadataUpdateRequest_MdeTitleUpdateRequest.encode(message.title, writer.uint32(26).fork()).join();\n    }\n    if (message.description !== undefined) {\n      MetadataUpdateRequest_MdeDescriptionUpdateRequest.encode(message.description, writer.uint32(34).fork()).join();\n    }\n    if (message.privacy !== undefined) {\n      MetadataUpdateRequest_MdePrivacyUpdateRequest.encode(message.privacy, writer.uint32(42).fork()).join();\n    }\n    if (message.tags !== undefined) {\n      MetadataUpdateRequest_MdeTagsUpdateRequest.encode(message.tags, writer.uint32(50).fork()).join();\n    }\n    if (message.category !== undefined) {\n      MetadataUpdateRequest_MdeCategoryUpdateRequest.encode(message.category, writer.uint32(58).fork()).join();\n    }\n    if (message.license !== undefined) {\n      MetadataUpdateRequest_MdeLicenseUpdateRequest.encode(message.license, writer.uint32(66).fork()).join();\n    }\n    if (message.ageRestriction !== undefined) {\n      MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.encode(message.ageRestriction, writer.uint32(90).fork())\n        .join();\n    }\n    if (message.videoStill !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams.encode(message.videoStill, writer.uint32(162).fork()).join();\n    }\n    if (message.madeForKids !== undefined) {\n      MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.encode(message.madeForKids, writer.uint32(546).fork())\n        .join();\n    }\n    if (message.racy !== undefined) {\n      MetadataUpdateRequest_MdeRacyRequestParams.encode(message.racy, writer.uint32(554).fork()).join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.context = InnerTubeContext.decode(reader, reader.uint32());\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.encryptedVideoId = reader.string();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.title = MetadataUpdateRequest_MdeTitleUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.description = MetadataUpdateRequest_MdeDescriptionUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 5:\n          if (tag !== 42) {\n            break;\n          }\n\n          message.privacy = MetadataUpdateRequest_MdePrivacyUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.tags = MetadataUpdateRequest_MdeTagsUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 7:\n          if (tag !== 58) {\n            break;\n          }\n\n          message.category = MetadataUpdateRequest_MdeCategoryUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 8:\n          if (tag !== 66) {\n            break;\n          }\n\n          message.license = MetadataUpdateRequest_MdeLicenseUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 11:\n          if (tag !== 90) {\n            break;\n          }\n\n          message.ageRestriction = MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest.decode(reader, reader.uint32());\n          continue;\n        case 20:\n          if (tag !== 162) {\n            break;\n          }\n\n          message.videoStill = MetadataUpdateRequest_MdeVideoStillRequestParams.decode(reader, reader.uint32());\n          continue;\n        case 68:\n          if (tag !== 546) {\n            break;\n          }\n\n          message.madeForKids = MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams.decode(reader, reader.uint32());\n          continue;\n        case 69:\n          if (tag !== 554) {\n            break;\n          }\n\n          message.racy = MetadataUpdateRequest_MdeRacyRequestParams.decode(reader, reader.uint32());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeTitleUpdateRequest(): MetadataUpdateRequest_MdeTitleUpdateRequest {\n  return { newTitle: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeTitleUpdateRequest: MessageFns<MetadataUpdateRequest_MdeTitleUpdateRequest> = {\n  encode(\n    message: MetadataUpdateRequest_MdeTitleUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newTitle !== undefined) {\n      writer.uint32(10).string(message.newTitle);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeTitleUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeTitleUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newTitle = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest(): MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n  return { newDescription: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeDescriptionUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeDescriptionUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeDescriptionUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newDescription !== undefined) {\n      writer.uint32(10).string(message.newDescription);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeDescriptionUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeDescriptionUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newDescription = reader.string();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest(): MetadataUpdateRequest_MdePrivacyUpdateRequest {\n  return { newPrivacy: undefined, clearPrivacyDraft: undefined };\n}\n\nexport const MetadataUpdateRequest_MdePrivacyUpdateRequest: MessageFns<MetadataUpdateRequest_MdePrivacyUpdateRequest> =\n  {\n    encode(\n      message: MetadataUpdateRequest_MdePrivacyUpdateRequest,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.newPrivacy !== undefined) {\n        writer.uint32(8).int32(message.newPrivacy);\n      }\n      if (message.clearPrivacyDraft !== undefined) {\n        writer.uint32(16).bool(message.clearPrivacyDraft);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdePrivacyUpdateRequest {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      let end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseMetadataUpdateRequest_MdePrivacyUpdateRequest();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1:\n            if (tag !== 8) {\n              break;\n            }\n\n            message.newPrivacy = reader.int32();\n            continue;\n          case 2:\n            if (tag !== 16) {\n              break;\n            }\n\n            message.clearPrivacyDraft = reader.bool();\n            continue;\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseMetadataUpdateRequest_MdeTagsUpdateRequest(): MetadataUpdateRequest_MdeTagsUpdateRequest {\n  return { newTags: [] };\n}\n\nexport const MetadataUpdateRequest_MdeTagsUpdateRequest: MessageFns<MetadataUpdateRequest_MdeTagsUpdateRequest> = {\n  encode(message: MetadataUpdateRequest_MdeTagsUpdateRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    for (const v of message.newTags) {\n      writer.uint32(10).string(v!);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeTagsUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeTagsUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.newTags.push(reader.string());\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest(): MetadataUpdateRequest_MdeCategoryUpdateRequest {\n  return { newCategoryId: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeCategoryUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeCategoryUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeCategoryUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newCategoryId !== undefined) {\n      writer.uint32(8).int32(message.newCategoryId);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeCategoryUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeCategoryUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.newCategoryId = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest(): MetadataUpdateRequest_MdeLicenseUpdateRequest {\n  return { newLicenseId: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeLicenseUpdateRequest: MessageFns<MetadataUpdateRequest_MdeLicenseUpdateRequest> =\n  {\n    encode(\n      message: MetadataUpdateRequest_MdeLicenseUpdateRequest,\n      writer: BinaryWriter = new BinaryWriter(),\n    ): BinaryWriter {\n      if (message.newLicenseId !== undefined) {\n        writer.uint32(10).string(message.newLicenseId);\n      }\n      return writer;\n    },\n\n    decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeLicenseUpdateRequest {\n      const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n      let end = length === undefined ? reader.len : reader.pos + length;\n      const message = createBaseMetadataUpdateRequest_MdeLicenseUpdateRequest();\n      while (reader.pos < end) {\n        const tag = reader.uint32();\n        switch (tag >>> 3) {\n          case 1:\n            if (tag !== 10) {\n              break;\n            }\n\n            message.newLicenseId = reader.string();\n            continue;\n        }\n        if ((tag & 7) === 4 || tag === 0) {\n          break;\n        }\n        reader.skip(tag & 7);\n      }\n      return message;\n    },\n  };\n\nfunction createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams(): MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n  return { operation: undefined, newMfk: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams: MessageFns<\n  MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newMfk !== undefined) {\n      writer.uint32(16).int32(message.newMfk);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeMadeForKidsUpdateRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newMfk = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeRacyRequestParams(): MetadataUpdateRequest_MdeRacyRequestParams {\n  return { operation: undefined, newRacy: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeRacyRequestParams: MessageFns<MetadataUpdateRequest_MdeRacyRequestParams> = {\n  encode(message: MetadataUpdateRequest_MdeRacyRequestParams, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newRacy !== undefined) {\n      writer.uint32(16).int32(message.newRacy);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeRacyRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeRacyRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newRacy = reader.int32();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest(): MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n  return { newIsAgeRestricted: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest: MessageFns<\n  MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.newIsAgeRestricted !== undefined) {\n      writer.uint32(8).bool(message.newIsAgeRestricted);\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeAgeRestrictionUpdateRequest {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeAgeRestrictionUpdateRequest();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.newIsAgeRestricted = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams(): MetadataUpdateRequest_MdeVideoStillRequestParams {\n  return { operation: undefined, newStillId: undefined, image: undefined, testImage: undefined, experimentImage: [] };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.operation !== undefined) {\n      writer.uint32(8).int32(message.operation);\n    }\n    if (message.newStillId !== undefined) {\n      writer.uint32(16).int32(message.newStillId);\n    }\n    if (message.image !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.image,\n        writer.uint32(26).fork(),\n      ).join();\n    }\n    if (message.testImage !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.testImage,\n        writer.uint32(34).fork(),\n      ).join();\n    }\n    for (const v of message.experimentImage) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.encode(v!, writer.uint32(50).fork())\n        .join();\n    }\n    return writer;\n  },\n\n  decode(input: BinaryReader | Uint8Array, length?: number): MetadataUpdateRequest_MdeVideoStillRequestParams {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 8) {\n            break;\n          }\n\n          message.operation = reader.int32();\n          continue;\n        case 2:\n          if (tag !== 16) {\n            break;\n          }\n\n          message.newStillId = reader.int32();\n          continue;\n        case 3:\n          if (tag !== 26) {\n            break;\n          }\n\n          message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        case 4:\n          if (tag !== 34) {\n            break;\n          }\n\n          message.testImage = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n        case 6:\n          if (tag !== 50) {\n            break;\n          }\n\n          message.experimentImage.push(\n            MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData.decode(\n              reader,\n              reader.uint32(),\n            ),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData(): MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n  return { image: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.image !== undefined) {\n      MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.encode(\n        message.image,\n        writer.uint32(10).fork(),\n      ).join();\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): MetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_ThumbnailExperimentImageData();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.image = MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage.decode(\n            reader,\n            reader.uint32(),\n          );\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage(): MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n  return { rawBytes: undefined, dataUri: undefined, frameTimestampUs: undefined, isVertical: undefined };\n}\n\nexport const MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage: MessageFns<\n  MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage\n> = {\n  encode(\n    message: MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage,\n    writer: BinaryWriter = new BinaryWriter(),\n  ): BinaryWriter {\n    if (message.rawBytes !== undefined) {\n      writer.uint32(10).bytes(message.rawBytes);\n    }\n    if (message.dataUri !== undefined) {\n      writer.uint32(18).string(message.dataUri);\n    }\n    if (message.frameTimestampUs !== undefined) {\n      writer.uint32(32).int64(message.frameTimestampUs);\n    }\n    if (message.isVertical !== undefined) {\n      writer.uint32(40).bool(message.isVertical);\n    }\n    return writer;\n  },\n\n  decode(\n    input: BinaryReader | Uint8Array,\n    length?: number,\n  ): MetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage {\n    const reader = input instanceof BinaryReader ? input : new BinaryReader(input);\n    let end = length === undefined ? reader.len : reader.pos + length;\n    const message = createBaseMetadataUpdateRequest_MdeVideoStillRequestParams_CustomThumbnailImage();\n    while (reader.pos < end) {\n      const tag = reader.uint32();\n      switch (tag >>> 3) {\n        case 1:\n          if (tag !== 10) {\n            break;\n          }\n\n          message.rawBytes = reader.bytes();\n          continue;\n        case 2:\n          if (tag !== 18) {\n            break;\n          }\n\n          message.dataUri = reader.string();\n          continue;\n        case 4:\n          if (tag !== 32) {\n            break;\n          }\n\n          message.frameTimestampUs = longToNumber(reader.int64());\n          continue;\n        case 5:\n          if (tag !== 40) {\n            break;\n          }\n\n          message.isVertical = reader.bool();\n          continue;\n      }\n      if ((tag & 7) === 4 || tag === 0) {\n        break;\n      }\n      reader.skip(tag & 7);\n    }\n    return message;\n  },\n};\n\nfunction longToNumber(int64: { toString(): string }): number {\n  const num = globalThis.Number(int64.toString());\n  if (num > globalThis.Number.MAX_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n  }\n  if (num < globalThis.Number.MIN_SAFE_INTEGER) {\n    throw new globalThis.Error(\"Value is smaller than Number.MIN_SAFE_INTEGER\");\n  }\n  return num;\n}\n\nexport interface MessageFns<T> {\n  encode(message: T, writer?: BinaryWriter): BinaryWriter;\n  decode(input: BinaryReader | Uint8Array, length?: number): T;\n}\n", "import { Constants } from '../../utils/index.js';\nimport { InnertubeError, Platform } from '../../utils/Utils.js';\n\nimport type { UpdateVideoMetadataOptions, UploadedVideoMetadataOptions } from '../../types/Misc.js';\nimport type { ApiResponse, Session } from '../index.js';\n\nimport { MetadataUpdateRequest } from '../../../protos/generated/youtube/api/pfiinnertube/metadata_update_request.js';\n\ninterface UploadResult {\n  status: string;\n  scottyResourceId: string;\n}\n\ninterface InitialUploadData {\n  frontend_upload_id: string;\n  upload_id: string;\n  upload_url: string;\n  scotty_resource_id: string;\n  chunk_granularity: string;\n}\n\nexport default class Studio {\n  #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  /**\n   * Updates the metadata of a video.\n   * @example\n   * ```ts\n   * const videoId = 'abcdefg';\n   * const thumbnail = fs.readFileSync('./my_awesome_thumbnail.jpg');\n   * \n   * const response = await yt.studio.updateVideoMetadata(videoId, {\n   *   tags: [ 'astronomy', 'NASA', 'APOD' ],\n   *   title: 'Artemis Mission',\n   *   description: 'A nicely written description...',\n   *   category: 27,\n   *   license: 'creative_commons',\n   *   thumbnail,\n   *   // ...\n   * });\n   * ```\n   */\n  async updateVideoMetadata(video_id: string, metadata: UpdateVideoMetadataOptions): Promise<ApiResponse> {\n    const session = this.#session;\n\n    if (!session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload: MetadataUpdateRequest = {\n      context: {\n        client: {\n          osName: 'Android',\n          clientName: parseInt(Constants.CLIENT_NAME_IDS.ANDROID),\n          clientVersion: Constants.CLIENTS.ANDROID.VERSION,\n          androidSdkVersion: Constants.CLIENTS.ANDROID.SDK_VERSION,\n          visitorData: session.context.client.visitorData,\n          osVersion: '13',\n          acceptLanguage: session.context.client.hl,\n          acceptRegion: session.context.client.gl,\n          deviceMake: 'Google',\n          deviceModel: 'sdk_gphone64_x86_64',\n          screenHeightPoints: 840,\n          screenWidthPoints: 432,\n          configInfo: {\n            appInstallData: session.context.client.configInfo?.appInstallData\n          },\n          timeZone: session.context.client.timeZone,\n          chipset: 'qcom;taro'\n        },\n        activePlayers: []\n      },\n      encryptedVideoId: video_id\n    };\n\n    if (metadata.title)\n      payload.title = { newTitle: metadata.title };\n\n    if (metadata.description)\n      payload.description = { newDescription: metadata.description };\n\n    if (metadata.license)\n      payload.license = { newLicenseId: metadata.license };\n\n    if (metadata.tags)\n      payload.tags = { newTags: metadata.tags };\n\n    if (metadata.thumbnail) {\n      payload.videoStill = {\n        operation: 3,\n        image: {\n          rawBytes: metadata.thumbnail\n        },\n        experimentImage: []\n      };\n    }\n\n    if (Reflect.has(metadata, 'category'))\n      payload.category = { newCategoryId: metadata.category };\n\n    if (Reflect.has(metadata, 'privacy')) {\n      switch (metadata.privacy) {\n        case 'PUBLIC':\n          payload.privacy = { newPrivacy: 1 };\n          break;\n        case 'UNLISTED':\n          payload.privacy = { newPrivacy: 2 };\n          break;\n        case 'PRIVATE':\n          payload.privacy = { newPrivacy: 3 };\n          break;\n        default:\n          throw new Error('Invalid privacy setting');\n      }\n    }\n\n    if (Reflect.has(metadata, 'made_for_kids')) {\n      payload.madeForKids = {\n        operation: 1,\n        newMfk: metadata.made_for_kids ? 1 : 2\n      };\n    }\n\n    if (Reflect.has(metadata, 'age_restricted')) {\n      payload.racy = {\n        operation: 1,\n        newRacy: metadata.age_restricted ? 1 : 2\n      };\n    }\n\n    const writer = MetadataUpdateRequest.encode(payload);\n\n    return await session.actions.execute('/video_manager/metadata_update', {\n      protobuf: true,\n      serialized_data: writer.finish()\n    });\n  }\n\n  /**\n   * Uploads a video to YouTube.\n   * @example\n   * ```ts\n   * const file = fs.readFileSync('./my_awesome_video.mp4');\n   * const response = await yt.studio.upload(file.buffer, { title: 'Wow!' });\n   * ```\n   */\n  async upload(file: BodyInit, metadata: UploadedVideoMetadataOptions = {}): Promise<ApiResponse> {\n    if (!this.#session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const initial_data = await this.#getInitialUploadData();\n    const upload_result = await this.#uploadVideo(initial_data.upload_url, file);\n\n    if (upload_result.status !== 'STATUS_SUCCESS')\n      throw new InnertubeError('Could not process video.');\n\n    return await this.#setVideoMetadata(initial_data, upload_result, metadata);\n  }\n\n  async #getInitialUploadData(): Promise<InitialUploadData> {\n    const frontend_upload_id = `innertube_android:${Platform.shim.uuidv4()}:0:v=3,api=1,cf=3`;\n\n    const payload = {\n      frontendUploadId: frontend_upload_id,\n      deviceDisplayName: 'Pixel 6 Pro',\n      fileId: `goog-edited-video://generated?videoFileUri=content://media/external/video/media/${Platform.shim.uuidv4()}`,\n      mp4MoovAtomRelocationStatus: 'UNSUPPORTED',\n      transcodeResult: 'DISABLED',\n      connectionType: 'WIFI'\n    };\n\n    const response = await this.#session.http.fetch('/upload/youtubei', {\n      baseURL: Constants.URLS.YT_UPLOAD,\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'x-goog-upload-command': 'start',\n        'x-goog-upload-protocol': 'resumable'\n      },\n      body: JSON.stringify(payload)\n    });\n\n    if (!response.ok)\n      throw new InnertubeError('Could not get initial upload data');\n\n    return {\n      frontend_upload_id,\n      upload_id: response.headers.get('x-guploader-uploadid') as string,\n      upload_url: response.headers.get('x-goog-upload-url') as string,\n      scotty_resource_id: response.headers.get('x-goog-upload-header-scotty-resource-id') as string,\n      chunk_granularity: response.headers.get('x-goog-upload-chunk-granularity') as string\n    };\n  }\n\n  async #uploadVideo(upload_url: string, file: BodyInit): Promise<UploadResult> {\n    const response = await this.#session.http.fetch_function(upload_url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n        'x-goog-upload-command': 'upload, finalize',\n        'x-goog-upload-file-name': `file-${Date.now()}`,\n        'x-goog-upload-offset': '0'\n      },\n      body: file\n    });\n\n    if (!response.ok)\n      throw new InnertubeError('Could not upload video');\n\n    return await response.json();\n  }\n\n  async #setVideoMetadata(initial_data: InitialUploadData, upload_result: UploadResult, metadata: UploadedVideoMetadataOptions) {\n    return await this.#session.actions.execute('/upload/createvideo', {\n      resourceId: {\n        scottyResourceId: {\n          id: upload_result.scottyResourceId\n        }\n      },\n      frontendUploadId: initial_data.frontend_upload_id,\n      initialMetadata: {\n        title: {\n          newTitle: metadata.title\n        },\n        description: {\n          newDescription: metadata.description,\n          shouldSegment: true\n        },\n        privacy: {\n          newPrivacy: metadata.privacy || 'PRIVATE'\n        },\n        draftState: {\n          isDraft: !!metadata.is_draft\n        }\n      }\n    });\n  }\n}", "export { default as AccountManager } from './AccountManager.js';\nexport { default as PlaylistManager } from './PlaylistManager.js';\nexport { default as InteractionManager } from './InteractionManager.js';", "import type { Actions } from '../index.js';\n\nimport AccountInfo from '../../parser/youtube/AccountInfo.js';\nimport Settings from '../../parser/youtube/Settings.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nimport { InnertubeError } from '../../utils/Utils.js';\nimport { AccountItem } from '../../parser/nodes.js';\n\nexport default class AccountManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Retrieves the list of channels belonging to the signed-in account. Only useful when signed in through cookie. If signed in through OAuth, you will get the active channel only.\n   */\n  async getInfo(all: true): Promise<AccountItem[]>;\n  /**\n   * Retrieves the active channel info for the signed-in account. Throws error if `on_behalf_of_user` was used to create the Innertube instance; use `getInfo(true)` instead.\n   */\n  async getInfo(all?: false): Promise<AccountInfo>;\n  async getInfo(all = false): Promise<AccountInfo | AccountItem[]> {\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    if (!all && !!this.#actions.session.context.user.onBehalfOfUser) {\n      throw new InnertubeError('Boolean argument must be true when \"on_behalf_of_user\" is specified.');\n    }\n\n    if (all) {\n      const get_accounts_list_endpoint = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {\n        requestType: 'ACCOUNTS_LIST_REQUEST_TYPE_CHANNEL_SWITCHER',\n        callCircumstance: 'SWITCHING_USERS_FULL'\n      } });\n      const response = await get_accounts_list_endpoint.call(this.#actions, { client: 'WEB', parse: true });\n      return response.actions_memo?.getType(AccountItem) || [];\n    }\n\n    const get_accounts_list_endpoint = new NavigationEndpoint({ getAccountsListInnertubeEndpoint: {} });\n    const response = await get_accounts_list_endpoint.call(this.#actions, { client: 'TV' });\n    return new AccountInfo(response);\n  }\n\n  /**\n   * Gets YouTube settings.\n   */\n  async getSettings(): Promise<Settings> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'SPaccount_overview' } });\n    const response = await browse_endpoint.call(this.#actions);\n    return new Settings(this.#actions, response);\n  }\n}", "import { InnertubeError, throwIfMissing } from '../../utils/Utils.js';\nimport Playlist from '../../parser/youtube/Playlist.js';\n\nimport type { Actions } from '../index.js';\nimport type { Feed } from '../mixins/index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nexport default class PlaylistManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Creates a playlist.\n   * @param title - The title of the playlist.\n   * @param video_ids - An array of video IDs to add to the playlist.\n   */\n  async create(title: string, video_ids: string[]): Promise<{ success: boolean; status_code: number; playlist_id?: string; data: any }> {\n    throwIfMissing({ title, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const create_playlist_endpoint = new NavigationEndpoint({\n      createPlaylistServiceEndpoint: {\n        title,\n        videoIds: video_ids\n      }\n    });\n\n    const response = await create_playlist_endpoint.call(this.#actions);\n\n    return {\n      success: response.success,\n      status_code: response.status_code,\n      playlist_id: response.data.playlistId,\n      data: response.data\n    };\n  }\n\n  /**\n   * Deletes a given playlist.\n   * @param playlist_id - The playlist ID.\n   */\n  async delete(playlist_id: string): Promise<{ playlist_id: string; success: boolean; status_code: number; data: any }> {\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const delete_playlist_endpoint = new NavigationEndpoint({\n      deletePlaylistServiceEndpoint: {\n        sourcePlaylistId: playlist_id\n      }\n    });\n\n    const response = await delete_playlist_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      success: response.success,\n      status_code: response.status_code,\n      data: response.data\n    };\n  }\n  \n  /**\n   * Adds a given playlist to the library of a user.\n   * @param playlist_id - The playlist ID.\n   */\n  async addToLibrary(playlist_id: string){\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n    \n    const like_playlist_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'LIKE',\n        target: playlist_id\n      }\n    });\n\n    return await like_playlist_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Remove a given playlist to the library of a user.\n   * @param playlist_id - The playlist ID.\n   */\n  async removeFromLibrary(playlist_id: string){\n    throwIfMissing({ playlist_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const remove_like_playlist_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'INDIFFERENT',\n        target: playlist_id\n      }\n    });\n\n    return await remove_like_playlist_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Adds videos to a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param video_ids - An array of video IDs to add to the playlist.\n   */\n  async addVideos(playlist_id: string, video_ids: string[]): Promise<{ playlist_id: string; action_result: any }> {\n    throwIfMissing({ playlist_id, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist_edit_endpoint = new NavigationEndpoint({\n      playlistEditEndpoint: {\n        playlistId: playlist_id,\n        actions: video_ids.map((id) => ({\n          action: 'ACTION_ADD_VIDEO',\n          addedVideoId: id\n        }))\n      }\n    });\n\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n\n  /**\n   * Removes videos from a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param video_ids - An array of video IDs to remove from the playlist.\n   * @param use_set_video_ids - Option to remove videos using set video IDs.\n   */\n  async removeVideos(playlist_id: string, video_ids: string[], use_set_video_ids = false): Promise<{ playlist_id: string; action_result: any }> {\n    throwIfMissing({ playlist_id, video_ids });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist = await this.#getPlaylist(playlist_id);\n\n    if (!playlist.info.is_editable)\n      throw new InnertubeError('This playlist cannot be edited.', playlist_id);\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    const getSetVideoIds = async (pl: Feed): Promise<void> => {\n      const key_id = use_set_video_ids ? 'set_video_id' : 'id';\n      const videos = pl.videos.filter((video) => video_ids.includes(video.key(key_id).string()));\n\n      videos.forEach((video) =>\n        payload.actions.push({\n          action: 'ACTION_REMOVE_VIDEO',\n          setVideoId: video.key('set_video_id').string()\n        })\n      );\n\n      if (payload.actions.length < video_ids.length) {\n        const next = await pl.getContinuation();\n        return getSetVideoIds(next);\n      }\n    };\n\n    await getSetVideoIds(playlist);\n\n    if (!payload.actions.length)\n      throw new InnertubeError('Given video ids were not found in this playlist.', video_ids);\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n\n  /**\n   * Moves a video to a new position within a given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param moved_video_id - The video ID to move.\n   * @param predecessor_video_id - The video ID to move the moved video before.\n   */\n  async moveVideo(playlist_id: string, moved_video_id: string, predecessor_video_id: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, moved_video_id, predecessor_video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const playlist = await this.#getPlaylist(playlist_id);\n\n    if (!playlist.info.is_editable)\n      throw new InnertubeError('This playlist cannot be edited.', playlist_id);\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    let set_video_id_0: string | undefined, set_video_id_1: string | undefined;\n\n    const getSetVideoIds = async (pl: Feed): Promise<void> => {\n      const video_0 = pl.videos.find((video) => moved_video_id === video.key('id').string());\n      const video_1 = pl.videos.find((video) => predecessor_video_id === video.key('id').string());\n\n      set_video_id_0 = set_video_id_0 || video_0?.key('set_video_id').string();\n      set_video_id_1 = set_video_id_1 || video_1?.key('set_video_id').string();\n\n      if (!set_video_id_0 || !set_video_id_1) {\n        const next = await pl.getContinuation();\n        return getSetVideoIds(next);\n      }\n    };\n\n    await getSetVideoIds(playlist);\n\n    payload.actions.push({\n      action: 'ACTION_MOVE_VIDEO_AFTER',\n      setVideoId: set_video_id_0,\n      movedSetVideoIdPredecessor: set_video_id_1\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions // TODO: implement actions in the parser\n    };\n  }\n  \n  async #getPlaylist(playlist_id: string): Promise<Playlist> {\n    if (!playlist_id.startsWith('VL')) {\n      playlist_id = `VL${playlist_id}`;\n    }\n    \n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: playlist_id } });\n    const browse_response = await browse_endpoint.call(this.#actions, { parse: true });\n    \n    return new Playlist(this.#actions, browse_response, true);\n  }\n\n  /**\n   * Sets the name for the given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param name - The name / title to use for the playlist.\n   */\n  async setName(playlist_id: string, name: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, name });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload = { playlist_id, actions: [] as Record<string, any>[] };\n\n    payload.actions.push({\n      action: 'ACTION_SET_PLAYLIST_NAME',\n      playlistName: name\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions\n    };\n  }\n\n  /**\n   * Sets the description for the given playlist.\n   * @param playlist_id - The playlist ID.\n   * @param description - The description to use for the playlist.\n   */\n  async setDescription(playlist_id: string, description: string): Promise<{ playlist_id: string; action_result: any; }> {\n    throwIfMissing({ playlist_id, description });\n\n    if (!this.#actions.session.logged_in)\n      throw new InnertubeError('You must be signed in to perform this operation.');\n\n    const payload = { playlistId: playlist_id, actions: [] as Record<string, any>[] };\n\n    payload.actions.push({\n      action: 'ACTION_SET_PLAYLIST_DESCRIPTION',\n      playlistDescription: description\n    });\n\n    const playlist_edit_endpoint = new NavigationEndpoint({ playlistEditEndpoint: payload });\n    const response = await playlist_edit_endpoint.call(this.#actions);\n\n    return {\n      playlist_id,\n      action_result: response.data.actions\n    };\n  }\n}\n", "import * as ProtoUtils from '../../utils/ProtoUtils.js';\nimport { throwIfMissing, u8ToBase64 } from '../../utils/Utils.js';\nimport { CreateCommentParams, NotificationPreferences } from '../../../protos/generated/misc/params.js';\nimport type { Actions, ApiResponse } from '../index.js';\nimport NavigationEndpoint from '../../parser/classes/NavigationEndpoint.js';\n\nexport default class InteractionManager {\n  readonly #actions: Actions;\n\n  constructor(actions: Actions) {\n    this.#actions = actions;\n  }\n\n  /**\n   * Likes a given video.\n   * @param video_id - The video ID\n   */\n  async like(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const like_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'LIKE',\n        target: video_id\n      }\n    });\n\n    return like_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Dislikes a given video.\n   * @param video_id - The video ID\n   */\n  async dislike(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const dislike_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'DISLIKE',\n        target: video_id\n      }\n    });\n\n    return dislike_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Removes a like/dislike.\n   * @param video_id - The video ID\n   */\n  async removeRating(video_id: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const remove_like_endpoint = new NavigationEndpoint({\n      likeEndpoint: {\n        status: 'INDIFFERENT',\n        target: video_id\n      }\n    });\n\n    return remove_like_endpoint.call(this.#actions, { client: 'TV' });\n  }\n\n  /**\n   * Subscribes to the given channel.\n   * @param channel_id - The channel ID\n   */\n  async subscribe(channel_id: string): Promise<ApiResponse> {\n    throwIfMissing({ channel_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const subscribe_endpoint = new NavigationEndpoint({\n      subscribeEndpoint: {\n        channelIds: [ channel_id ],\n        params: 'EgIIAhgA'\n      }\n    });\n\n    return subscribe_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Unsubscribes from the given channel.\n   * @param channel_id - The channel ID\n   */\n  async unsubscribe(channel_id: string): Promise<ApiResponse> {\n    throwIfMissing({ channel_id });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const unsubscribe_endpoint = new NavigationEndpoint({\n      unsubscribeEndpoint: {\n        channelIds: [ channel_id ],\n        params: 'CgIIAhgA'\n      }\n    });\n\n    return unsubscribe_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Posts a comment on a given video.\n   * @param video_id - The video ID\n   * @param text - The comment text\n   */\n  async comment(video_id: string, text: string): Promise<ApiResponse> {\n    throwIfMissing({ video_id, text });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const writer = CreateCommentParams.encode({\n      videoId: video_id,\n      params: {\n        index: 0\n      },\n      number: 7\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const create_comment_endpoint = new NavigationEndpoint({\n      createCommentEndpoint: {\n        commentText: text,\n        createCommentParams: params\n      }\n    });\n\n    return create_comment_endpoint.call(this.#actions);\n  }\n\n  /**\n   * Translates a given text using YouTube's comment translation feature.\n   * @param text - The text to translate\n   * @param target_language - an ISO language code\n   * @param args - optional arguments\n   */\n  async translate(text: string, target_language: string, args: { video_id?: string; comment_id?: string; } = {}) {\n    throwIfMissing({ text, target_language });\n\n    const action = ProtoUtils.encodeCommentActionParams(22, { text, target_language, ...args });\n\n    const perform_comment_action_endpoint = new NavigationEndpoint({ performCommentActionEndpoint: { action } });\n    const response = await perform_comment_action_endpoint.call(this.#actions);\n    const mutation = response.data.frameworkUpdates.entityBatchUpdate.mutations[0].payload.commentEntityPayload;\n\n    return {\n      success: response.success,\n      status_code: response.status_code,\n      translated_content: mutation.translatedContent.content,\n      data: response.data\n    };\n  }\n\n  /**\n   * Changes notification preferences for a given channel.\n   * Only works with channels you are subscribed to.\n   * @param channel_id - The channel ID.\n   * @param type - The notification type.\n   */\n  async setNotificationPreferences(channel_id: string, type: 'PERSONALIZED' | 'ALL' | 'NONE'): Promise<ApiResponse> {\n    throwIfMissing({ channel_id, type });\n\n    if (!this.#actions.session.logged_in)\n      throw new Error('You must be signed in to perform this operation.');\n\n    const pref_types = {\n      PERSONALIZED: 1,\n      ALL: 2,\n      NONE: 3\n    };\n\n    if (!Object.keys(pref_types).includes(type.toUpperCase()))\n      throw new Error(`Invalid notification preference type: ${type}`);\n\n    const writer = NotificationPreferences.encode({\n      channelId: channel_id,\n      prefId: {\n        index: pref_types[type.toUpperCase() as keyof typeof pref_types]\n      },\n      number0: 0, number1: 4\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const modify_channel_notification_preference_endpoint = new NavigationEndpoint({ modifyChannelNotificationPreferenceEndpoint: { params } });\n    return modify_channel_notification_preference_endpoint.call(this.#actions);\n  }\n}", "import Session from './core/Session.js';\n\nimport { Kids, Music, Studio } from './core/clients/index.js';\nimport { AccountManager, InteractionManager, PlaylistManager } from './core/managers/index.js';\nimport { Feed, TabbedFeed } from './core/mixins/index.js';\n\nimport {\n  Channel,\n  Comments,\n  Guide,\n  HashtagFeed,\n  History,\n  HomeFeed,\n  Library,\n  NotificationsMenu,\n  Playlist,\n  Search,\n  VideoInfo\n} from './parser/youtube/index.js';\nimport { ShortFormVideoInfo } from './parser/ytshorts/index.js';\n\nimport { NavigateAction } from './parser/continuations.js';\nimport NavigationEndpoint from './parser/classes/NavigationEndpoint.js';\nimport type Format from './parser/classes/misc/Format.js';\n\nimport * as Constants from './utils/Constants.js';\nimport { generateRandomString, InnertubeError, throwIfMissing, u8ToBase64 } from './utils/Utils.js';\n\nimport type { ApiResponse } from './core/Actions.js';\nimport type {\n  DownloadOptions,\n  EngagementType,\n  FormatOptions,\n  GetVideoInfoOptions,\n  InnerTubeClient,\n  InnerTubeConfig,\n  SearchFilters\n} from './types/index.js';\nimport type { IBrowseResponse, IParsedResponse } from './parser/index.js';\n\nimport {\n  CommunityPostCommentsParam,\n  CommunityPostCommentsParamContainer,\n  CommunityPostParams,\n  GetCommentsSectionParams,\n  Hashtag,\n  ReelSequence,\n  SearchFilter,\n  SearchFilter_Filters_Duration,\n  SearchFilter_Filters_SearchType,\n  SearchFilter_Filters_UploadDate,\n  SearchFilter_SortBy\n} from '../protos/generated/misc/params.js';\n\n/**\n * Provides access to various services and modules in the YouTube API.\n *\n * @example\n * ```ts\n * import { Innertube, UniversalCache } from 'youtubei.js';\n * const innertube = await Innertube.create({ cache: new UniversalCache(true)});\n * ```\n */\nexport default class Innertube {\n  readonly #session: Session;\n\n  constructor(session: Session) {\n    this.#session = session;\n  }\n\n  static async create(config: InnerTubeConfig = {}): Promise<Innertube> {\n    return new Innertube(await Session.create(config));\n  }\n\n  async getInfo(target: string | NavigationEndpoint, options?: GetVideoInfoOptions): Promise<VideoInfo> {\n    throwIfMissing({ target });\n\n    const payload = {\n      videoId: target instanceof NavigationEndpoint ? target.payload?.videoId : target,\n      playlistId: target instanceof NavigationEndpoint ? target.payload?.playlistId : undefined,\n      playlistIndex: target instanceof NavigationEndpoint ? target.payload?.playlistIndex : undefined,\n      params: target instanceof NavigationEndpoint ? target.payload?.params : undefined,\n      racyCheckOk: true,\n      contentCheckOk: true\n    };\n\n    const watch_endpoint = new NavigationEndpoint({ watchEndpoint: payload });\n    const watch_next_endpoint = new NavigationEndpoint({ watchNextEndpoint: payload });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.sts\n        }\n      },\n      client: options?.client\n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n\n    const watch_response = watch_endpoint.call(session.actions, extra_payload);\n    const watch_next_response = watch_next_endpoint.call(session.actions);\n\n    const response = await Promise.all([ watch_response, watch_next_response ]);\n\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo(response, session.actions, cpn);\n  }\n\n  async getBasicInfo(video_id: string, options?: GetVideoInfoOptions): Promise<VideoInfo> {\n    throwIfMissing({ video_id });\n\n    const watch_endpoint = new NavigationEndpoint({\n      watchEndpoint: {\n        videoId: video_id,\n        racyCheckOk: true,\n        contentCheckOk: true\n      }\n    });\n\n    const session = this.#session;\n\n    const extra_payload: Record<string, any> = {\n      playbackContext: {\n        contentPlaybackContext: {\n          vis: 0,\n          splay: false,\n          lactMilliseconds: '-1',\n          signatureTimestamp: session.player?.sts\n        }\n      },\n      client: options?.client  \n    };\n\n    if (options?.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: options.po_token\n      };\n    } else if (session.po_token) {\n      extra_payload.serviceIntegrityDimensions = {\n        poToken: session.po_token\n      };\n    }\n    \n    const watch_response = await watch_endpoint.call(session.actions, extra_payload);\n\n    const cpn = generateRandomString(16);\n\n    return new VideoInfo([ watch_response ], session.actions, cpn);\n  }\n\n  async getShortsVideoInfo(video_id: string, client?: InnerTubeClient): Promise<ShortFormVideoInfo> {\n    throwIfMissing({ video_id });\n\n    const reel_watch_endpoint = new NavigationEndpoint({\n      reelWatchEndpoint: {\n        disablePlayerResponse: false,\n        params: 'CAUwAg%3D%3D',\n        videoId: video_id\n      }\n    });\n\n    const actions = this.#session.actions;\n\n    const reel_watch_response = reel_watch_endpoint.call(actions, { client });\n\n    const writer = ReelSequence.encode({\n      shortId: video_id,\n      params: {\n        number: 5\n      },\n      feature2: 25,\n      feature3: 0\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const sequence_response = actions.execute('/reel/reel_watch_sequence', { sequenceParams: params });\n\n    const response = await Promise.all([ reel_watch_response, sequence_response ]);\n\n    const cpn = generateRandomString(16);\n\n    return new ShortFormVideoInfo([ response[0] ], actions, cpn, response[1]);\n  }\n\n  async search(query: string, filters: SearchFilters = {}): Promise<Search> {\n    throwIfMissing({ query });\n\n    const search_filter: SearchFilter = {};\n\n    search_filter.filters = {};\n\n    if (filters.sort_by) {\n      search_filter.sortBy = SearchFilter_SortBy[filters.sort_by.toUpperCase() as keyof typeof SearchFilter_SortBy];\n    }\n\n    if (filters.upload_date) {\n      search_filter.filters.uploadDate = SearchFilter_Filters_UploadDate[filters.upload_date.toUpperCase() as keyof typeof SearchFilter_Filters_UploadDate];\n    }\n\n    if (filters.type) {\n      search_filter.filters.type = SearchFilter_Filters_SearchType[filters.type.toUpperCase() as keyof typeof SearchFilter_Filters_SearchType];\n    }\n\n    if (filters.duration) {\n      search_filter.filters.duration = SearchFilter_Filters_Duration[filters.duration.toUpperCase() as keyof typeof SearchFilter_Filters_Duration];\n    }\n\n    if (filters.features) {\n      for (const feature of filters.features) {\n        switch (feature) {\n          case '360':\n            search_filter.filters.features360 = true;\n            break;\n          case '3d':\n            search_filter.filters.features3d = true;\n            break;\n          case '4k':\n            search_filter.filters.features4k = true;\n            break;\n          case 'creative_commons':\n            search_filter.filters.featuresCreativeCommons = true;\n            break;\n          case 'hd':\n            search_filter.filters.featuresHd = true;\n            break;\n          case 'hdr':\n            search_filter.filters.featuresHdr = true;\n            break;\n          case 'live':\n            search_filter.filters.featuresLive = true;\n            break;\n          case 'location':\n            search_filter.filters.featuresLocation = true;\n            break;\n          case 'purchased':\n            search_filter.filters.featuresPurchased = true;\n            break;\n          case 'subtitles':\n            search_filter.filters.featuresSubtitles = true;\n            break;\n          case 'vr180':\n            search_filter.filters.featuresVr180 = true;\n            break;\n          default:\n            break;\n        }\n      }\n    }\n\n    const search_endpoint = new NavigationEndpoint({\n      searchEndpoint: {\n        query,\n        params: filters ? encodeURIComponent(u8ToBase64(SearchFilter.encode(search_filter).finish())) : undefined\n      }\n    });\n    const response = await search_endpoint.call(this.#session.actions);\n\n    return new Search(this.actions, response);\n  }\n\n  async getSearchSuggestions(query: string, previous_query?: string): Promise<string[]> {\n    const session = this.#session;\n\n    const url = new URL(`${Constants.URLS.YT_SUGGESTIONS}/complete/search`);\n    url.searchParams.set('client', 'youtube');\n    url.searchParams.set('gs_ri', 'youtube');\n    url.searchParams.set('gs_id', '0');\n    url.searchParams.set('cp', '0');\n    url.searchParams.set('ds', 'yt');\n    url.searchParams.set('sugexp', Constants.CLIENTS.WEB.SUGG_EXP_ID);\n    url.searchParams.set('hl', session.context.client.hl);\n    url.searchParams.set('gl', session.context.client.gl);\n    url.searchParams.set('q', query);\n\n    if (previous_query)\n      url.searchParams.set('pq', previous_query);\n\n    const response = await session.http.fetch_function(url, {\n      headers: {\n        'Cookie': session.cookie || ''\n      }\n    });\n    \n    const text = await response.text();\n\n    const data = JSON.parse(text.replace('window.google.ac.h(', '').slice(0, -1));\n    return data[1].map((suggestion: (string | number)[]) => suggestion[0]);\n  }\n\n  async getComments(video_id: string, sort_by?: 'TOP_COMMENTS' | 'NEWEST_FIRST', comment_id?: string): Promise<Comments> {\n    throwIfMissing({ video_id });\n\n    const SORT_OPTIONS = {\n      TOP_COMMENTS: 0,\n      NEWEST_FIRST: 1\n    };\n\n    const token = GetCommentsSectionParams.encode({\n      ctx: {\n        videoId: video_id\n      },\n      unkParam: 6,\n      params: {\n        opts: {\n          videoId: video_id,\n          sortBy: SORT_OPTIONS[sort_by || 'TOP_COMMENTS'],\n          type: 2,\n          commentId: comment_id || ''\n        },\n        target: 'comments-section'\n      }\n    });\n\n    const continuation = encodeURIComponent(u8ToBase64(token.finish()));\n\n    const continuation_command = new NavigationEndpoint({\n      continuationCommand: {\n        request: 'CONTINUATION_REQUEST_TYPE_WATCH_NEXT',\n        token: continuation\n      }\n    });\n\n    const response = await continuation_command.call(this.#session.actions);\n\n    return new Comments(this.actions, response.data);\n  }\n\n  async getHomeFeed(): Promise<HomeFeed> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEwhat_to_watch' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new HomeFeed(this.actions, response);\n  }\n\n  async getGuide(): Promise<Guide> {\n    const response = await this.actions.execute('/guide');\n    return new Guide(response.data);\n  }\n\n  async getLibrary(): Promise<Library> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FElibrary' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new Library(this.actions, response);\n  }\n\n  async getHistory(): Promise<History> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEhistory' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new History(this.actions, response);\n  }\n\n  async getTrending(): Promise<TabbedFeed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEtrending' } });\n    const response = await browse_endpoint.call(this.#session.actions);\n    return new TabbedFeed(this.actions, response);\n  }\n\n  async getCourses(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEcourses_destination' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getSubscriptionsFeed(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEsubscriptions' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getChannelsFeed(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEchannels' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getChannel(id: string): Promise<Channel> {\n    throwIfMissing({ id });\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });\n    let response = await browse_endpoint.call<IBrowseResponse>(this.#session.actions, { parse: true });\n\n    if (response.on_response_received_actions?.[0].is(NavigateAction)) {\n      response = await response.on_response_received_actions[0].endpoint.call<IBrowseResponse>(this.#session.actions, { parse: true });\n    }\n\n    return new Channel(this.actions, response, true);\n  }\n\n  async getNotifications(): Promise<NotificationsMenu> {\n    const response = await this.actions.execute('/notification/get_notification_menu', { notificationsMenuRequestType: 'NOTIFICATIONS_MENU_REQUEST_TYPE_INBOX' });\n    return new NotificationsMenu(this.actions, response);\n  }\n\n  async getUnseenNotificationsCount(): Promise<number> {\n    const response = await this.actions.execute('/notification/get_unseen_count');\n    // FIXME: properly parse this.\n    return response.data?.unseenCount || response.data?.actions?.[0].updateNotificationsUnseenCountAction?.unseenCount || 0;\n  }\n\n  /**\n   * Retrieves the user's playlists.\n   */\n  async getPlaylists(): Promise<Feed<IBrowseResponse>> {\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEplaylist_aggregation' } });\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  async getPlaylist(id: string): Promise<Playlist> {\n    throwIfMissing({ id });\n\n    if (!id.startsWith('VL')) {\n      id = `VL${id}`;\n    }\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: id } });\n    const response = await browse_endpoint.call(this.#session.actions);\n\n    return new Playlist(this.actions, response);\n  }\n\n  async getHashtag(hashtag: string): Promise<HashtagFeed> {\n    throwIfMissing({ hashtag });\n\n    const writer = Hashtag.encode({\n      params: {\n        hashtag,\n        type: 1\n      }\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()));\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEhashtag', params } });\n    const response = await browse_endpoint.call(this.#session.actions);\n\n    return new HashtagFeed(this.actions, response);\n  }\n\n  /**\n   * An alternative to {@link download}.\n   * Returns deciphered streaming data.\n   *\n   * If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.\n   * @param video_id - The video id.\n   * @param options - Format options.\n   */\n  async getStreamingData(video_id: string, options: FormatOptions = {}): Promise<Format> {\n    const info = await this.getBasicInfo(video_id, options);\n\n    const format = info.chooseFormat(options);\n    format.url = format.decipher(this.#session.player);\n\n    return format;\n  }\n\n  /**\n   * Downloads a given video. If all you need the direct download link, see {@link getStreamingData}.\n   * If you wish to retrieve the video info too, have a look at {@link getBasicInfo} or {@link getInfo}.\n   * @param video_id - The video id.\n   * @param options - Download options.\n   */\n  async download(video_id: string, options?: DownloadOptions): Promise<ReadableStream<Uint8Array>> {\n    const info = await this.getBasicInfo(video_id, options);\n    return info.download(options);\n  }\n\n  /**\n   * Resolves the given URL.\n   */\n  async resolveURL(url: string): Promise<NavigationEndpoint> {\n    const response = await this.actions.execute('/navigation/resolve_url', { url, parse: true });\n\n    if (!response.endpoint)\n      throw new InnertubeError('Failed to resolve URL. Expected a NavigationEndpoint but got undefined', response);\n\n    return response.endpoint;\n  }\n\n  /**\n   * Gets a post page given a post id and the channel id\n   */\n  async getPost(post_id: string, channel_id: string) : Promise<Feed<IBrowseResponse>> {\n    throwIfMissing({ post_id, channel_id });\n    const writer = CommunityPostParams.encode({\n      f1: {\n        ucid1: channel_id,\n        postId: post_id,\n        ucid2: channel_id\n      }\n    });\n\n    const params = encodeURIComponent(u8ToBase64(writer.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'));\n\n    const browse_endpoint = new NavigationEndpoint({ browseEndpoint: { browseId: 'FEpost_detail', params: params } });\n\n    const response = await browse_endpoint.call(this.#session.actions, { parse: true });\n    return new Feed(this.actions, response);\n  }\n\n  /**\n   * Gets the comments of a post.\n   */\n  async getPostComments(post_id: string, channel_id: string, sort_by?: 'TOP_COMMENTS' | 'NEWEST_FIRST'): Promise<Comments> {\n    throwIfMissing({ post_id, channel_id });\n\n    const SORT_OPTIONS = {\n      TOP_COMMENTS: 0,\n      NEWEST_FIRST: 1\n    };\n\n    const writer1 = CommunityPostCommentsParam.encode({\n      title: 'posts',\n      commentDataContainer: {\n        title: 'comments-section',\n        commentData: {\n          sortBy: SORT_OPTIONS[sort_by || 'TOP_COMMENTS'],\n          f0: 2,\n          f1: 0,\n          channelId: channel_id,\n          postId: post_id\n        },\n        f0: 0\n      }\n    });\n\n    const writer2 = CommunityPostCommentsParamContainer.encode({\n      f0: {\n        location: 'FEcomment_post_detail_page_web_top_level',\n        protoData: encodeURIComponent(u8ToBase64(writer1.finish()).replace(/\\+/g, '-').replace(/\\//g, '_'))\n      }\n    });\n\n    const continuation = encodeURIComponent(u8ToBase64(writer2.finish()));\n\n    const continuation_command = new NavigationEndpoint({\n      continuationCommand: {\n        request: 'CONTINUATION_REQUEST_TYPE_BROWSE',\n        token: continuation\n      }\n    });\n\n    const response = await continuation_command.call(this.#session.actions);\n\n    return new Comments(this.actions, response.data);\n  }\n\n  /**\n   * Fetches an attestation challenge.\n   */\n  async getAttestationChallenge(engagement_type: EngagementType, ids?: Record<string, any>[]) {\n    const payload: Record<string, any> = {\n      engagementType: engagement_type\n    };\n    \n    if (ids)\n      payload.ids = ids;\n    \n    return this.actions.execute('/att/get', { parse: true, ...payload });\n  }\n\n  /**\n   * Utility method to call an endpoint without having to use {@link Actions}.\n   */\n  call<T extends IParsedResponse>(endpoint: NavigationEndpoint, args: { [key: string]: any; parse: true }): Promise<T>;\n  call(endpoint: NavigationEndpoint, args?: { [key: string]: any; parse?: false }): Promise<ApiResponse>;\n  call(endpoint: NavigationEndpoint, args?: object): Promise<IParsedResponse | ApiResponse> {\n    return endpoint.call(this.actions, args);\n  }\n\n  /**\n   * An interface for interacting with YouTube Music.\n   */\n  get music() {\n    return new Music(this.#session);\n  }\n\n  /**\n   * An interface for interacting with YouTube Studio.\n   */\n  get studio() {\n    return new Studio(this.#session);\n  }\n\n  /**\n   * An interface for interacting with YouTube Kids.\n   */\n  get kids() {\n    return new Kids(this.#session);\n  }\n\n  /**\n   * An interface for managing and retrieving account information.\n   */\n  get account() {\n    return new AccountManager(this.#session.actions);\n  }\n\n  /**\n   * An interface for managing playlists.\n   */\n  get playlist() {\n    return new PlaylistManager(this.#session.actions);\n  }\n\n  /**\n   * An interface for directly interacting with certain YouTube features.\n   */\n  get interact() {\n    return new InteractionManager(this.#session.actions);\n  }\n\n  /**\n   * An internal class used to dispatch requests.\n   */\n  get actions() {\n    return this.#session.actions;\n  }\n\n  /**\n   * The session used by this instance.\n   */\n  get session() {\n    return this.#session;\n  }\n}\n", "export type { default as PlatformShim } from './PlatformShim.js';\n\nexport * from './Cache.js';\nexport * from './PlatformShim.js';\nexport * from './Misc.js';\nexport * from './FormatUtils.js';\nexport * from './GetVideoInfoOptions.js';", "import Innertube from '../Innertube.js';\n\nexport * from '../core/index.js';\nexport * from '../parser/index.js';\nexport * as Types from '../types/index.js';\nexport * from '../utils/index.js';\n\nexport * from '../Innertube.js';\nexport { default as Innertube } from '../Innertube.js';\n\nexport default Innertube;", "import { Jinter } from 'jintr';\nimport type { VMPrimative } from '../../types/PlatformShim.js';\nimport { Log } from '../lib.js';\n\nconst TAG = 'JsRuntime';\n\nexport default function evaluate(code: string, env: Record<string, VMPrimative>) {\n  Log.debug(TAG, 'Evaluating JavaScript:\\n', code);\n\n  const runtime = new Jinter();\n\n  for (const [ key, value ] of Object.entries(env)) {\n    runtime.scope.set(key, value);\n  }\n\n  const result = runtime.evaluate(code);\n\n  Log.debug(TAG, 'Done. Result:', result);\n\n  return result;\n}"],
  "mappings": "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AG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG;AAG3hC,IAAI,6BAA6B,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,KAAK,MAAM,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,IAA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",
  "names": ["ContinuationCommand", "types_exports", "nodes_exports", "info", "args", "_CallExpression_throwError", "_CallExpression_getCalleeString", "__classPrivateFieldGet", "_Property_init", "_Property_get", "_Property_set", "__classPrivateFieldGet", "_Visitor_getNode", "TokenType", "Position", "SourceLocation", "offset", "Parser", "ref", "parse", "DestructuringErrors", "exports", "TokContext", "Scope", "Node", "BranchID", "RegExpValidationState", "current", "negate", "Token", "__classPrivateFieldGet", "parse", "types", "obj", "Text", "data", "data", "parse", "nodes_exports", "SearchFilter", "data", "info", "formats", "info", "candidates", "data", "version", "WireType", "offset", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "API_PATH", "data", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "data", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "data", "data", "data", "data", "API_PATH", "data", "API_PATH", "data", "API_PATH", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "nodes_exports", "data", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "Panel", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "Text", "at", "data", "data", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "data", "data", "Text", "SearchFilter", "data", "Text", "data", "Text", "SearchFilter", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "Text", "data", "data", "Text", "data", "data", "data", "data", "Text", "data", "Text", "data", "Text", "data", "data", "parse", "key", "value", "Text", "type", "key_info", "data", "parse", "types", "resolved_key_info", "data", "parse", "ContinuationCommand", "data", "data", "TAG", "nodes_exports", "error", "data", "parse", "ContinuationCommand", "mutation", "Channel", "LiveChat", "Playlist", "data", "data", "info", "data", "tab", "Channel", "data", "item", "response", "data", "data", "data", "data", "data", "button", "Playlist", "data", "data", "Playlist", "LiveChat", "data", "data", "data", "info", "button", "LiveChat", "HomeFeed", "Library", "Playlist", "Search", "shelf", "HomeFeed", "Library", "cmd", "Playlist", "data", "Playlist", "Search", "data", "Channel", "HomeFeed", "Search", "VideoInfo", "Channel", "data", "HomeFeed", "data", "Search", "data", "VideoInfo", "data", "data", "ContinuationCommand", "Text", "TAG_", "info", "Text", "data", "current", "data", "TAG", "data", "TAG", "data", "TAG", "error", "data", "Search", "VideoInfo", "Channel", "HomeFeed", "Search", "HomeFeed", "Library", "Playlist", "tab", "longToNumber", "longToNumber", "get_accounts_list_endpoint", "response", "Playlist", "data", "Channel", "Playlist", "info", "types_exports", "TAG", "path", "version", "os", "fs", "data", "crypto", "defaultFetch"]
}
