
    =ҐiH                       d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z& d	d
l'm(Z( d	dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d	dlOmPZPmQZQmRZR dZSdZTdZUdZVdZWdZXdZYdZZ G d de      Z[y)    N   )	INNERTUBE_CLIENTS	BadgeTypeGvsPoTokenPolicyPlayerPoTokenPolicyStreamingProtocolYoutubeBaseInfoExtractor_PoTokenContext_split_innertube_clientshort_client_name)_EJS_WIKI_URL)initialize_jsc_director)JsChallengeRequestJsChallengeTypeNChallengeInputSigChallengeInput)initialize_pot_director)PoTokenContextPoTokenRequest   )	HTTPError)%
NO_DEFAULTExtractorErrorLazyListbug_reports_message
clean_htmldatetime_from_strfilesize_from_tbrfloat_or_noneformat_field	get_firstint_or_nonejoin_nonemptymimetype2ext
orderedSetparse_codecsparse_countparse_durationparse_iso8601parse_qs	qualities
remove_endremove_startsmuggle_urlstr_or_none
str_to_intstrftime_or_nonetraverse_objtry_calltry_getunescapeHTMLunified_strdateunsmuggle_url
update_urlupdate_url_queryurl_or_noneurljoinvariadic)clean_headersclean_proxiesselect_proxy__yt_dlp_client__yt_dlp_fetch_subs_po_token__yt_dlp_fetch_gvs_po_token__yt_dlp_player_token_provided__yt_dlp_innertube_context__yt_dlp_is_premium_subscriber__yt_dlp_available_at_timestampz4https://github.com/yt-dlp/yt-dlp/wiki/PO-Token-Guidec                   $   e Zd ZdZdj	                  dj                  ej                              ZddgZ	dZ
dZd	Zd
ZdZdZdZdZdZg di ddddddddddddgddded d!d"d#d$ed%d&d'd(d)d*d+d,d-ed.d/d0d1d2d3d4d5dd6d7ed8
d9d:d;d<d=dd>d?d@dAdBdCdDdEdFi ddddddddddddgddded d!d"d#d$ed%d&d'd(d+d,d-ed.d/dGd0d2d3d4d5dd6d7edHd9dDdIdJi ddKddLddMddddddgddNded dOd"dPd$ed%dQd'dRd-ed.d/dSddGd0dTd3dUd5dNdVdWedHdXd0d0dYdZd[d\i dd]ddLdd^dddddd_gdd`ded dadbd0d"dcd$ed%ddd'ded+d,d-ed.d/dd0dfd3dgdhd`didjedk
dld0d0dYdmdndoi ddpddddqdd?ddrddsgddtded dudbd0d"dvd$ed%dwd'dxd+d,d-ed.d/dd0dyd3dzd{dtd|d}edk
d~d0idd[ddi ddddddddddddgddded ddbd0d"dd$ed%dd'dd+d,d-ed.d/dd0dd3dddddedk
d~d0idddi dddddddd?ddrddgddded dd"dd$ed%dd'dd-ed.d/dSddGd0dd3dddddedHddDddi dddddddddddd_gddded dd"dd%dd'dd-ed.d/dSddGdddd3dddddeddddd0ddi dddddddddddd_gddded ddbd0d"dd$ed%dd'dd+d,d-ed.d/dd0dd3dddddedk
dgd~d0iddi ddddddddddddgddded dÓdbd0d"dēd%dœd'dƓd-ed.dǓdSdȓdGd0dddd3dddddedМ
d~d0idmdi ddғddddӓddddԓddgdd֓ded dדd"dؓd$ed%dٓd'dړd-ed.d/dSddGd0ddd3ddddded	d~d0idmdd0ddi ddddddddddddgddded dd"dd%dd'dd-ed.d/dSddGd0ddd3dddddedd~d0idmdi ddddddddddԓddgddded dd"dd$ed%dd'dd-ed.dǓdSdȓdGd0dddd3dddddedМ
d d0d0dYdmdd0ddd0ddd0ddd0ddi ddddddddddddgdd	ded d
d"dd$ed%dd'dd-ed.d/dSddGd0dd3ddd	ddedHd~d0idmdd0dddddddddd:dd0ddi ddddddddddddgdd ded d!d"d"d#d$d%d%d'd&d'd(d-ed.d/dSdd0d)d3d*d+d d,d-ed.	d~d0idmd/i dd0dddd1dddddd2gdd3ded d4dbd0d"d5d#dd$ed%d6d'd7d+d,d'd(ed/dd0dd3d8d9d3d:d;ed<d~d0idmd=d0dd>d0dd?d@ddAdBdCdDdEdFd:dGi ddHddddIddddddgddJded dKdbd0d"dLd$ed%dMd'dNd+d,d-ed.d/dd0dd3dOdPdJdQdRedk
dSgd~d0iddTdUddVdWdXdYdZd[d:d\d0dd]d0dd^d0dd_d0dd`d0ddad0ddbd0ddci dddddddedddfdgdhdedidjgdddd_gddjded dkdbd0d"dld$edmdjgd%dndod,ed/dd0dpdd3dqdedrdjedsd~d0idmdtd0ddudvddwdxdydzd{d|d}d9d:d~i ddddddddddddgddded dd"dd%dQd'dd-ed.d/dSddGd0dg d3dddddedd~d0idmdi ddddddddddddgddded ddbd0d"dd#d$d$ed%dd'dd+d,d-ed/dd0dd3dddddedd~d0idmdd0ddd0ddi dddddddddfddhddidgdddd_gddded ddbd0d"dd$edmdgd%ddd,ed/dd0ddd)d3ddddedd~d0idmdd0ddi dddddddd?ddrdd2gddded ddbd0d"dd$ed%dd'dd-ed.d/dSdd0dd3ddddded.	dd:di ddddddddddddgddded dd"dd%dd'dd.d/dSddGd0dddd3dddddedd~d0idmdd0ddd0ddd0ddi ddœddƓddǓddddddgddȓded dɓdbd0d"dʓd#d$d$ed%d˓d'd̓d+d,d-ed/dd0dd3dΐdϐdȐdАdedddҐdgiidd0d՜d֐dלdcd0dddِdgiiidۜdd0ddݐdi ddߓddddddddddgddded ddbd0d"dd#dd$ed%dd'dd+d,d-ed/dd0dd3dddddeddd0dddi ddddddddddddsgddded dd"dd$ed%dd'dd+d,d-ed.d/dSdd0dd3ddddded.	d~d0idmdi ddddddddddddgddded ddbd0d"dd$ed%dd'd d+d,d-ed.d/dd0dddd3dddddedd~d0idmdi dddddedddddd_gddded d	dbd0d"d
ded%dd-ed.ddSdȓdGd0dddd3dddddedМ
d~d0idmdi ddddddddddԓdd_gddded dd"dd%dQd'dd-ed.d/dSddGd0dg d3dddddedd~d0idmd i dd!dddd"ddddԓddgdd#d d$d"d%d%dQd'd&d-ed.d/dSddGd0dg dd3d'd(d#d)d*edd~d0idmd+i dd,dddd-ddddddgdd#d d$d"d%d%d.d'd&d-ed.d/dSddGd0dg dd3d/d0d#d)d*eddd1d2giid0d3d4gd5d6d7d0dd8d9i dd:dddd;ddddddgdd<ded d=dbd0d"d>d$ed%d?d'd@d+d,d-ed.d/dd0g d3dAdBd<dCdDedk
ddҐdEgiidFd0d՜dGd[dHdIi ddddJdddd?ddrddgddded dd"dd$ed%dd'dd-ed.d/dSddGd0dd3dddddedHdKd0ddd[dLdMi ddNddddOddddddgddPded dQdbd0d"dRd#dd$ed%dSd'dTd+d,d-eddd0dUdVdd3dWdUdPdXdYedZd~d0idd[i dd\ddJdd]dddd^ded d_dbd0d"d`d#dd$ed%dad'dbd+d,d-ed.d/dSdd0dTd3dcddd^dedfed.	ddEgdggdhid0d3dGdלdii ddjddddkddddddgddlded dmd"dnd%dQd'dod-ed.d/dSddGd0dg d3dpdqdldrdsedd~d0idmdti dduddddvdidwgdxdvdfdydzd{d|d}dhdvd%d~dSdddddd dd"ddbd0deeeedddd,d_gg ddwgddd0dd/dd~d0idmdi ddddddd%ddSdddddddddd dd"dd$eded-eddd'ddddgg dddgddd0dd/dd~d0idmdi ddddddd%ddSdddddddddd dd"dd$eded-eddd'dddd_gg g dddddd0dd/d
d~d0idmdi ddddddd%dQdSddd#dd)dd*dd#d d$d"d%deded-eddd'd&dddgg ddddd0dd/dddd0d0ddmdi ddddddd%dQdSdddddddddd dd"dded-eddd'dddddgg ddd0dd/d*ddd0d0ddmZdi ddēddddœdƐdǓd%dȓddddTd dɓdGd0dd3d-ed$eddʓd.d/d"d˓ddd'd̓edgedʐd͐dd,dddМ	d~d0idmdi ddғddddӓddddddgddԓded dՓd"d֓d$ed%dדd'dؓd-ed.d/dSddGd0dd3dِdڐdԐdېdedHd~d0idmdi ddޓddddߓdddddd_gddded dd"dd$ed%dQd'dd-ed.d/dddSdd0dd3ddddded.	d~d0idmdi ddddddddddddgddded dd"dd%dd'dd-ed.d/dSddGd0ddd3dddddeddddgiid0d3dmddddddd d(d~d0idgZdZdZdddddd	d
ddd	Zej5                         D  ci c]  \  }}||
 c}}} Zefd       ZfdZfdZd Z d Z!d Z"ddddZ#dddZ$dGdZ%d Z&d Z'ed        Z(dHdZ)dddZ*ddd Z+dId!Z,d" Z-efd#       Z.ed$        Z/d% Z0d& Z1d' Z2dJd(Z3dJd)Z4dKd*Z5e6d+        Z7d, Z8e6d-        Z9edId.       Z:d/ed0e;fd1Z<d2e;jz                  ddddddddf
d0e;fd3Z>d4 Z?e6d5        Z@e6d6        ZAd7 ZBd8 ZCd9 ZDd: ZEd; ZFd< ZGdJd=ZHd> ZId? ZJd@ ZKdA ZLdJdBZMdC ZNdD ZOdE ZPdF ZQxZRS c c}}} w (L  	YoutubeIEYouTubea
  (?x)^
                     (
                         (?:https?://|//)                                    # http(s):// or protocol-independent URL
                         (?:(?:(?:(?:\w+\.)?[yY][oO][uU][tT][uU][bB][eE](?:-nocookie|kids)?\.com|
                            (?:www\.)?deturl\.com/www\.youtube\.com|
                            (?:www\.)?pwnyoutube\.com|
                            (?:www\.)?hooktube\.com|
                            (?:www\.)?yourepeat\.com|
                            tube\.majestyc\.net|
                            {invidious}|
                            youtube\.googleapis\.com)/                        # the various hostnames, with wildcard subdomains
                         (?:.*?\#/)?                                          # handle anchor (#/) redirect urls
                         (?:                                                  # the various things that can precede the ID:
                             (?:(?:v|embed|e|shorts|live)/(?!videoseries|live_stream))  # v/ or embed/ or e/ or shorts/
                             |(?:                                             # or the v= param in all its forms
                                 (?:(?:watch|movie)(?:_popup)?(?:\.php)?/?)?  # preceding watch(_popup|.php) or nothing (like /?v=xxxx)
                                 (?:\?|\#!?)                                  # the params delimiter ? or # or #!
                                 (?:.*?[&;])??                                # any other preceding param (like /?s=tuff&v=xxxx or ?s=tuff&amp;v=V36LpHqtcDY)
                                 v=
                             )
                         ))
                         |(?:
                            youtu\.be|                                        # just youtu.be/xxxx
                            vid\.plus|                                        # or vid.plus/xxxx
                            zwearz\.com/watch|                                # or zwearz.com/watch/xxxx
                            {invidious}
                         )/
                         |(?:www\.)?cleanvideosearch\.com/media/action/yt/watch\?videoId=
                         )
                     )?                                                       # all until now is optional -> you can pass the naked ID
                     (?P<id>[0-9A-Za-z_-]{{11}})                              # here is it! the YouTube video ID
                     (?(1).+)?                                                # if we found the ID, everything can follow
                     (?:\#|$)|)	invidiousa  (?x)
            (?:
                <(?:[0-9A-Za-z-]+?)?iframe[^>]+?src=|
                data-video-url=|
                <embed[^>]+?src=|
                embedSWF\(?:\s*|
                <object[^>]+data=|
                new\s+SWFObject\(
            )
            (["\'])
                (?P<url>(?:https?:)?//(?:www\.)?youtube(?:-nocookie)?\.com/
                (?:embed|v|p)/[0-9A-Za-z_-]{11}.*?)
            \1z(?xs)
            <a\s[^>]*\bhref="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"
            \s[^>]*\bclass="[^"]*\blazy-load-youtubevideo)z2/s/player/(?P<id>[a-zA-Z0-9_-]{8,})/(?:tv-)?playerz/(?P<id>[a-zA-Z0-9_-]{8,})/player(?:_ias\.vflset(?:/[a-zA-Z]{2,3}_[a-zA-Z]{2,3})?|-plasma-ias-(?:phone|tablet)-[a-z]{2}_[A-Z]{2}\.vflset)/base\.js$z%\b(?P<id>vfl[a-zA-Z0-9_-]+)\b.*?\.js$)json3srv1srv2srv3ttmlsrtvtt)
android_vrweb
web_safari)rT   )tv_downgradedrU   rV   )rW   web_creatorrU   Fyoutubez6https://www.youtube.com/watch?v=BaW_jenozKc&t=1s&end=9idBaW_jenozKcextmp4titleu#   youtube-dl test video "'/\ä↭𝕐	age_limitr   availabilitypublic
categorieszScience & TechnologychannelzPhilipp Hagemeisterchannel_follower_count
channel_idUCLqxVugv74EIW3VWh2NOa3Qchannel_urlz8https://www.youtube.com/channel/UCLqxVugv74EIW3VWh2NOa3Qcomment_countdescriptionz$md5:8fb536f4877b8a7455c2ec23794dbc22duration
   end_time	   heatmapz	count:100
like_countlive_statusnot_liveTr   zcount:1zre:https?://i\.ytimg\.com/.+i!kP20121002z@PhilippHagemeisterz+https://www.youtube.com/@PhilippHagemeister)
playable_in_embed
start_timetags	thumbnail	timestampupload_dateuploaderuploader_iduploader_url
view_countzVideo unavailable)url	info_dictskipzEmbed-only video (#1746)z%//www.YouTube.com/watch?v=yZIXLfi8CZQyZIXLfi8CZQzCPrincipal Sexually Assaults A Teacher - Episode 117 - 8th June 2012   z$md5:09b78bd971f1e3e289601dfba15ca4f720120608)rZ   r\   r^   r_   ri   rx   zPrivate video)noter}   r~   r   z!Use the first video ID in the URLz9https://www.youtube.com/watch?v=BaW_jenozKc&v=yZIXLfi8CZQrs   )ru   rv   rw   rx   ry   rz   r{   r|   z.256k DASH audio (format 141) via DASH manifestz+https://www.youtube.com/watch?v=a9LDPn-MO4Iza9LDPn-MO4Im4azUHDTV TEST 8K VIDEO.mp48KVIDEOzUC8cn-cnCZ2FnxmjfkoLGpsQz8https://www.youtube.com/channel/UC8cn-cnCZ2FnxmjfkoLGpsQ <   
media_typezcount:8ijPz@8KVIDEOz https://www.youtube.com/@8KVIDEO141)formatskip_downloadyoutube_include_dash_manifestzformat 141 not served anymore)r   r}   r~   paramsr   z+https://www.youtube.com/watch?v=IB3lcPjvWLAIB3lcPjvWLAzJAfrojack, Spree Wilson - The Spark (Official Music Video) ft. Spree WilsonMusicAfrojackUChuZAo1RKL85gev3Eal9_zgchannel_is_verifiedz8https://www.youtube.com/channel/UChuZAo1RKL85gev3Eal9_zgz$md5:8f5e2b82460520b619ccac1f509d43bf   zcount:19iTWR20131011z@AfrojackVEVOz%https://www.youtube.com/@AfrojackVEVO)
r   rs   ru   rv   rw   rx   ry   rz   r{   r|   z141/bestaudio[ext=m4a])r}   r~   r   z6Embed allowed age-gated video; works with web_embeddedz'https://youtube.com/watch?v=HtVdAasjOgUHtVdAasjOgUz7The Witcher 3: Wild Hunt - The Sword Of Destiny Trailer
needs_authGamingzThe WitcherUCzybXLxv08IApdjdN0mJhEgz8https://www.youtube.com/channel/UCzybXLxv08IApdjdN0mJhEgz$md5:595a43060c51c2a8cb61dd33c18e5fbd   zcount:17iﱐS20140605z@thewitcherz#https://www.youtube.com/@thewitcherr   z'Age-restricted; requires authenticationz=Formerly an age-gated video with embed allowed in public sitez'https://youtube.com/watch?v=HsUATh_Nc2UHsUATh_Nc2UzGodzilla 2 (Official Video)EntertainmentFlyingKittyUCYQT13AtrJC0gsM1far_zJgz8https://www.youtube.com/channel/UCYQT13AtrJC0gsM1far_zJgz$md5:bf77e03fcae5529475e500129b05668a   zcount:2it^20200408z@FlyingKitty900z'https://www.youtube.com/@FlyingKitty900)r   r}   r~   r   z6Age-gated video embedable only with clientScreen=EMBEDz'https://youtube.com/watch?v=Tq92D6wQ1mgTq92D6wQ1mgz#[MMD] Adios - EVERGLOW [+Motion DL]zProjekt MelodyzUC1yoRdFoFJaCY-AGfD9W0wQz8https://www.youtube.com/channel/UC1yoRdFoFJaCY-AGfD9W0wQz$md5:17eccca93a786d51bc67646756894066j   zcount:5it^20191228z@ProjektMelodyz&https://www.youtube.com/@ProjektMelodyz"Non-age-gated non-embeddable videoz'https://youtube.com/watch?v=MeJVWBSsPAYMeJVWBSsPAYz%OOMPH! - Such Mich Find Mich (Lyrics)z
Herr LurikzUCdR3RSDPqub28LjZx0v9-aAz8https://www.youtube.com/channel/UCdR3RSDPqub28LjZx0v9-aAz$md5:205c1049102a4dffa61e4831c1f16851   ru   iQ20130730z
@HerrLurikz"https://www.youtube.com/@HerrLurik)rv   rw   rx   ry   rz   r{   r|   )r   r}   r~   zNon-bypassable age-gated videoz'https://youtube.com/watch?v=Cr381pDsSsA)r   r}   only_matching__2ABJjxzNozDeadmau5 - Some Chords (HD)deadmau5zUCYEK6xds6eo-3tr4xRdflmQz8https://www.youtube.com/channel/UCYEK6xds6eo-3tr4xRdflmQz$md5:c27e1e9e095a3d9dd99de2f0f377ba06i
  zcount:14i<K20100430z	@deadmau5z!https://www.youtube.com/@deadmau5zDASH manifest missing)r}   r~   expected_warningsr   lqQg6PlCWgIz5Hockey - Women -  GER-AUS - London 2012 Olympic GamesSportsOlympicsUCTl3QQTvqHFjurroKxexy2Qz8https://www.youtube.com/channel/UCTl3QQTvqHFjurroKxexy2Qz$md5:04bbbf3ccceb6795947572ca36f45904i  was_live
livestream20120731iDPzcount:10iZtU20150827z	@Olympicsz!https://www.youtube.com/@Olympics)
release_daterelease_timestampru   rv   rw   rx   ry   rz   r{   r|   z+https://www.youtube.com/watch?v=_b-2C3KPAM0z_b-2C3KPAM0u8   [A-made] 變態妍字幕版 太妍 我就是這樣的人unlistedzPeople & Blogsu	   孫ᄋᄅzUCS-xxCmRaA6BFdmgDPA_BIwz8https://www.youtube.com/channel/UCS-xxCmRaA6BFdmgDPA_BIwz$md5:636f03cf211e7687daffe5bded88a94fU   gqq?zcount:11iyM20110310z
@AllenMeowz"https://www.youtube.com/@AllenMeow)	stretched_ratioru   rv   rw   rx   ry   rz   r{   r|   qEJwOuvDf7I)r}   r   z+https://www.youtube.com/watch?v=FIl7x6_3R5YFIl7x6_3R5Yuc   [60fps] 150614  마마무 솔라 'Mr. 애매모호' 라이브 직캠 @대학로 게릴라 콘서트dorappi2000UCNlmrKRHLHcd2gq6LtPOTlQz8https://www.youtube.com/channel/UCNlmrKRHLHcd2gq6LtPOTlQz$md5:116377fd2963b81ec4ce64b542173306   zcount:12iU20150626z@dorappi2000z$https://www.youtube.com/@dorappi2000z)https://www.youtube.com/embed/CsmdDsKjzN8CsmdDsKjzN8u1   Retransmisión XVIII Media maratón Zaragoza 2015zAirtek | LED streamingUCzTzUmjXxxacNnL8I3m4LnQz8https://www.youtube.com/channel/UCzTzUmjXxxacNnL8I3m4LnQz$md5:fcac84e6c545114766f670236fc10196i*  20150510i3OUzcount:31iCU20150501z@airtekledstreaming7916z/https://www.youtube.com/@airtekledstreaming7916135z+https://www.youtube.com/watch?v=zaPI8MvL8pgz+https://www.youtube.com/watch?v=gVfLd0zydlozhttps://vid.plus/FlRa-iH7PGwz_https://zwearz.com/watch/9lWxNJF-ufM/electra-woman-dyna-girl-official-trailer-grace-helbig.htmlz+https://www.youtube.com/watch?v=lsguqyKfVQglsguqyKfVQgz4{dark walk}; Loki/AC/Dishonored; collab w/Elflover21zFilm & AnimationIronSoulElfUCTSRgz5jylBvFt_S7wnsqLQz8https://www.youtube.com/channel/UCTSRgz5jylBvFt_S7wnsqLQz$md5:8085699c11dc3f597ce0410b0dcbb34a   zcount:13iNV20151119z@IronSoulElfz$https://www.youtube.com/@IronSoulElfz+https://www.youtube.com/watch?v=Ms7iBXnlUO8z+https://www.youtube.com/watch?v=Q39EVAstoRMQ39EVAstoRMz+Clash Of Clans#14 Dicas De Ataque Para CV 4z$md5:ee18a25c350637c8faff806845bddee920151107)rZ   r\   r^   ri   rx   zThis video does not exist.z+https://www.youtube.com/watch?v=FRhJzUSJbGIz+https://www.youtube.com/watch?v=M4gD1WSo5mAM4gD1WSo5mAz`William Fisher, CopyrightX: Lecture 3.2, The Subject Matter of Copyright: Drama and choreography	Educationz/The Berkman Klein Center for Internet & SocietyUCuLGmD72gJDBwmLw06X58SAz8https://www.youtube.com/channel/UCuLGmD72gJDBwmLw06X58SAchapterszcount:4z$md5:a677553cf0840649b731a3024aeff4cci  licensez4Creative Commons Attribution license (reuse allowed)zcount:3i<pT20150128z@BKCHarvardz#https://www.youtube.com/@BKCHarvard)	rs   ru   rv   rw   rx   ry   rz   r{   r|   z+https://www.youtube.com/watch?v=eQcmzGIKrzgeQcmzGIKrzgz8Democratic Socialism and Foreign Policy | Bernie SanderszNews & PoliticszBernie SandersUCH1dpzjCEiGAt8CXkryhkZgz8https://www.youtube.com/channel/UCH1dpzjCEiGAt8CXkryhkZgz$md5:13a2503d7b5904ef4b223aa101628f39i  iNV20151120z@BernieSandersz&https://www.youtube.com/@BernieSanders)ro   rp   r   rs   ru   rv   rw   rx   ry   rz   r{   r|   zKhttps://www.youtube.com/watch?feature=player_embedded&amp;amp;v=V36LpHqtcDYz+https://www.youtube.com/watch?v=i1Ko8UG-Tdoz+https://www.youtube.com/watch?v=yYr8q0y5JfguGpuVWrhIzEzPiku - Trailerz$md5:c36bd60c3fd6f1954086c083c72092eb20150811zStandard YouTube License)rZ   r\   r^   ri   rx   r   zThis video is not available.z+https://www.youtube.com/watch?v=iqKdEhx-dD4ziqKdEhx-dD4zIsolation - Mind Field (Ep 1)VsaucezUC6nSFpj9HTCZ5t-N3Rm3-HAz8https://www.youtube.com/channel/UC6nSFpj9HTCZ5t-N3Rm3-HAz$md5:f540112edec5d09fc8cc752d3d4ba3cdi%  iקX20170118z@Vsaucezhttps://www.youtube.com/@VsaucezSkipping DASH manifestz+https://www.youtube.com/watch?v=6SJNVb0GnPI6SJNVb0GnPIz Race Differences in Intelligencez$md5:5d161533167390427a1f8ee89a1fc6f1i  20140124)rZ   r\   r^   ri   rj   rx   zJThis video has been removed for violating YouTube's policy on hate speech.1t24XAntNCYzsJL6WA-aGkQz&https://invidio.us/watch?v=BaW_jenozKcz1https://redirect.invidious.io/watch?v=BaW_jenozKcz)https://redirect.invidious.io/Yh0AhrY9GjAz+https://www.youtube.com/watch?v=s7_qI6_mIXcz+https://www.youtube.com/watch?v=Z4Vy8R84T1Uz-https://music.youtube.com/watch?v=MgNrAu2pzNsMgNrAu2pzNszVoyeur Girlalbumz"it's too much love to know my dear	alt_titleartistsStephenzUC-pWHpBjdGG69N9mM2auIAAz8https://www.youtube.com/channel/UC-pWHpBjdGG69N9mM2auIAAcreatorsz$md5:7ae382a65843d6df2685993e90a8628f   20190313i\20190312)rj   rn   ro   rp   r   rs   r   ru   rv   rw   trackrx   ry   r|   z/https://www.youtubekids.com/watch?v=3b8nCWDgZ6QDJztXj2GPflDJztXj2GPfkz9Panjabi MC - Mundian To Bach Ke (The Dictator Soundtrack)z$md5:bf577a41da97918e94fa9798d922882520090125z
Panjabi MCz@Beware of the Boys (Mundian to Bach Ke) - Motivo Hi-Lectro Remixz'Beware of the Boys (Mundian To Bach Ke))rZ   r\   r^   ri   rx   artistr   r   z+https://www.youtube.com/watch?v=x41yOUIvK2kx41yOUIvK2kzIMG 3456zPets & Animalszl'Or Vert asblUCo03ZQPBW5U4UC3regpt1nwz8https://www.youtube.com/channel/UCo03ZQPBW5U4UC3regpt1nw   i?Y20170613z@ElevageOrVertz&https://www.youtube.com/@ElevageOrVertz+https://www.youtube.com/watch?v=CHqg6qOn4noCHqg6qOn4noz+Part 77   Sort a list of simple types in c#	kudvenkatUCCTVrRB5KpIiK6V2GGVsR1Qz8https://www.youtube.com/channel/UCCTVrRB5KpIiK6V2GGVsR1Qz$md5:b8746fa52e10cdbf47997903f13b20dci
  i@"R20130831z@Csharp-video-tutorialsBlogspotz7https://www.youtube.com/@Csharp-video-tutorialsBlogspot)rp   r   rs   ru   rv   rw   rx   ry   rz   r{   r|   z+https://www.youtube.com/watch?v=gVfgbahppCYz1https://www.youtube.com/watch_popup?v=63RmMXCd_bQOtqTfy26tG0zBurn Outz	Every DayzThe Cinematic OrchestraUCIzsJBIyo8hhpFm1NK0uLgwz8https://www.youtube.com/channel/UCIzsJBIyo8hhpFm1NK0uLgwz$md5:fee8b19b7ba433cc2957d1c7582067acif  20020513i  inT20141120)rj   rn   ro   rp   r   rs   r   release_yearru   rv   rw   r   rx   ry   r|   z+https://www.youtube.com/watch?v=nGC3D_FkCmgz+https://www.youtube.com/watch?v=SZJvDhaSDncSZJvDhaSDnczESan Diego teen commits suicide after bullying over embarrassing videozCBS MorningszUC-SJ6nODDmufqBzPBwCvYvQz8https://www.youtube.com/channel/UC-SJ6nODDmufqBzPBwCvYvQz$md5:acde3a73d3f133fc97e837a9f76b53b7   i6oS20140716z@CBSMorningsz$https://www.youtube.com/@CBSMorningscBvYw8_A0vQu:   4K Ueno Okachimachi  Street  Scenes  上野御徒町歩きzTravel & EventszWalk around JapanUC3o_t8PzBmXf5S9b7GLx1Mwz8https://www.youtube.com/channel/UC3o_t8PzBmXf5S9b7GLx1Mwz$md5:ea770e474b7cd6722b4c95b833c03630i  rv   i ڷ_20201120z@walkaroundjapan7124z,https://www.youtube.com/@walkaroundjapan7124)rw   rx   ry   rz   r{   r|   WaOKSUlf4TMz-https://music.youtube.com/watch?v=XclachpHxisz+https://www.youtube.com/watch?v=wsQiKKfKxugz+https://www.youtube.com/watch?v=YOelRv7fMxYYOelRv7fMxY3gpzDIGGING A SECRET TUNNEL Part 1
colinfurzezUCp68_FLety0O-n9QU6phsgwz8https://www.youtube.com/channel/UCp68_FLety0O-n9QU6phsgwz$md5:5d5991195d599b56cd0c4148907eec50iT  zcount:6i`20210624z@colinfurzez#https://www.youtube.com/@colinfurzeplayer_clientandroid17)extractor_argsr   r   zAndroid client broken)r}   r~   r   r   r  player_skipconfigs)r}   r   r   z*https://www.youtube.com/shorts/BGQWPY4IigYStoryboardsz+https://www.youtube.com/watch?v=5KLPxDtMqe85KLPxDtMqe8mhtmlzYour Brain is PlasticSciShowzUCZYTClx2T1of7BRZ86-8fowz8https://www.youtube.com/channel/UCZYTClx2T1of7BRZ86-8fowz$md5:89cd86034bdb5466cd87c6ba206cd2bc   iOx0S20140324z@SciShowz https://www.youtube.com/@SciShow)r   r   z+https://www.youtube.com/watch?v=2NUZ8W2llS42NUZ8W2llS4u,   The NP that test your phone performance 🙂zLeon NguyenUCRqNBSOHgilHfAczlUmlWHAz8https://www.youtube.com/channel/UCRqNBSOHgilHfAczlUmlWHAz$md5:144494b24d4f9dfacb97c1bbef5de84d   zcount:23iGa20220103z@LeonNguyenz#https://www.youtube.com/@LeonNguyenz+https://www.youtube.com/watch?v=mzZzzBU6lrMmzZzzBU6lrMz$I Met GeorgeNotFound In Real Life...QuackityUC_8NknAFiyhOUaZqHR3lq3Qz8https://www.youtube.com/channel/UC_8NknAFiyhOUaZqHR3lq3Qz$md5:42e72df3d4d5965903a2b9359c3ccd25i  iNazcount:26z	@Quackityz!https://www.youtube.com/@Quackity)r   rs   r   r   ru   rv   rw   rx   ry   rz   r{   r|   z+https://www.youtube.com/watch?v=jfKfPfyJRdkjfKfPfyJRdkz	Lofi GirlUCSJ4gkVC6NrvII8umztf0Owz8https://www.youtube.com/channel/UCSJ4gkVC6NrvII8umztf0Owconcurrent_view_countz$md5:48841fcfc1be6131d729fa7b4a7784cbis_live20220712ibbzcount:32i-ebz	@LofiGirlz!https://www.youtube.com/@LofiGirlz+https://www.youtube.com/watch?v=tjjjtzRLHvAtjjjtzRLHvAu*   ハッシュタグ無し };if window.ytcsi
LesmiscoreUCdqltm_7iv1Vs6kp6Syke5Az8https://www.youtube.com/channel/UCdqltm_7iv1Vs6kp6Syke5A   shorti:b20220323z@lesmiscorez#https://www.youtube.com/@lesmiscorez+https://www.youtube.com/watch?v=el3E4MbxRqQel3E4MbxRqQz%dlp test video 2 - primary sv no desczcole-dlp-test-acczUCiu-3thuViMebBjw_5nWYrAz8https://www.youtube.com/channel/UCiu-3thuViMebBjw_5nWYrA   iqc20220908z
@coletdjnzz"https://www.youtube.com/@coletdjnzz+https://www.youtube.com/watch?v=gHKT4uU8ZnggHKT4uU8Zngz$dlp test video title primary (en-GB)z$md5:e8c098ba19888e08554f960ffbf6f90eirb20220729langfr)r  r   z!Preferring "fr" translated fields)r}   r~   r   r   z6 channel audioz+https://www.youtube.com/watch?v=zgdo7-RRjgoz#Multiple HLS formats with same itagz+https://www.youtube.com/watch?v=kX3nB4PpJkokX3nB4PpJkoz$Last To Take Hand Off Jet, Keeps It!MrBeastUCX6OQ3DkcsbYNE6H8uQQuVAz8https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVAz$md5:42731fced13eff2c48c099fbb5c1b3a0i  iP	pc20221112z@MrBeastz https://www.youtube.com/@MrBeastiosz233-1zPO Token Requiredz,Audio formats with Dynamic Range Compressionz+https://www.youtube.com/watch?v=Tq92D6wQ1mgwebmz251-drcz5Support /live/ URL + media type for post-live contentz(https://www.youtube.com/live/qVv6vCqciTMqVv6vCqciTMu   【 #インターネット女クリスマス 】3Dで歌ってはしゃぐインターネットの女たち【月ノ美兎/名取さな】u   さなちゃんねるUCIdEIHpS0TdkqRkHL5OkLtAz8https://www.youtube.com/channel/UCIdEIHpS0TdkqRkHL5OkLtAz$md5:6aebf95cc4a1d731aebc01ad6cc9806diV  20221223ici`cz@sana_natoriz$https://www.youtube.com/@sana_natori)rp   r   rs   r   r   ru   rv   rw   rx   ry   rz   r{   r|   z+https://www.youtube.com/watch?v=wSSmNUl9SnwwSSmNUl9Snwz&The Computer Hack That Saved Apollo 14zScott ManleyzUCxzC4EngIsMrPmbm6Nxvb-Az8https://www.youtube.com/channel/UCxzC4EngIsMrPmbm6Nxvb-Az$md5:f4bed7b200404b72a394c2f97b782c02i  i9@Y20170831z@scottmanleyz$https://www.youtube.com/@scottmanleywebpage)r  r  z*https://www.youtube.com/shorts/18NGQq7p3LY18NGQq7p3LYu8   아이브 이서 장원영 리즈 삐끼삐끼 챌린지u   ㅇㅇUCC25oTm2J7ZVoi5TngOHg9gz8https://www.youtube.com/channel/UCC25oTm2J7ZVoi5TngOHg9gr   if20240822u   @으아-v1ku#   https://www.youtube.com/@으아-v1kz-https://music.youtube.com/watch?v=DbCvuSGfR3YDbCvuSGfR3YBack Around   half·aliver   Conditions Of A Punkr   20221202r   i  z$md5:bfc0e2b3cc903a608d8a85a13cb50f95ry   u   half•aliveUCYQrYophdVI3nVDPOnXyIngz8https://www.youtube.com/channel/UCYQrYophdVI3nVDPOnXyIng   z:https://i.ytimg.com/vi_webp/DbCvuSGfR3Y/maxresdefault.webp)r8  r9  r7  i}c20221201)rh   r|   ro   r_   rj   rv   rn   rb   ru   r   rw   rx   rs   r`   rp   z+https://www.youtube.com/watch?v=brhfDfLdDZ8brhfDfLdDZ8z/This is the WORST Movie Science We've Ever Seenz$md5:8afd0a3cd69ec63438fc573580436f92
Open Saucerz   z@opensauceliver{   z&https://www.youtube.com/@opensauceliveUC2EiGVmCeD79l_vZ204DUSwz8https://www.youtube.com/channel/UC2EiGVmCeD79l_vZ204DUSwr|   i  z0https://i.ytimg.com/vi/brhfDfLdDZ8/hqdefault.jpg)MoonfallzBad Sciencer?  zSauce+zThe Backyard ScientistzWilliam Osmanz	Allen PanzWilliam Osman 2ih20251003)rb   ru   r   rw   rx   rs   r`   rp   z+https://www.youtube.com/watch?v=_A9KsMbWh4E_A9KsMbWh4Eu)   【MV】薫習 - LIVE UNION【RK Music】z$md5:9b3dc2b91103f303fcc0dac8617e7938RK Musicz@RKMusic_incz$https://www.youtube.com/@RKMusic_inczUCiLhMk-gmE2zgF7KGVyqvFwz8https://www.youtube.com/channel/UCiLhMk-gmE2zgF7KGVyqvFw   z:https://i.ytimg.com/vi_webp/_A9KsMbWh4E/maxresdefault.webp)rD  HACHIu   焔魔るり CH. / Ruri Enmau   瀬戸乃ととu   水瀬 凪/MINASE Nagiii20251031)
rb   ru   r   rw   rx   r   r   rs   r`   rp   z+https://www.youtube.com/watch?v=f6HNySwZV4cf6HNySwZV4cdlptestvideo2z4https://i.ytimg.com/vi/f6HNySwZV4c/maxresdefault.jpgiUe20240308   zcount:15)rb   ru   rw   rx   r   r   rs   r`   rp   rh   comments)r   getcommentsz+https://www.youtube.com/watch?v=3dHQb2Nhma03dHQb2Nhma0u   Tɪtleabcdefgz@abcdefg-d5t2cz&https://www.youtube.com/@abcdefg-d5t2cUCayEJzV8XSSJkPdA7OAsbewz8https://www.youtube.com/channel/UCayEJzV8XSSJkPdA7OAsbew   z4https://i.ytimg.com/vi/3dHQb2Nhma0/maxresdefault.jpgiTi20251231zcount:9)ru   rw   rx   rs   r`   rp   rh   rL  zehttp://www.improbable.com/2017/04/03/untrained-modern-youths-and-ancient-masters-in-selfie-portraits/zmsN87y-iEx0z!Feynman: Mirrors FUN TO IMAGINE 6rx   20080526z$md5:873c81d308b979f0e23ee7e620b312a3zUCCeo--lls1vna5YJABWAcVAzChristopher Sykesz8https://www.youtube.com/channel/UCCeo--lls1vna5YJABWAcVA   z6https://www.youtube.com/@ChristopherSykesDocumentariesz@ChristopherSykesDocumentariesi :H)	r|   rb   rd   ry   r{   rz   rn   rw   r   z?https://badzine.de/news/als-marc-zwiebler-taufik-hidayat-schlugbSVcWOq397gzPTAUFIK TUNJUKKAN KELASNYA !!! : Taufik Hidayat VS Marc Zwiebler Canada Open 2011zBadminton Addict IdUCfCpKOwQGUe2FUJzYNadQcQz8https://www.youtube.com/channel/UCfCpKOwQGUe2FUJzYNadQcQz$md5:2c3737da9a575f301a8380b4d60592a8i  i`20210519z@badmintonaddictid8958z.https://www.youtube.com/@badmintonaddictid8958zMhttps://lothype.com/2025-chino-hills-hs-snare-quad-features-wgi2025-drumline/lC21AX_pCfAz=2025 Chino Hills HS Snare & Quad Features! #wgi2025 #drumline
DrumlineAVUCqdfUdyiQOZMvW5PcTTYikQz8https://www.youtube.com/channel/UCqdfUdyiQOZMvW5PcTTYikQ0   locationWESTMINSTERzcount:72ig20250218z@DrumlineAVz#https://www.youtube.com/@DrumlineAVzIhttps://rabota7.ru/%D0%91%D1%83%D1%85%D0%B3%D0%B0%D0%BB%D1%82%D0%B5%D1%80DexR8_tTSsQu3   Работа бухгалтером в Москвеu:   Работа в Москве свежие вакансииUCG3qz_gefGaMiSBvmaxN5WQz8https://www.youtube.com/channel/UCG3qz_gefGaMiSBvmaxN5WQz$md5:b779d3d70af4efda26cf62b76808c0e3*   zcount:7i<1Y20170602u7   @РаботавМосквесвежиевакансииuO   https://www.youtube.com/@РаботавМосквесвежиевакансииgenericimpersonatechromezhttps://www.uca.ac.uk/z
www.uca.aczAUCA | Creative Arts Degrees UK | University for the Creative Artsz$md5:179c7a06ea1ed01b94ff5d56cb18d73bz8/media/uca-2020/hero-headers/2025-prospectus-all-2x2.jpg)rZ   r^   r_   ri   rv   )r}   r~   playlist_countr   actualtvzplayer_ias.vflset/en_US/base.jsz#player_ias_tcc.vflset/en_US/base.jsz#player_ias_tce.vflset/en_US/base.jszplayer_es5.vflset/en_US/base.jszplayer_es6.vflset/en_US/base.jsz%tv-player-ias.vflset/tv-player-ias.jsz%tv-player-es6.vflset/tv-player-es6.jsz,player-plasma-ias-phone-en_US.vflset/base.jsz-player-plasma-ias-tablet-en_US.vflset/base.js)	maintcctcees5es6rh  tv_es6phonetabletc                 l    ddl m}  ||      }|j                  dd g      d   ryt        |   |      S )Nr   )r*   listF)yt_dlp.utilsr*   getsupersuitable)clsr}   r*   qs	__class__s       X/var/www/descvideos/venv/lib/python3.12/site-packages/yt_dlp/extractor/youtube/_video.pyrv  zYoutubeIE.suitableh  s7    )c]66&4&!!$w$$    c                 N    t        |   |i | i | _        i | _        d | _        y N)ru  __init___code_cache_player_cache_pot_director)selfargskwargsry  s      rz  r~  zYoutubeIE.__init__q  s-    $)&)!r{  c                 b    t         |           t        |       | _        t	        |       | _        y r}  )ru  _real_initializer   r  r   _jsc_director)r  ry  s    rz  r  zYoutubeIE._real_initializew  s(     "4T:4T:r{  c           
          t        j                         t        j                         D cg c]  }|j                  d      s| c} fd fd}	D ]e  }|d<   t	        j
                   j                  |d   ||	 xr |j                               }
r|
|d<   d|d<   Ot         |
i             |d<   |d= g y c c}w )	Nis_from_startc                 "   t        j                          |z   k  ry 
j                  d      \  }}}}}}t        |dt              }t        |dt              }
j	                  ||||      \  }}}|dk(  	t        j                          y )NrU   .videoDetailsexpected_type.microformatplayerMicroformatRendererr  )time_initial_extractr2   dict_list_formats)	format_iddelay_prs
player_urlvideo_detailsmicroformatsrp   formatsr  r  smuggled_datart   r}   video_idwebpage_urls           rz  refetch_manifestzDYoutubeIE._prepare_live_from_start_formats.<locals>.refetch_manifest  s    yy{j500*.*?*?]K+B'Aq!QZ(.CSWXM'F"$L *.););HlTacfhr)s&A{GQ!Y.GJr{  c                 &    j                  d      D ]n  }5    |       ddd       t         fdD        d      }|s"s	 d|_        nd  t                |_        P|j	                  d      s y|d   |d   fc S  y# 1 sw Y   dxY w)	zZ
            @returns (manifest_url, manifest_stream_number, is_live) or None
            FfatalNc              3   4   K   | ]  }|d    k(  s|  yw)r  N ).0fr  s     rz  	<genexpr>zOYoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed.<locals>.<genexpr>  s     L+)0K!L   z: Video is no longer livez*Cannot find refreshed manifest for format manifest_urlmanifest_stream_number)RetryManagernexterrorr   rt  )
r  r  retryr  r  r  lockr  r  r  s
   `   rz  mpd_feedz<YoutubeIE._prepare_live_from_start_formats.<locals>.mpd_feed  s     ***7 O 7$Y67 LWLdS")1
2K&L(RS\R]^q^s]t&u uu^,  (!,D*EwNN#O$ #7 7s   
BB	r  r  	fragmentshttp_dash_segments_generatorprotocol)		threadingLockr  rt  	functoolspartial_live_dash_fragmentscopyr   )r  r  r  live_start_timer}   r  r  r  r  r  genr  r  rt   s   ``` ````   @@@rz   _prepare_live_from_start_formatsz*YoutubeIE._prepare_live_from_start_formats|  s    ~~YY[
%@)?1@	% 	%	 	0  		'A"AiL##D$=$=x;$3X7{?WqvvxYC!$+ >*!)#b'!2+o&		'S As   CCc              #      K   d\  }}d\  d}	j                  d      xs t        j                         }
|
|xs |
z
  |kD  }|r j                  t        d      d       d}|	dd c}}d\   fd	} j	                  d
| d        r4t        j                         }dkD  ry |r.	  j                  |d ddd      }t        |d       dz  d }M |ddkD        \  }dz  |sd|kD  rd }ldz  |	dk  r
|dk  r|	z   }|r!t        |t        |d   d   z        z
        }	 t        |      D ]6  } |dd      \  }}|s|dz
  }t        d      t        d|       }|d 8 |k(  rdz  nd}ry t        j                  t        d||z   t        j                         z
               r3y y # t        $ r d }Y w xY w# t        $ r Y Vw xY ww)N)r!  i )NNTr   startzStarting download from the last 120 hours of the live stream since YouTube does not have data before that. If you think this is wrong,T	only_onceNNc                    }	j                  dd       }|xs% |xr! t        |t              xr |j                  dk(  } 
|rdnd      xs df\  | s|rsdfS |k(  rdfS r}n9	 j	                  d ddd      \  }}|s	dz  dfS t        fd	|D              }|d
   |d   sJ t        t        j                  dd   d         j                  d            }d|fS # t
        $ r d }Y rw xY w)N
last_errori  r!  iPF  FTr   errnoter     c              3   4   K   | ]  }|d    k(  s|  yw)r  Nr  )r  xstream_numbers     rz  r  zUYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd.<locals>.<genexpr>  s     `a15M3NR_3_`r  r  fragment_base_urlz(?:/|^)sq/(\d+)pathr   )pop
isinstancer   status"_extract_mpd_formats_and_subtitlesr   r  intresearchgroup)refresh_sequence	immediateold_mpd_urlr  expire_fastfmt_infofmtsr  	_last_seqctxr  r  r  r  last_seqmanifestless_orig_fmtr  mpd_urlno_fragment_scorer  r  s            rz  _extract_sequence_from_mpdzBYoutubeIE._live_dash_fragments.<locals>._extract_sequence_from_mpd  sW    "Kt4J#v
(uz*i7X(u]g]n]nru]uK/7	1Y^/_ 0R3:M52Q ,G]G#w (?* G+>)$0 "EEE5 F OGD! %*% (?*`4`` -I ()< =$$$BII&8)B-:OPVVWXYZI?" &  D s   0C. .C<;C<[z"] Generating fragments for format    Fr  c                 2    t        | j                  d         S )NzX-Head-Seqnum)r"   headersr  s    rz  <lambda>z0YoutubeIE._live_dash_fragments.<locals>.<lambda>  s    ;qyy?Y3Z r{  r  rK  r   r  rj   zbreaking out of outer loopzsq/)r}   fragment_countr!  )rt  r  report_warningr   write_debug_request_webpager   r4   maxr  ranger;   sleep)r  r  r  r  r  r  r  
FETCH_SPANMAX_DURATIONbegin_indexdownload_start_timelack_early_segments	known_idxlast_segment_urlr  
fetch_timeurlhshould_continueidxr  r  r  r  r  r  r  r  s   ` ` ```             @@@@@@@rz  r  zYoutubeIE._live_dash_fragments  s    #, 
L*:'!ggg.=$))+1_5[H[\_kk 3V!Wbf   h #'9Da6	$&6'1$	$	# 	#@ 	1XJ&HTUJ 2% 00($UEQV 1 XD #4)Z[#%*%'+$,FtM^acMc,d)!Q&!&8##' MHQ9q=${2	"	8c,)TV-XbJc:c6d+de	 H5 
C)CE5)Q&OQ*$'!G	,-IJJ'./@Cu+'N$/*2 
 (%*%()%$	 % JJs1j:5		CDEu  &  D R " sV   B3G<G A-G<AG, <G<G<G)%G<(G))G<,	G95G<8G99G<c                     | j                  ddg      d   xs | j                  }|dk(  ryt        j                  d|      s| j	                  d| dd	
       y|j                  d      S )Nplayer_js_versionr   r   rg  r  z[0-9]{5,}@[0-9a-f]{8,}zInvalid player JS version "z?" specified. It should be "actual" or in the format of STS@HASHTr  @)_configuration_arg_DEFAULT_PLAYER_JS_VERSIONr  	fullmatchr  split)r  r  s     rz  _get_player_js_versionz YoutubeIE._get_player_js_version"  s     334G"NqQtUYUtUt(||57HI-.?-@ AE FQU   W  &&s++r{  N)	player_idr  c          	         |s	|sJ d       |s| j                  |      }d}| j                         d   }|r||k7  r
d| d| }|}| j                  ddg      d   xs | j                  }|g | j                  d	vr>| j                  d
| ddj                  | j                         d       | j                  }|s;|r| j                  |d       |d	k(  rd}t        dd| d| j                  |          S | j                  |      d   }|s|d	k(  s||k(  rt        d|      S |d	k(  r|r|}nd}| j                  t        |||k7  xr d| d| d| d      d       t        dd| d| j                  |          S )Nz>_construct_player_url must take one of player_id or player_urlFr   Forcing player z in place of player player_js_variantr   r   rg  z Invalid player JS variant name "z " requested. Valid choices are: , Tr  ri  https://www.youtube.com
/s/player//z	Forcing "z" player JS variant for player zoriginal url = z	
        delim)_extract_player_infor  r  _DEFAULT_PLAYER_JS_VARIANT_PLAYER_JS_VARIANT_MAPr  joinr  r;   _get_player_id_variant_and_pathr#   )r  r  r  force_player_idplayer_id_overridevariantactual_variants          rz  _construct_player_urlzYoutubeIE._construct_player_url-  s   Jh(hh&11*=I!88:1="4	"A /0B/CCWXaWbcO*I))*=tDQGj4KjKjBD77BBB27) <&&*ii0K0K&L%MOZ^   ` 55G  D A(" 4
9+QtOjOjkrOsNt6uvv==jI!LGx$77n;T4jAAh( !~%iIgY>]^g]h*ij\*	  ,0	 	 	1 0Jyk4KfKfgnKoJp2qrrr{  r2  c                T    t        |dddt              }|sy | j                  |      S )N).PLAYER_JS_URL).WEB_PLAYER_CONTEXT_CONFIGS.jsUrlF)get_allr  )r  )r2   strr  )r  r2  ytcfgsr  s       rz  _extract_player_urlzYoutubeIE._extract_player_urlZ  s6    !*,].
 ))Z)@@r{  c                     | j                         d   x}r(| j                  d| d       | j                  |      S | j                  dd||      }|r*| j	                  d	|d
|      }|r| j                  |      S y y )Nr   r  Tr  )r  z"https://www.youtube.com/iframe_apizDownloading iframe API JS)r   r  retry_fatalzplayer\\?/([0-9a-fA-F]{8})\\?/zplayer versionr  )r  r  r  _download_webpage_with_retries_search_regex)r  r  r  r  iframe_webpageplayer_versions         rz  _download_player_urlzYoutubeIE._download_player_urlb  s    !%!<!<!>q!AAA/A.BCtT--8J-KK<<0,5 = 2
 !//1>CS[` 0 bN11N1KK  r{  c                 b   | j                  |      }t        t        j                  j	                  |      j
                  d| d      | j                  j                        xs- t        fd| j                  j                         D        d       }|s| j                  d| d       ||fS )Nr
  r  c              3      K   | ]B  \  }}t        j                  t        j                  |      j                  d d            r| D yw)en_USz[a-zA-Z0-9_]+N)r  r  escapereplace)r  kvplayer_paths      rz  r  z<YoutubeIE._get_player_id_variant_and_path.<locals>.<genexpr>u  sE      P[!Q||BIIaL00:JK[Y P[s   AAz7Unable to determine player JS variant
        player = Tr  )r  r-   urllibparseurlparser  _INVERSE_PLAYER_JS_VARIANT_MAPrt  r  itemsr  r  r  r  r  r/  s       @rz  r  z)YoutubeIE._get_player_id_variant_and_pathr  s    --j9	"6<<#8#8#D#I#IZXaWbbcKde5599+F b$ P[==CCEP[\`Kb $$.<1<@  B ';..r{  c                     | j                  |      \  }}}|s!t        j                  ddt        |d            }| d| S )Nz[^a-zA-Z0-9]r  z.js-)r  r  subr,   r5  s        rz  _player_js_cache_keyzYoutubeIE._player_js_cache_key~  sF    *.*N*Nz*Z'	7Kff_c:k53QRGAgY''r{  c                     | j                   D ]  }t        j                  ||      }|s n t        d|      |j	                  d      S )NzCannot identify player rZ   )_PLAYER_INFO_REr  r  r   r  )rw  r  	player_reid_ms       rz  r  zYoutubeIE._extract_player_info  sS    ,, 	KI99Y
3D	K
 !#::.!IJJzz$r{  c           	          | j                  |      }|| j                  vr.| j                  |||d| d| d      }|r|| j                  |<   | j                  j                  |      S )NzDownloading player zDownload of z failed)r  r   r  )r9  r  _download_webpagert  )r  r  r  r  player_js_keycodes         rz  _load_playerzYoutubeIE._load_player  s~    11*= 0 00))HE*=/:&}oW= * ?D 26  /##M22r{  use_disk_cachec                
   d| | j                  |      gt        t        |      }|| j                  v r| j                  |   S |sy | j                  j                  |d   t        |dd   d      }|r|| j                  |<   |S )Nyoutube-r   r   z
2025.07.21)min_ver)r9  mapr/   r  cacheloadr#   )r  namer  rD  
cache_keyscache_iddatas          rz  _load_player_data_from_cachez&YoutubeIE._load_player_data_from_cache  s    tf%t'@'@'LlsS^`jOklt)))%%h//zzx{M8AB<,HR^_+/Dx(r{  c                    d| | j                  |      gt        t        |      }|| j                  vr<|| j                  |<   |r*| j                  j                  |d   t        |dd   |       y y y )NrF  r   r   )r9  rH  r/   r  rI  storer#   )r  rN  rK  r  rD  rL  rM  s          rz  _store_player_data_to_cachez%YoutubeIE._store_player_data_to_cache  s|    tf%t'@'@'LlsS^`jOkl4---+/Dx(

  !mXab\.JDQ  .r{  c           	      z   | j                         d   }|rt        |      S t        |dt        hf      }|r|S |s!d}|rt	        |      | j                  |       y| j                  d|      x}r|S | j                  |||      x}r4t        | j                  d|dd|	            }|r| j                  |d|       |S )
zr
        Extract signatureTimestamp (sts)
        Required to tell API what sig/player version is in use.
        r   STSz5Cannot extract signature timestamp without player urlNstsr  z2(?:signatureTimestamp|sts)\s*:\s*(?P<sts>[0-9]{5})zJS player signature timestamp)r  r  )
r  r  r2   r"   r   r  rO  rB  r$  rR  )	r  r  r  ytcfgr  player_sts_overriderU  	error_msgrA  s	            rz  _extract_signature_timestampz&YoutubeIE._extract_signature_timestamp  s     #99;A>*++55;-"89JOI$Y//	* 33E:FF3FJ$$Xz$GG4Gd00Et/uE 1 K LC 00eZH
r{  c           	         ddj                  fdt        d      D              }t        d      D ]F  \  }}|rdnd}t        |d|dft        	      }|s| j                  d
| d        y t        j                  j                  |      }t        j                  j                  |j                        }	t        t        |	j                  d      xs dgd         dz
        g}
|	j                  dg|g|
dd       |r|	j                  d|
d       t        j                  j                  |j!                  t        j                  j#                  |	d                  }| j%                  ||d| ddd       I y )Nz@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_r   c              3   V   K   | ]   }t        j                  d d      dz      " yw)r      ?   N)randomrandint)r  r  CPN_ALPHABETs     rz  r  z*YoutubeIE._mark_watched.<locals>.<genexpr>  s&     SAl6>>!S#9B#>?Ss   &)   )videostatsPlaybackUrlvideostatsWatchtimeUrlzfully playbackTrackingbaseUrlr  zUnable to mark watchedlenz1.5r   r   2
detailpage)vercpncmtel)stetT)queryzMarking zUnable to mark watchedFr  )r  r  	enumerater!   r:   r  r0  r1  r2  r*   rp  r  floatrt  update
urlunparse_replace	urlencoder?  )r  r  player_responsesrk  is_fullkeylabelr}   
parsed_urlrx  video_lengthr`  s              @rz  _mark_watchedzYoutubeIE._mark_watched  sy    ZggSrSS%&YZ !	7LGS 'HRE,/A3	.R*57C##oeWG$DE..s3J&&z'7'78B  rvve}'?&C Dq HIJLIIuu#"	   		& 
 ,,))##&,,*@*@T*J#KMC ""X%8( # 7?!	7r{  c              #     K   t        j                  d|      }|r/| j                  |j                  d      |        | j                  t
        |   ||      E d {    t        j                  d|      D ]   }| j                  t        |      | |       " t        j                  d|      D ]  }| j                  |d   | |d           y 7 tw)NzZ<link rel="alternate" href="(?P<url>https://www\.youtube\.com/watch\?v=[0-9A-Za-z_-]{11})"r}   z(class="lazyYT" data-youtube-id="([^"]+)"z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\byvii_single_video_player\b[^\'"]*(?P=q1)[^>]+
                data-video_id=(?P<q2>[\'"])([^\'"]+)(?P=q2)r  )	r  r  
url_resultr  StopExtractionru  _extract_from_webpagefindallr5   )rw  r}   r2  mobjid_mry  s         rz  r  zYoutubeIE._extract_from_webpage  s     
 yyi ..E!2C88$$$70g>>> ::I7S 	>C..c!2C==	>  ?@GI 	4A ..2QrU33	4 	?s   ACCA5Cc                 H    | j                  |      }|st        d|       |S )NzInvalid URL: )get_temp_idr   )rw  r}   r  s      rz  
extract_idzYoutubeIE.extract_id	  s*    ??3' =!677r{  c                 T    t        |dt              }| j                  |d d |      S )N)playerOverlaysplayerOverlayRendererdecoratedPlayerBarRendererr  	playerBarchapteredPlayerBarRendererr   r  c                 0    t        t        | d      d      S )N)chapterRenderertimeRangeStartMillis  scale)r   r2   chapters    rz  r  z7YoutubeIE._extract_chapters_from_json.<locals>.<lambda>"	  s    =W&QRZ^,` r{  c                 &    t        | dt              S )N)r  r^   
simpleTextr  )r2   r  r  s    rz  r  z7YoutubeIE._extract_chapters_from_json.<locals>.<lambda>$	  s    <CSV,X r{  )start_functiontitle_functionrj   )r2   rr  _extract_chapters_helper)r  rN  rj   chapter_lists       rz  _extract_chapters_from_jsonz%YoutubeIE._extract_chapters_from_json	  sE    #  "	# ,,`X -  	r{  c           	           t        |dt              } fd fdt        t        d  fd|D              g       S )N)engagementPanels."engagementPanelSectionListRenderercontentmacroMarkersListRenderercontentsr  c                 :    t        j                  | d            S )NtimeDescription)r(   	_get_textr  r  s    rz  r  zCYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<lambda>-	  s    ~dnnWN_6`'a r{  c                 (    j                  | d      S )Nr^   )r  r  s    rz  r  zCYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<lambda>.	  s    w(H r{  c              3   Z   K   | ]"  }j                  t        |d              $ yw)).macroMarkersListItemRendererN)r  r2   )r  r  chapter_timechapter_titlerj   r  s     rz  r  zDYoutubeIE._extract_chapters_from_engagement_panel.<locals>.<genexpr>0	  s8      "*  )),xAf*g*6xQ"*s   (+)r2   rr  r  filter)r  rN  rj   content_listr  r  s   ` ` @@rz  '_extract_chapters_from_engagement_panelz1YoutubeIE._extract_chapters_from_engagement_panel(	  sM    #~  bHF4 "* )"* + -/0 	0r{  c                 l    t        |dddd ddddd	d
t        d      hfd hdt        hfdf
      xs d S )NframeworkUpdatesentityBatchUpdate	mutationsc                 $    |d   d   d   d   dk(  S )NpayloadmacroMarkersListEntitymarkersList
markerTypeMARKER_TYPE_HEATMAPr  r  r.  s     rz  r  z,YoutubeIE._extract_heatmap.<locals>.<lambda>8	  s     9&>?N|\`uu r{  r  r  r  markers.startMillisr  r  c                 B    t        | d         t        | d         z   dz  S )Nr  durationMillisr  )r  r  s    rz  r  z,YoutubeIE._extract_heatmap.<locals>.<lambda>;	  s&    Am,<(=AFVDW@X(X\`'` r{  intensityScoreNormalized)rt   rl   value)r2   r   )r  rN  s     rz  _extract_heatmapzYoutubeIE._extract_heatmap5	  s]    D 3[u/	3,}4/H.IJ`a4}oFQ#   	r{  c                    t        |ddt        hf      }t        |ddt        hf      x}sy t        |ddt        hf      }t        |ddt        hf      xs d}||xs dd	t        |dd
d
t        hfddt        hfdd| j
                  hfddt        hfddt        hfddt        hfddt        hfddddt        d      hfdd      |d n|j                  d      dk(  || j                  |      dS )Nr  commentEntityPayload
properties	commentId#engagementToolbarStateEntityPayloadpublishedTimer   root)rZ   parentr  toolbarlikeCountA11yauthor	channelIddisplayNameavatarThumbnailUrl	isCreator
isVerifiedchannelCommandinnertubeCommandbrowseEndpointcanonicalBaseUrlcommandMetadatawebCommandMetadatar}   r	  )textro   	author_idr  author_thumbnailauthor_is_uploaderauthor_is_verified
author_urlFr  
heartStateTOOLBAR_HEART_STATE_HEARTED)is_favorited
_time_textrw   )r!   r  r2   r  r'   ucid_or_noner:   boolr;   rt  _parse_time_text)r  entitiesr  comment_entity_payload
comment_idtoolbar_entity_payload	time_texts          rz  _extract_commentzYoutubeIE._extract_comment?	  sY   !*8iAWZ^Y_5`!a*+ALR]`c_dCeff
f!*8iAfimhn5o!p !7,Z]Y^9_`fdf	 &
 1%y)cUC(/K=I&d6G6G5HI#]SE:%-/Ck]$S'/tf&E'/v&F')9;M P56794 
 &<%CT377EIff#..y9%
 	
r{  c                    |j                  d      }|sy || j                  |d      | j                  |d      t        |ddd| j                  hf      | j                  |d      t        |dd	d
dt
        hf      |xs dd}| j                  |d      xs d}| j                  |      }|j                  ||d       t        dt        |dt        d            |d<   t        |d      }|||d<   t        |dt              }|d|v |d<   | j                  t        |d      g      }	| j                  |	t        j                        rd|d<   t        |d      }
|
rd|d <   |S )!Nr  contentText	voteCountauthorEndpointr  browseId
authorTextauthorThumbnail
thumbnailsr  r}   r  )rZ   r  ro   r  r  r  r  publishedTimeTextr   )r  rw   r	  )r  r  Fr  r  r  authorIsChannelOwnerr  )actionButtonscommentActionButtonsRendererr  creatorHeartr  authorCommentBadgeTr  pinnedCommentBadge	is_pinned)rt  r  
_get_countr2   r  r:   r  rs  r;   r  r  _extract_badges
_has_badger   VERIFIED)r  comment_rendererr  r  infor  rw   r  comment_abrbadgesr  s              rz  _extract_comment_oldzYoutubeIE._extract_comment_old\	  s   %))+6
 NN#3]C//*:KH%&69IK[]gjnj{j{i|8}~nn%5|D ,-=@QS_acejmxly?z {&
 NN#35HIOR	)))4	#"
 	 %%|4D Gk!5(23\
 **:<RS));D%&"O_ce"#1[#@D %%|4DFZ'[&\]??69#5#56)-D%& !13GH	 $Dr{  c           
   #      K    fd fd} f	dsdd dddt               t               dd  j                  d      dgd	z  z   D        ^}}	|k  ry  j                  |      }
d }d
}|d u }|r$|
s" j                   j	                              }
d}d}t        j                  d      D ]  }|
s n j                   j                  |            }dd    dd    d}|dk(  r|rd}n'dd   |fz  }ndj                  |rdnd|rdnd||      }d }|sd   dk(  rd   dk(  sg |d|rdndg}	  j                  d |
d|||      }d
}d }
t!        |d$d%d&dt"        hf      }t!        ||t$        g '      D ]E  }|r ||      }
d
}|
r  ||||      D ]  }|s   y |   j                  d(|i      }
|
sD    j'                  |d)d*+      }|r/|s,d   dk(  r# j                  d,| d-        j(                  y y y # t        $ rZ}dt        |      j                         v r9|r7 j                  d      d v r j                  d!       Y d }~ y t        d"d#       d }~ww xY ww).Nc                 0    j                  | dg      d   S )Nr   r   )r  )cr  s    rz  r  z,YoutubeIE._comment_entries.<locals>.<lambda>	  s    $*A*A!bT*J1*M r{  c                    d }| D ]  }t        |d      }
j                  |dd      }||d<   
j                  d| d       t         	d      dk7        t	        |fd	t
              xs i }|j                  d
      xs i }
j                  |      xs 
j                  |      }|st        |j                  d            }|s	dk(  rdnd}
j                  d|j                                  |S  |S )NcommentsHeaderRenderer	countTextcommentsCount	est_totalzDownloading ~z	 commentscomment_sorttopc                      | d   d   d      S )NsortMenusortFilterSubMenuRenderersubMenuItemsr  )r  comment_sort_indexs    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_header.<locals>.<lambda>	  s    a
m,GHXYkl r{  serviceEndpointr^   r   ztop commentsznewest firstzSorting comments by )r2   r   	to_screenr  r4   r  rt  _extract_continuation_ep_data_extract_continuationr/   lower)r  _continuationr  comments_header_rendererexpected_comment_countsort_menu_itemsort_continuation_ep	sort_textr  get_single_config_argr  trackers           @rz  extract_headerz2YoutubeIE._comment_entries.<locals>.extract_header	  s=    M# +7AY+Z()-,k?*L& *5+AGK(NN]3I2J)#TU%()>~)NRW)W%X"!(,lnr"t "zwy  (6'9'9:K'L'RPR$ $ B BCW X  !G\`\v\v  xF  ]G$'(:(:7(CD	 2D2I~I!5ioo6G5HIJ  10 ! r{  c              3     	K   |sdd<   |k  ry | D ])  }|sd   k\  rd  t        |d       }|s+t        ||fddggt        i       }j                  ||      }nzt	        |ddt        hf      xs t	        |dt        hf      }t	        |d	t
        hf      st	        |fd
      }	j                  |	|      }|rt	        |dt
        hf      d u|d<   |s|d   }
|j                  d      rd   j                  |
       |
d   v r9|
d   v r|j                  d      sj                  d|rdnd d       d   y d   j                  |
       dxx   dz  cc<   |rdndxx   dz  cc<   | t        |d t              }|st	        |ddt        hf      }t	        |d       x}r) |||
|dz         D ]	  }|s|  t	        |d       sˉdxx   dz  cc<   j                  ||
|dz         }t        j                  |t        t        dd   z
                    E d {    , y 7 w)Nr   current_page_threadtotal_parent_commentsc                     | d   S NcommentThreadRendererr  r  s    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    QG^E_ r{  commentRenderer)commentr,  r  defaultcommentViewModel)
commentKeytoolbarStateKeyc                     |d   v S )N	entityKeyr  )r  r.  comment_keyss     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    !K.\hJh r{  
pinnedTextr  rZ   pinned_comment_idsseen_comment_idsz?Detected YouTube comments looping. Stopping comment extraction zfor this threadr   z$ as we probably cannot get any more.running_totalr   total_reply_commentsc                     | d   d   S )NrepliescommentRepliesRendererr  r  s    rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    q|D\7] r{  
subThreads.c                     |d   S r*  r  r  s     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    JaHb r{  c                     |d   S )NcontinuationItemRendererr  r  s     rz  r  zDYoutubeIE._comment_entries.<locals>.extract_thread.<locals>.<lambda>	  s    QGaEb r{  )r  r$  depth)r4   r!   r  r  r2   r  r  rt  addr  _comment_entries	itertoolsisliceminr  )r  entity_payloadsthread_parentthread_depthr  comment_thread_rendererr  r-  
view_modelr  r  comment_replies_renderer
subthreadsthreadsentrycomment_entries_iterr5  extract_thread	max_depthmax_parentsmax_repliesmax_replies_per_threadr  r$  r  rV  s                   @rz  rR  z2YoutubeIE._comment_entries.<locals>.extract_thread	  s     12-.<'# Ih$1H)I[)X*1';_*`' ''00':>OQo=p<q&*B(8$ #778H-XG
 %%<?QSehlgm>no O'2Dtf1MN  $0
=^ad`e<f#gL' +O=hiH"33HmLG/;JX[W\H]/^fj/j,$T]
;;{+0155jA );!<<!W-A%BB7;;WbKc !''Y0=,2FFjlm ./33J?(A-(-.E\]abb] ,3+-]_c,e( ,!-.FWZ]a\bHc!dJ".z;b"ccwc%3G_jZfijZj%k ,E$&+,  ,J8bc %12a72+/+@+@0%)7,QRBR ,A ,T(  )//0Dc.A{WMcEd7d0eGg  h h hQIhPhs   FI6I
A/I9I:	Ir   )r9  r  r'  r(  r:  r8  r7  c              3   R   K   | ]  }t        |t        j                          ! yw)r/  N)r"   sysmaxsizer  ps     rz  r  z-YoutubeIE._comment_entries.<locals>.<genexpr>
  s'      Zm45K3;;//Zms   %'max_commentsr   r!  FT)onResponseReceivedEndpoints.)reloadContinuationItemsCommandappendContinuationItemsActioncontinuationItems)rV  visitor_data(r9  z/~r  )z$Downloading comment section API JSONz3    Downloading comment API JSON reply thread %d %sr'  z+{}Downloading comment{} API JSON page {} {}z       z replies.r  )r+  r0  r,  r  )item_idrp  eprV  r  r   check_get_keyszincomplete dataignoreerrors)Tonly_downloadzReceived incomplete data for a comment reply thread and retrying did not help. Ignoring to let other comments be downloaded. Pass --no-ignore-errors to not ignore.zyIncomplete data received for comment reply thread. Pass --ignore-errors to ignore and allow rest of comments to download.expectedr  r  r  r.  r  )r  .messageRendererr  r   max_runszYoutube said: r  r  )setr  r  _build_api_continuation_query_generate_comment_continuationrE  countgenerate_api_headers_extract_visitor_datar   _extract_responser   r  r  	get_paramr  r2   r  rr  r  CommentsDisabled)r  root_continuation_datarV  r  r  r$  rB  r%  _max_commentsr  continuationresponseis_forced_continuationis_first_continuationcontinuation_items_pathpage_numr  comment_prog_strnote_prefixrg  er  continuation_itemsrP  messagerR  r#  rS  rT  rU  rV  s   ` `` `                   @@@@@@rz  rD  zYoutubeIE._comment_entries	  s     M	!8P	h P	hf !"!'()*()$'E&)eGZm9=9P9PQ_9`dfcgjkck9kZmV{K1GUV u112HI!& &$ 
  ==d>a>abj>klL%)"#J!* >	H//e$JdJdemJn/oG!"7?#;"<Bw{?S>TTUV1}("HK"W 568H[J #JK LRR!'IRv2.0 "N)7;3G13LQXYhQimnQn#N$; #NS #N0E,  LL#N "O11 UG+#1 2 3* &+"L$X0BDWYdfilpkq/rsI&28=Tdhrt&u "(#12D#EL,1)#+,>	6SXY  E K   $99:GY:Z[a>	@ ..!79epq.r6go&>!&C.	 :XY]^''' 'D67K " 
 %A66~~n59PP++st ,e%)+ + !s?   EJH&(A0JAJ&	J	/AJ0J6JJ		Jc                 v    d|  d|  d}t        j                  |j                               j                         S )zZ
        Generates initial comment section continuation token from given video id
        zz2'""z0 x0 Bcomments-section)base64	b64encodeencodedecode)r  tokens     rz  rr  z(YoutubeIE._generate_comment_continuatione
  s:    
 !
*?zImn/6688r{  c                       fd}t         j                  ddg      d         }t        j                   ||      d|      S )zEntry for comment extractionc              3      K   t        d t        | di       D        d       }j                  |      E d {    y 7 w)Nc              3   H   K   | ]  }|j                  d       dk(  r|  yw)sectionIdentifiercomment-item-sectionNrt  )r  items     rz  r  zIYoutubeIE._get_comments.<locals>._real_comment_extract.<locals>.<genexpr>p
  s-      L88/04JJ Ls    ").itemSectionRendererrX  )r  r2   rD  )r  rendererr  r  rV  s     rz  _real_comment_extractz6YoutubeIE._get_comments.<locals>._real_comment_extracto
  sI      L!-h8T^`!aLMQSH ,,XuhGGGs   6A?Ar]  r   r   )r"   r  rE  rF  )r  rV  r  r  r2  r  r]  s   ```    rz  _get_commentszYoutubeIE._get_commentsm
  sE    	H #4#:#:>B4#PQR#ST 5h ?LQQr{  c                      dddS )NT)contentCheckOkracyCheckOkr  r  r{  rz  _get_checkok_paramszYoutubeIE._get_checkok_paramsx
  s    "&t<<r{  c                 Z    ddi}|||d<   d|i}|rddi|d<   d|i| j                         S )	Nhtml5PreferenceHTML5_PREF_WANTSsignatureTimestampcontentPlaybackContextpyvTadPlaybackContextplaybackContext)r  )rw  rU  use_ad_playback_contextcontextplayback_contexts        rz  _generate_player_contextz"YoutubeIE._generate_player_context|
  sm     1
 ?,/G() %g
 #t501
 /
%%'
 	
r{  clientr  c           	         | j                  dg t        d      }|D ]   }|j                  d      \  }}}|s| j                  d| dd       3|j                  d      \  }}}	|j	                         |k7  r\|s1| j                  d	| d
d       t        j                  j                  }	|	j	                         |j                  k7  r	 t        j                  t        j                  t        j                  j                  |                  j                         c S  y # t         j"                  t$        f$ r | j                  d| d|	 dd       Y ;w xY w)Npo_tokenT)ie_key	casesense+zPInvalid po_token configuration format. Expected "CLIENT.CONTEXT+PO_TOKEN", got ""r  .zpo_token configuration for zo client is missing a context; assuming GVS. You can provide a context with the format "CLIENT.CONTEXT+PO_TOKEN"z#Invalid po_token configuration for z	 client: z/ PO Token should be a base64url-encoded string.)r  rH   	partitionr  r  r  r
   GVSr  r  urlsafe_b64encodeurlsafe_b64decoder0  r1  unquoter  binasciiError
ValueError)
r  r  r  po_token_strs	token_strpo_token_metasepr  po_token_clientpo_token_contexts
             rz  _get_config_po_tokenzYoutubeIE._get_config_po_token
  s   //
By\`/a&  	I+4+>+>s+C(M3##@@I{!MX\ $ ^ 5B5L5LS5Q2OS"2$$&&0  1& :Z Z" ! $ $3#6#6#<#< %%'7==8//0H0HI]I]^fIg0hipprr5 	6 NNJ/ ##9&'((WY" $ $ s   
AD!!3EErU   c                 z   d}t        |dddt        j                  j                  hf      }dt        |d      v r| j	                  | d| dd	
       d	}|r;|t
        j                  k(  r(|s&| j                  s|s| j                  d| dd	
       y|t
        j                  k(  r|s| j                  d| d       y| j                  ||      }|r`|r8|t
        j                  k(  r%|s#| j                  r|s| j                  d| d       | j	                  | d|j                   d| d       |S |r9|t
        j                  k(  r&|s$| j                  r| j                  d| dd	
       y | j                  d||j                  |||||||	|
|d|}|r&| j	                  | d|j                   d| d       |S y)a  
        Fetch a PO Token for a given client and context. This function will validate required parameters for a given context and client.

        EXPERIMENTAL: This method is unstable and may change or be removed without notice.

        @param client: The client to fetch the PO Token for.
        @param context: The context in which the PO Token is used.
        @param ytcfg: The ytcfg for the client.
        @param visitor_data: visitor data.
        @param data_sync_id: data sync ID.
        @param session_index: session index.
        @param player_url: player URL.
        @param video_id: video ID.
        @param webpage: video webpage.
        @param required: Whether the PO Token is required (i.e. try to fetch unless policy is "never").
        @param kwargs: Additional arguments to pass down. May be more added in the future.
        @return: The fetched PO Token. None if it could not be fetched.
        Fr  .serializedExperimentFlagstrue).html5_generate_content_po_tokenr  z;: Detected experiment to bind GVS PO Token to video ID for z clientTr  z!Unable to fetch GVS PO Token for zz client: Missing required Visitor Data. You may need to pass Visitor Data with --extractor-args "youtube:visitor_data=XXX"Nz$Unable to fetch Player PO Token for z" client: Missing required Video IDzGot a GVS PO Token for z client, but missing Data Sync ID for account. Formats may not work.You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX"z: Retrieved a z PO Token for z client from configz client: Missing required Data Sync ID for account. You may need to pass a Data Sync ID with --extractor-args "youtube:data_sync_id=XXX")r  r  rV  rb  data_sync_idsession_indexr  r  video_webpagerequired_gvs_bind_to_video_idr  )r2   r0  r1  r*   r  r
   r  is_authenticatedr  PLAYERr  r  _fetch_po_token)r  r  r  rV  rb  r  r  r  r  r2  r  r  gvs_bind_to_video_idexperimentsconfig_po_tokenr  s                   rz  fetch_po_tokenzYoutubeIE.fetch_po_token
  sG   2  %"5(#/JV\\MbMbLc+e f\+/[\\* ##)('3>B  D $( 
 7o&9&99 )>)>G[3F8 <e fqu   w o,,,X6vh>`ac33FGD w/*=*==$)>)>G[##-fX 6k lm znU[T\\opq"" '_%8%88RVRgRg3F8 <g hsw   y '4'' 
MM%%'!!"6
 
 znU[T\\cdeO r{  c           	         |j                  d      }| j                  ddgt              d   }|dvrd}|dk(  s|dk(  r|j                  d	d
      sy | j                  d      j	                         }| j
                  j                  j	                         }t        |       t        ||       | j                  d |      }t        d%i dt        |      dt        |d      d|d|d|j                  d      d|j                  d      d|j                  d      d| j                  d|j                  d      d|j                  d      d|j                  d      d| j
                  j                  d|j                  dd
      dt        d|      xs t        d| |      d|d| j                  d      d | j                  d!       d"| j                  d#      d$d
}| j                   j#                  |      S )&Nr  	fetch_potr   )r  r   )neverautoalwaysr  r  r  Fhttp_headers)default_clientinnertube_context)rV  INNERTUBE_CONTEXTinnertube_hostinternal_client_namer  r  r  r  rb  r  r  request_cookiejarr  request_proxyr	  zhttps://request_headersrequest_timeoutsocket_timeoutrequest_verify_tlsnocheckcertificaterequest_source_addresssource_addressbypass_cacher  )rt  r  rH   rw  r  _downloaderproxiesr=   r>   _select_api_hostnamer   r   r2   r  	cookiejarr?   r  get_po_token)	r  r  r  r  fetch_pot_policyr  r  r  pot_requests	            rz  r  zYoutubeIE._fetch_po_token  s<   **Y'  22;Y2WXYZ#>>%' F*

:u5 ..0557""**//1ggw'2242O$ 
"7+
*63QR
 *
 "(	

 !**_5
 zz,/
 !**_5
 "22
  N3
  N3
 ZZ
+
 #..88
 #)**-De"L
$ 6@ F(>*: ;WE'
* $+
, !NN+;<-
. $(>>2F#GG/
0 $(>>2B#C1
4 5
: !!..{;;r{  c                 b    t        | d      ryt        | d      d}t        fd|D              S )N)playabilityStatusdesktopLegacyAgeGateReasonT)r  )r  reason)zconfirm your agezage-restrictedinappropriateage_verification_requiredage_check_requiredc              3   4   K   | ]  }D ]  }||v  
  y wr}  r  )r  rk  r  reasonss      rz  r  z)YoutubeIE._is_agegated.<locals>.<genexpr>O  s$     ](U\]68v%]%]s   )r2   any)player_responseAGE_GATE_REASONSr  s     @rz  _is_agegatedzYoutubeIE._is_agegatedE  s:    )\]0[\
 ]6F]]]r{  c                      t        | d      dk(  S )N)r  r  
UNPLAYABLEr2   )r  s    rz  _is_unplayablezYoutubeIE._is_unplayableQ  s    O-LMQ]]]r{  c
                    | j                  |||| j                  ||      | j                  |      d   xs | j                  |||      | j                  |      d   xs | j	                  |||            }
d|i}t        t        t        |      d   dt        hf      }| j                  d|gd      d   x}r||d	<   |	rd
|	i|d<   |r| j                  |||d      nd }| j                  ddg      d   dk7  xr t        t        |dt        hf      }|j                  | j                  ||             | j                  |d|||
d|dj                  |j!                  dd      j#                                     xs d S )Nr   r   )rV  r  rb  r  delegated_session_iduser_session_idvideoIdPLAYER_PARAMSplayer_paramsTr  r   poTokenserviceIntegrityDimensionsFr  r  falseSUPPORTS_AD_PLAYBACK_CONTEXTplayerzDownloading {} player API JSONr   )re  rf  rp  rV  r  r  r  r   )rt  _extract_session_index_parse_data_sync_id_extract_delegated_session_id_extract_user_session_idr2   r   r   r  r  rY  r  rs  r  rv  r   r,  strip)r  r  r  webpage_ytcfgplayer_ytcfgr  
initial_prrb  r  r  r  yt_query
default_ppr   rU  r  s                   rz  _extract_player_responsez"YoutubeIE._extract_player_responseU  s   ++!%55m\R((6q9 _55mZQ]^ ((6q9 Z00
LY , 
  x
 " 7 ? BOVYUZ[]
 33Oj\]a3bcdee=e!.HX6?5JH12eod//*m[`/auy ##$=yI!LPWW b.9WZ^Y_0`a 	  	55c;RST%%t!188S9Q9W9W9YZ	 & 
 
 	r{  c                 f   g }g }t        d | j                  j                  j                         D              }|r| j                  n1| j
                  r| j                  n|s| j                  n| j                  }t        d t        D        d d      }| j                  d      D ]  }	|	dk(  r|j                  |       |	dk(  r|j                  |       1|	j                  d	      r|j                  |	d
d         W|	|vr| j                  d|	 d       q|j                  |	        |s,|s*|| j                  k(  r| j                  dt          dd       |s|j                  |       |D ]  }
|
|v s|j#                  |
        |st%        dd      | j
                  r|j'                  d      s| j)                  |      rd|vr|j                  d       |D 	cg c]  }	t        |	   d   r|	 }}	|D ]*  }	| j                  d|	 dd       |j#                  |	       , t+        |      S c c}	w )Nc              3   <   K   | ]  }|j                           y wr}  is_availabler[  s     rz  r  z3YoutubeIE._get_requested_clients.<locals>.<genexpr>  s     "c1>>#3"c   c              3   2   K   | ]  }|d d dk7  s|  y w)Nr   r  r  )r  r  s     rz  r  z3YoutubeIE._get_requested_clients.<locals>.<genexpr>  s     IvbqzS7HVIs   c                     t         |    d   S )Npriority)r   )r  s    rz  r  z2YoutubeIE._get_requested_clients.<locals>.<lambda>  s    08D r{  T)ry  reverser  r/  allr7  r   zSkipping unsupported client "r  a  No supported JavaScript runtime could be found. Only deno is enabled by default; to use another runtime add  --js-runtimes RUNTIME[:PATH]  to your command/config. YouTube extraction without a JS runtime has been deprecated, and some formats may be missing. See  z  for details on installing oner  z%No player clients have been requestedrj  is_music_url	web_musicSUPPORTS_COOKIESzSkipping client "z#" since it does not support cookies)r  r  	providersvalues_DEFAULT_PREMIUM_CLIENTSr  _DEFAULT_AUTHED_CLIENTS_DEFAULT_JSLESS_CLIENTS_DEFAULT_CLIENTSsortedr   r  extend
startswithappendr  r   remover   rt  r  r%   )r  r}   r  is_premium_subscriberrequested_clientsexcluded_clientsjs_runtime_availabledefault_clientsallowed_clientsr  excluded_clientunsupported_clientss               rz  _get_requested_clientsz YoutubeIE._get_requested_clients  se   ""cT=O=O=Y=Y=`=`=b"cc-BD))151F1F--5I--&&	 	 !I"3IDdT --o> 
	1F"!((95!((9""3' ''qr
3.##&CF81$MN!((0
	1 "%5?dNjNj;j &&EG SW	   X !$$_5/ 	:O"33!((9	: ! !HSWXX  !!.1T5F5Fs5KQ\duQu!((5 &7#!>OPV>WXj>k# # . 1##&7x?b$cos#t!((01 +,,#s   H..H.c                 *    t        |d      x}|k7  r|S y )N)r  r  r  )r  prr  pr_ids       rz  _invalid_player_responsez"YoutubeIE._invalid_player_response  s$     ""&ABBExOL Pr{  c                 D  # d }|r#| j                  | j                  || d|d      }g }g }	|r)| j                  ||      s|j                  i |dd i       t	              #d d d   #fd}
d}d x}x}}i }rtd}t        j                               \  }}}||k(  r|ni }d| j                  d      vr||k7  r| j                  ||      xs |}|xs | j                  |||	      }| j                  |      j                  d
      }d| j                  d      v rd}d }|s|s|r| j                  |      }d}d }||k(  rd| j                  d      vr|}|xs | j                  |||      }|xs | j                  |||      }|||| j                  r|nd |r|nd || j!                  ||      |xs | j                  |      d}| j                  |      d   }|rd n= | j"                  d-dt$        j&                  i|d|j(                  xs |j*                  i}t-        j.                  | j"                  fdt$        j0                  i|}t-        j.                  | j"                  fdt$        j2                  i|}	 |xs | j5                  |||xs |||||||	      }| j                  ||      x}r|||<   n|rt;        |xs | j                  |      d      }|j=                  di       }||t>        <   ||t@        <   tC        |      |tD        <   ||tF        <   ||tH        <   ||tJ        <   | jM                  |||      |tN        <   t;        |ddtP        hf      D ]/  } || t>        <   || t@        <   || tJ        <   tC        |      | tD        <   1 |r|	j                  |       n|j                  |       |dk(  rS| jS                  |      rB|r@d|v r<tU        d | jV                  jX                  j[                         D              r |
d       | j]                  |      r|dk7  r |
d|        | j]                  |      r.| j                  s"| j_                  | d| j`                   d       |dk(  xr | jS                  |      }!| j                  r1| j]                  |      s|!r| j_                  | dd        |
d       t;        |d d!tb        hf      }"|"d"vr| je                  | d#| d$|"        rt|jg                  |	       |rc| j9                  d%d&ji                  |       d'd&ji                  t	        |j[                                      d(| d)       |st7        d*d+      ||fS |st7        d,      ||fS # t6        $ r}| j9                  |       Y d }~d }~ww xY w).Nz client initial player responseFr  streamingDatar  c                      | D ]A  }t        |      d   }|t        v s|vsj                  |       j                  |        y y)z? Append the first client name that exists but not already used r   N)r   r   r)  rC  )client_namesclient_nameactual_clientall_clientsclientss      rz  append_clientz:YoutubeIE._extract_player_responses.<locals>.append_client  sM    +  7 DQ G $55$K7{3#6r{  r  r  r  REQUIRE_JS_PLAYERjsTr  webpage_skip)r  rb  r  r  r  r2  r  rV  PLAYER_PO_TOKEN_POLICYr  r  )r  r  r  r  rb  r  r  r  r  adaptiveFormats.rT   zmade for kidsc              3   <   K   | ]  }|j                           y wr}  r  r[  s     rz  r  z6YoutubeIE._extract_player_responses.<locals>.<genexpr>5  s     XQ(Xr  web_embeddedzweb_embedded.zT: This video is age-restricted; some formats may be missing without authentication. r  zm: This video is age-restricted and YouTube is requiring account age-verification; some formats may be missingrX   r  r  )OKLIVE_STREAM_OFFLINEAGE_CHECK_REQUIREDAGE_VERIFICATION_REQUIRED: z% player response playability status: zSkipping player responses from r  z* clients (got player responses for video "z" instead of "z")zLAll player responses are invalid. Your IP is likely being blocked by Youtuberj  z%Failed to extract any player responser  )5_search_json_YT_INITIAL_PLAYER_RESPONSE_REr7  r)  rp  r   r  r  _download_ytcfgr   _get_default_ytcfgrt  r'  ru  _extract_data_sync_idr  r  r  r
   r  r  recommendedr  r  r  SUBSr  r   r  r2   
setdefaultSTREAMING_DATA_CLIENT_NAME!STREAMING_DATA_FETCH_GVS_PO_TOKENr  $STREAMING_DATA_PLAYER_TOKEN_PROVIDED STREAMING_DATA_INNERTUBE_CONTEXT"STREAMING_DATA_FETCH_SUBS_PO_TOKEN$STREAMING_DATA_IS_PREMIUM_SUBSCRIBER_get_available_at_timestamp%STREAMING_DATA_AVAILABLE_AT_TIMESTAMPr  r  r  r  r   r!  r  r  _youtube_login_hintr  r  r'  r  )$r  r?  r  r2  webpage_clientr  r+  r  r  deprioritized_prsr@  tried_iframe_fallbackr  rb  r  skipped_clientsdeprioritize_prr  base_clientr  r  require_js_playerr5  fetch_po_token_argsplayer_pot_policyplayer_po_tokenfetch_gvs_po_token_funcfetch_subs_po_token_funcr  r6  r  sdr  embedding_is_disabledr  r>  s$    `                                 @rz  _extract_player_responsesz#YoutubeIE._extract_player_responses  s   
**33W!""ABHTY + [J d;;JQ
 JJ<*<ot<='l$B$-	 !&377
7\L#O+B7;;=+Q(FK,2n,D="L 7 7 FF6UcKc#33FHEU#mt'?'?|el'?'mJ $ 7 7 ? C CDW Xt..}==$)!!
&;@Q!66x@
(,%B',=TE\E\]kEl,l'n4+E+EmU_am+nL'n4+E+EmU_am+nL ! ,$040E0E4,=j4"!%!<!<]L!Y%H)@)@)H	# 6:5L5LV5TUm5n&(d.Ad.A.A /V'../V2E/V*33T7H7T7T/VO '0&7&7##'Y-<-@-@'YDW'Y# (1'8'8##(Z-<-A-A(ZEX(Z$ .488H"."?-!-))!-!-, 9 . 55b(CCuC*/'$01`AXAXY_A`bu$v!]]?B717-.8O45;?;P787H349Q56;P78<@<\<\]_aikq<r89%b+I3QUPV*WX TA4:A01;RA78>SA:;>B?>SA:;	T
 #%,,R0JJrN ,&4+>+>r+B7 :X$2D2D2N2N2U2U2WXXn-   $N)Bk];<  $T-B-Bj !//3/G/G.HJUY  [ %,~$=$Y$BUBUVXBY!$$$*;*;B*?CXj !L LW[  ] m,!"':Hse&LMFmm  H:Rx7\]c\d!efe h 	

$%1#((?2K1L M447HHSAWAWAY=Z4[3\\jksjttvxy $bmqs s J  !HIIJM " ##A&s   >"U: :	VVVc                 R    |dk(  r| j                  d      s|dk(  r|xs ddkD  r|S y y )Nr  live_from_start	post_liver   i   )rw  )r  rp   rj   s      rz  _needs_live_processingz YoutubeIE._needs_live_processing]  s8    I%$..9J*K;.HMX3M 4N.r{  c           	          | d| d| d| dt          	}|g | j                  | j                  v r| j                  |d       y | j	                  |d       y )NrM   client z formats require a GVS PO Token which was not provided. They will be skipped as they may yield HTTP Error 403. You can manually pass a GVS PO Token for this client with --extractor-args "youtube:po_token=z+.gvs+XXX". For more information, refer to  Tr  )PO_TOKEN_GUIDE_URLr%  r#  r  r  )r  r  r<  protomsgs        rz  _report_pot_format_skippedz$YoutubeIE._report_pot_format_skippedb  s}    j;-xw 7llwkx y//A.BD 	 QD11QD4P4PQQSD1t4r{  c                 0   |xs | d| d| dt          }t        | j                  d      | j                  d      | j                  d      f      }|r|g | j                  | j                  v r| j                  |d       y | j                  |d       y )	Nz: Some z client subtitles require a PO Token which was not provided. They will be discarded since they are not downloadable as-is. You can manually pass a Subtitles PO Token for this client with --extractor-args "youtube:po_token=z-.subs+XXX" . For more information, refer to  writesubtitleswriteautomaticsublistsubtitlesTr  )rt  r  rw  r%  r#  r  r  )r  r  r<  rv  subs_wanteds        rz  _report_pot_subtitles_skippedz'YoutubeIE._report_pot_subtitles_skippedo  s     Ej} -2 3> ?//A.B	D 	 NN+,NN./NN?+- . k-dt/D/D-dtGcGc-ddSD1t4r{  c              #      #$%&'()*+,-./0123456789:;<=>?K   d#d%d$%d $d i4t        j                  t              g c3>i dd ic29i }t        g d      8d j	                  d      v ; j	                  d      +d	+v & j	                  d
      rd& j
                  j                  d       d 1d =#fd(d .i /$%4fd, fd}t               5t               :5: fd<t        |ddt        hf      D ]  }t        |ddt        hf      D ]  }	|	j                  d      }
d }|
sNt        j                  j                  |	j                  d            }t        |ddt        hf      }
t        |d      }|r:j                  t        |             t        |
t        hddf      x}s5j                  |        5j!                  t        |d|hf              |D ]  }t        |d      }|s|t"           *|t$           0|t&           6|j                  t(              )|t*           't        |d      ?d -d@&),289 f	d	7#&'()*+,-./01367 ;<=>?fd } |       E d {     j-                        }d!+v}t         j	                  d"            }|d#k(  s|r|r|j                  d$       |rd#k(  r|d#k7  r|j                  d%       $%&'23489 fd&}d$|vxr |j                  d'      }|rt        j                  j/                  |      j0                  }t3        j4                  d(|      x}r|j7                  d)d*      \  }}nd+}d} ||      }|r:;s8 <         j9                  d|      }|r|j;                  d,| d,|       }||v } j=                  )      d-   t>        j@                     } .|06      }/j                  ) *|xs |jB                  .            }|r |jE                  d/      d0| z   })/vr|/)<   |r)|s'd1 j	                  d      vr jG                  )d$       n|s|stI        || | 2      } jK                  |d3dd#k(  4      \  }}t        |ddt        hf      D ]  })|t(        <     jM                  ||      }|D ].  }  || d$) jO                  d5| d   d6d 7      |xr |       s+|  0 d%|vxr |j                  d8      }!|!st        j                  j/                  |!      j0                  }d} ||!      }|r:;s8 <         j9                  d|      }|r|j;                  d,| d,|       }||v } j=                  )      d-   t>        jP                     } .|06      }/j                  ) *|xs |jB                  .            }|r |jE                  d/      d0| z   })/vr|/)<   |r*|s(d1 j	                  d      vr jG                  )d%       -|s|r3tI        |!|2      }! jS                  |!d9      \  }"}t        |ddt        hf      D ]  })|t(        <     jM                  ||      }|"D ]Y  }  || d%)| d:   |xr |       stU         jO                  d;| j                  d<      xs | d   d=d 7            | d><   |rd| d?<   |  [  | y 7 aw)ANi   rk   r!  r   )tinyaudio_quality_ultralowaudio_quality_lowaudio_quality_mediumaudio_quality_highsmallmediumlargehd720hd1080hd1440hd2160hd2880highresrB  r  r  	duplicateinclude_duplicate_formatsTzv[youtube] include_duplicate_formats extractor argument is deprecated. Use formats=duplicate extractor argument insteadc           
      f    dt        | t        hddt        j                  j                  hddf      v S )N1xtags.sr)r2   r*   r0  r1  )f_urls    rz  is_super_resolutionzEYoutubeIE._extract_formats_and_subtitles.<locals>.is_super_resolution  s2    ,uz7C&,,J_J_I`bfhk.lmmmr{  c                 8     dj                   fd|D              S )Nr   c              3   (   K   | ]	  }|     y wr}  r  )r  iss     rz  r  zNYoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig.<locals>.<genexpr>  s     .A1Q4.s   )r  )r  specs   ` rz  	solve_sigz;YoutubeIE._extract_formats_and_subtitles.<locals>.solve_sig  s    77....r{  c                 L     t         fdt        d d         D              S )Nc              3   t   K   | ]/  }d t        d    d| dt        |z   dz
  d          i      i 1 yw)r}   r  r7  r   filesizeN)r9   rG  )r  range_start
CHUNK_SIZEr  s     rz  r  zTYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments.<locals>.<genexpr>  s^      F  '%}Ac+
2JQ2NPQR\P].^-_`3  Fs   58r   r  )r   r  )r  r  s   `rz  build_fragmentszAYoutubeIE._extract_formats_and_subtitles.<locals>.build_fragments  s0     F "'q!J-!D	F F Fr{  c                 f    | j                   xr$ | j                  xr | xr | j                  xr | S r}  )r  not_required_with_player_tokennot_required_for_premium)policyr+  has_player_tokens      rz  gvs_pot_requiredzBYoutubeIE._extract_formats_and_subtitles.<locals>.gvs_pot_required  s?     T>>SCSTT88R=RSUr{  c                    | j                  d      xs i }|j                  d      xs d}|j                  dd      j                  d      d   xs d }d|j                         v rt        |d      d	fS d
|j                         v r|rj                        s|<   |fS |j                  d      r|rj                        s|<   |fS |dfS )N
audioTrackr  r   rZ   r  r   descriptivedescoriginalaudioIsDefaultr  )rt  r  r  r#   )
fmt_streamaudio_trackdisplay_namelanguage_codeDEFAULT_LANG_VALUEORIGINAL_LANG_VALUElanguage_maps       rz   get_language_code_and_preferencezRYoutubeIE._extract_formats_and_subtitles.<locals>.get_language_code_and_preference  s    $..6<"K&??=9?RL'OOD"5;;C@CKtM 2 2 44$]F;S@@\//11 )9)9:M)N8EL!45$&999/0 )9)9:L)M7DL!34$&888 "$$r{  c                     t        |       sy j                  dt        j                  j	                  |       j
                  dd       S )Nz/n/([^/]+)/zn challengerX  )r:   r$  r0  r1  r2  r  )r  r  s    rz  get_manifest_n_challengezJYoutubeIE._extract_formats_and_subtitles.<locals>.get_manifest_n_challenge  sE    |,%% 5 5l C H Ht & - -r{  c                  *   g } 	r?| j                  t        t        j                  t	        t        	      
                   rt               }D ])  }j                  d
|d      s|j                  |       + j                  |       | j                  t        t        j                  t        D cg c]*  }dj                  t        t        t        |                  , c}
                   | rj                   j#                  |       D ]  \  }}|j$                  t        j                  k(  r{|j&                  j(                  j+                         D ]S  \  }}t-        |      }j/                  |D cg c]  }t1        |       c}d
|d       |v sCj3                  |       U |j$                  t        j                  k(  s|j&                  j(                  j+                         D ]/  \  }}j/                  |d
|       |	v s	j3                  |       1  dt4         }rj7                  d	| d
       	rj7                  d| d
       j9                          	j9                          y y c c}w c c}w )N)
challengesr  )typer  inputsigfuncsTrC  r   nzEnsure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  z7Signature solving failed: Some formats may be missing. ro  z9n challenge solving failed: Some formats may be missing. )r)  r   r   Nr   rr  rp  rO  rC  difference_updateSIGr   r  rH  chrr  r  
bulk_solver  outputresultsr4  rg  rR  ordr*  r   r  clear)challenge_requestscached_sigfuncsspec_id_challenge_requestchallenge_response	challengeresultr  help_messagen_challengesr  s_challengesr  r  s            rz  solve_js_challengeszEYoutubeIE._extract_formats_and_subtitles.<locals>.solve_js_challenges  s   !#"))*<(**%)T,5GT^_+a b "%%+ 5G88ZQXim8n'++G45 ..?"))*<(,,%+Ua#b'BGGCU7^,D$E#b#-/+0 1 ">B>P>P>[>[\n>o ?:&(:)../2E2EE1C1J1J1R1R1X1X1Z =-Iv&))nG <<17 8AQ 8* *GD = J  ',6 , 3 3G <= ,00O4E4EE1C1J1J1R1R1X1X1Z ?-Iv <<VS*V_`(L8 , 3 3I >??&3 4A/C 
  ''QR^Q_`!)T ( ;  ''ST`Sab!)T ( ;
 ""$""$G " $c !9s   9/J J.r9  rE  r}   signatureCipherr  r   r  )hlsManifestUrldashManifestUrl)rE  .c                 p    t        | j                  d            t        | dd      | j                  d      fS )Nitagr  rZ   isDrc)r/   rt  r2   )r  s    rz  get_stream_idz?YoutubeIE._extract_formats_and_subtitles.<locals>.get_stream_id)  sC    ":>>&#9:LUacg<hjtjxjx  zA  kB  B  Br{  Fc                 L  	 t        | j                  d            }| j                  d      xs i }| j                  d      }t        | j                  d            }|dk(  s|s$| j                  dd      j                         xs |}|dk(  rd}|r|r||<   |r||<    |       \  }}	t	        | j                  d	            }
|
r8d
 d| d}dk(  r|j
                  rdnd dz  }j                  |d       t        | j                  d      xs | j                  d      d      }t        | dt        d      hf      t        fd      }|rj                  d
 d| dd       |r'dj                  d      vrj                  |       y | j                  d      xs |j                  dd      xs d}t        | j                  d            xs d}i d t        | j                  d!            d"t        | j                  d#            d$t        || j                  d%      rd&n|rd'nd       d(t        t        |j                  d)      |j                  d*      xr d+d,-      || j                  d%      xr d.|xr d/t        | d0       t        | d1       |xr d2|xr d3j                  d4      xs xr t!              d5-
      d6|d7k(  rd8nd9d:|v rd;ndz   d|d<kD  r|nd d=| j                  d>      d|d |      t	        | j                  d%            d?z  z
  d@|
dA|dBt#        |      dCt        | j                  dC            dD|dE|	dF|rdGn|dk(  rdHnd }t%        j&                  dI| j                  dJ      xs d      }|rFt)        |j+                  d<            |dK<   |j-                  t/        |j+                  d?                   dL|j                  dM      |j                  dN      fv }|r|j                  dK      r|dK   dOz   |dP<   |S )QNr  r  qualityheightr  audioQualityr   r  drmFamilieszSome rs  z6 formats have been skipped as they are DRM protected. rh  Your accountThe current sessionz may have an experiment that applies DRM to all videos on the tv client. See  https://github.com/yt-dlp/yt-dlp/issues/12563  for more details.Tr  averageBitratebitrater  approxDurationMsr  c                       dz  k  S )Nr  r  )rj   format_durations   rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>Q  s    oA.M r{  z9 formats are possibly damaged. They will be deprioritizedmissing_potr  qualityLabelaudio_quality_fpsr   asraudioSampleRater  contentLengthr  r  drcr  format_noter  r  	(default)r  r  DRCzAI-upscaledc                 H    | d   j                  dd      j                         S )NprojectionTypeRECTANGULARr   r,  r  r  s    rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>f  s$    a8H6I6Q6QR_ac6d6j6j6l r{  c                 H    | d   j                  dd      j                         S )NspatialAudioTypeSPATIAL_AUDIO_TYPE_r   r  r  s    rz  r  zYYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream.<locals>.<lambda>g  s$    a8J6K6S6STikm6n6t6t6v r{  DAMAGEDMISSING POTverboser  source_preference22r  Premiumd   r   audio_channelsaudioChannelsr  has_drmtbrfilesize_approxwidthlanguagelanguage_preference
preferencer  z.((?:[^/]+)/(?:[^;]+))(?:;\s*codecs="([^"]+)")?mimeTyper\   noneacodecvcodec_dash	container)r/   rt  r"   r  r  r  r  r   r2   r3   r  rw  r,  r#   r4   rw  r   r   r  matchr$   r  rs  r&   )r  ru  r  super_resolutionr  r  r  r  r  r  r  rv  r  
is_damagedrK  r  dct	mime_mobjsingle_streamr  all_formatsr<  rj   r  itag_qualitiesqres_qualitiesr  r  s                      @rz  process_format_streamzGYoutubeIE._extract_formats_and_subtitles.<locals>.process_format_stream,  s   ":>>&#9:(nn\:@b$..3$Z^^H%=>f$G(nn^R@FFHSGG 4<$G/6t,07f-5UV`5a22z~~m<=!+hug=stC"d*151F1F~Lab cd e
 ''X'F#JNN3C$D$a
W`Hacgh".z<NQ^eiQjPk;l"m
 &&MN
''}HUG;tuw  LP ( Q =8O8OPY8Z#Z33Hk5Q!~~n5dIY[]9^dbd!*.."78=A;z~~6G'HIJNN?,K L  t!+!8%5T!"$ "=%koom&DkooVfFgFwlw  @C  DjnnW5?%AQAcVc
,lm
,vw"0y+2O-	2AkeGXYdGe"$$  (""PY]aPagh)i!" #'3t#$ %jnn_&E%& f'( qzD1H,IA,MM)* w+, 3-. &'8o'N/0 [)@A12 34 *+>58 !#tt|QU9< HHEz~~V`GaGgegi	!-iooa.@!ACJJJ|IOOA,>?@ &3778+<cggh>O*P P SWWU^'*5zG';C$
r{  c            	   3   d  K   d} g }(D ]  }|j                  d      r|j                  d      dk(  rt        |j                  d            sE |      }s|'v rT#j                        d   t        j                     }|d   dvxr
  |       }j                        xs  |xs |j
                  	      }|r	vr|<   |j                  d
      }d\  }}	|s |       t        j                  j                  |j                  d            }	t        |	d
dt        hf      }t        |	d      }t        |	|$xs !|f      shd}
dv r(#j                  |
j                  ) dd      d       n8d#j                  rdnd }#j                  |
j                  d|      )d        "|| |xr |  |            }|s|rW$r %        #j!                  d!t#        |      d      }|s|dj                  t        |	d      xs d &||            z  }t        |      }|j                  d      r8$r>|d   d   } %        #j!                  d!|      }|sdt%        |d|i      }|rt%        |d|i      }||d
<   |d   r9|d      j'                  | |j                  d       f       'j)                  |       d!vr|d"<   |j)                  |        |D ]>  }sd#v r$|d$   ri |r|d%    d&n|d%   d' |      d( sd#vs4d)i|d*<   | @ y w)+NhttpstargetDurationSecr  FORMAT_STREAM_TYPE_OTFr  GVS_PO_TOKEN_POLICYr   )18r  r}   r  r  r  z{}Some {} client https formats have been skipped as they are missing a URL. {}. See  https://github.com/yt-dlp/yt-dlp/issues/12482  for more details)rU   rV   rM  z1YouTube is forcing SABR streaming for this clientTr  z@YouTube may have enabled the SABR-only streaming experiment for zyour accountzthe current sessionr   )r  r  r  rC  z&{}={})spr  	signaturer  potr  r  rp  available_atdashyr  r  z-dashyhttp_dash_segments)r  r  r  http_chunk_sizedownloader_options)rt  r  rQ  r   HTTPSrS  r0  r1  r*   r2   r:   r  r  r   r  r  rO  rg  r9   rC  r)  )*ru  
https_fmtsr  	stream_id
pot_policyrequire_po_tokenr  fmt_urlencrypted_sigscmsg_tmplrv  fmtr  rp  n_challengen_resultr  r  r&  r  r<  fetch_po_token_funcformat_typesr  r  r  gvs_potsr+  r  itagsrp   player_token_providedr  r  r  skip_player_jsr  r  
stream_idsstreaming_formatsr  s*                    rz  process_https_formatszGYoutubeIE._extract_formats_and_subtitles.<locals>.process_https_formats  s    
"3 `+J!~~&9: 
 "~~f-1IIRVWaWeWefsWtRu  -j 9I&$
2$373J3J;3WXm3n  pA  pG  pG  4HJ "!F2 g,Z9NPef %
 ![1 d.8H8bJLbLbc   &h64<H[1(nnU3G(2%M2" 9D#\\22:>>BS3TU".rE1{m3L"M(4R(B"B1M:}#]^!k %  +.CC $ 0 0'/jO[$W2Ydh !1 !j
 'g9=9N9N~Ti&j%l !$ !% 3 3HOOBUX4Y[cos 3 t$/"E7G7XPXL)<W)EGC   %)$+-#@@&
C4FW[  A  ]#$8??(Z8GK%mT:$< <
 %W-Eyy~)$&+Cjm+-#'#D#DS*Va#b'$"27S(O"L"27UH<M"N!(CJ |il+//
8K0LM")))4 #*BB.:N+%%c*A`+D & 
"C#w,'>C
O!HSC,<+=V)DY\]hYi(<)8)=	  #g\&A5F
4S01!	
"s   LL0"L0
incompleter   r  hlsdashc                      j                  d      f}	s||   v rydvr
 d<    j                  d      d d<   |dk(  rdk(  rd	k7  r dxx   d
z  cc<   |r-t         j                  d      dd       d<    dxx   dz  cc<   |   j                  |       |r	r| d  d<   n)t        fd|   D              r| d  d<   n|r| d<    j                  d      }|r.|   k(  r&t         j                  d      dd       d<    d<   n/|r-|   k(  r%t         j                  d      dd       d<    d<   |dv r-t         j                  d      dd       d<    dxx   dz  cc<    j                  t	         d       d             d<    d   dk(  r- j                  d      r t         fd                d<   j                  d      s	r)t         j                  d      t        |      d       d<    j                  d       r d    d
k  r d = dk(  r# j                  d!      rd" d!<    dxx   d#z  cc<   y$)%Nr  Fr%  r&  r  r  rV   rA  r  r   r  r  r  r     r7  r  c              3   .   K   | ]  \  }}|k7    y wr}  r  )r  r\  r  ru  s      rz  r  z\YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<genexpr>  s     <1e<s   z
(original)r  r  )616235r  r  c                 0    | d   j                  d      d   S )Nr  r7  r   )r  )r  s    rz  r  z[YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<lambda>.  s    ;I]I]^aIbcdIe r{  r  r  c                 &    t        | d   z
        S )Nr  )abs)r  r  s    rz  r  z[YoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format.<locals>.<lambda>0  s    TWXY\]^f\gXgTh r{  )ry  r  r  r  r  mayber!  T)rt  r#   rC  r  r4   rG  rw  r   )r  ru  r<  r  r  ry  	lang_coder  r  r  r&  r  r:  r  rp   r  r  r  s   ``     rz  process_manifest_formatzIYoutubeIE._extract_formats_and_subtitles.<locals>.process_manifest_format  s   aeeJ/0"seDk'9  &>>(4An%55,-5-/A)* ,.5E>kU^F^)*a/*'4QUU=5I=`c'dAm$)*b0*d$K(,vQug%6AkN<d<<(,vQug%6AkN%)AkNEE*-	l;N.O!O'4QUU=5I<_b'cAm$/BA+,9=O0P#P'4QUU=5I;^a'bAm$/AA+,>)'4QUU=5I9\_'`Am$)*c1* !3!3GA?e4fhj!kl)Y<2%!%%/#$]3}Jh3i%j#kAiL>>),'4m,.?.LTX(ZAm$55<AeHM%E>aeeI&6#*AiL)*a/*r{  r  z6(?P<path>.+)(?P<suffix>/(?:file|playlist)/index\.m3u8)r  suffixr   z/n/r  r!  r  z/pot/r  )r  r]   )r  livez/itag/(\d+)r  rX  r  r  r  z/clen/(\d+)r  z	file sizer  r  F)+collectionsdefaultdictrp  r+   r  r  deprecated_featurer2   r  rt  r0  r1  r*   r:   rC  rg  rs  rW  r[  rX  rV  r]  rq  r2  r  r  r  r  rO  r,  rQ  r   HLSrS  rstriprw  r8   #_extract_m3u8_formats_and_subtitles_merge_subtitlesr$  DASHr  r"   )@r  r  rw  r  rp   rj   	subtitlesr  streaming_datar  r0  s_challenger2  r5  r5  r?  needs_live_processingskip_bad_formatsskip_manifestsrM  hls_manifest_urlmanifest_pathr  manifest_suffixsolved_nr6  r.  r/  r  r  subsr8  r  dash_manifest_urlr  r  r  r  r  r&  r  r<  r7  r8  r  r  r  r9  r+  r  r  r:  r  r  r;  r  r  r  r  r<  r  r  r=  r>  s@   `` ```                             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@rz  _extract_formats_and_subtitlesz(YoutubeIE._extract_formats_and_subtitles  s    
 
 (33C8"z(*QI%	 
  !8!8!GG..y9!\1""#>?K// 1c d	n	/	F	U 	% 	- uu9	% 9	%x ++;c?UYTZ=[\ 	fN*><Z\_bfag;hi 2
$../"..z~~>O/PQB*2q;-/HIG".r8"<K $$S%56".w(S!8L"MM;M $$[12 !FIaHb c!e f#	f* # n	$B)"o>N!"01R"S$23W$X!$23W$X!(,,-GHK)*OPL ,^=b cBX Xtp" p" p" p"d -...$($?$?X$V!+<? !8!8!@AN%2-2B""5)K9$<AVZcAc""6*5 5n  %N:c~?Q?QRb?c & 5 56F G L L%^`mnn1n56WWVX5N2M?&(O 67GH~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8M8M0O
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk5Q['12BM?[jZkIl'm$!%!I!I((E[\eMe "J "gJD$+D3dV2DE F ;F67F !% 5 5dI FI! $21e[$J\J\ .%&$ K] KPQaQrjrfrt"#G$
 !'n < fASASTeAf  & 5 56G H M M 67HI~')#@@jR]^H(5(=(=K=>QUXYaXbSc(d#+}#</3/F/F0!!6088I8N8N0P
#3J@UWl#m #<<5HRbR|fpf|f|5}~$1$8$8$=%z@R$RM"(208-#HdNeNefoNp9p33Hk6R[(23D=(Y%$($K$KL]_got$K$uMGT+D3dV2DE F ;F67F !% 5 5dI FI$ $21fk1[>[k[|t|p|},78J8J .6I0J0VaPUhXcmq 9K 9s -tAjM459/ 2"#G$Qn	$^ k /s5   F[6C[;[<I'[$[D[A1[A[c              #   b  K   t        |dd      j                  d      d d d   }t        t        d|j	                         xs d             }|sy t        |      dz
  }t        |      D ]<  \  }}|j                  d      }t        t        t        |d d	             }t        |      d
k7  st        |      s1| j                  d| ddj                  |       t                       ~|\  }	}
}}}|dd  \  }}|j                  dt        ||z
              j                  d|      d| z   }|||z  z  }||z  }d| ddddd||	|
||z  ||t!        t#        j$                  |            D cg c]0  }|j                  dt        |            t'        ||||z  z
        d2 c}d ? y c c}w w)N)storyboardsplayerStoryboardSpecRendererr  r   rX  rJ   r  zhttps://i.ytimg.com/r   #r!     zMalformed storyboard rM  r  z$Lz$Nz&sigh=sb
storyboardr
  r  z$M)r}   rj   )r  r  r\   r  r  r  r}   r  r  r  rowscolumnsr  )r!   r  r:   r;   r  rg  rq  rr  rH  r"   r  r  r  r   r,  r  r  mathceilrG  )r  rw  rj   r  base_urlLr  r  countsr  r  frame_countcolsrm  r  sighr}   r  fragment_durationjs                       rz  _extract_storyboardzYoutubeIE._extract_storyboard  s    U_acchchilcmnrprnrtw'=txxz?QTRSIM  	GAt::c?D#k4845F4yA~S[##&;A3b$@PQdQfPg$hi5;2E6;d12hGAt""4QU4<<T1E&QUPVWC(D4K8N (> 9!!X+#   "X- !>!:;=  ;;tSV4 #$5x1GXCX7Y Z = 	2=s   E(F/*5F*F/c                 "   d }|rd| j                  d      vrwddd}| j                  dd gd      d	   xs t        t        |d
t        hf      }|r||d<   | j	                  |||t        | j                  |      ddddt        hfi            }|S )Nr2  r  
9999999999r  )bpctrhas_verifiedr   Tr  r   r  ppz
User-Agentr  r  	userAgent)rp  r  )r  r2   r   r  r#  rQ  )r  r  r_  r  r2  rp  r~  s          rz  _download_initial_webpagez#YoutubeIE._download_initial_webpage  s    9D,C,CM,RR*C@E''$4'PQRS ] 1NOVYUZ3[\   d99XU$T%<%<^%L #6+PSu"UO  : G
 r{  c                    t        j                          }d}t        |dd dddddd	d
t        hf
      D ]  }t        |dt        j                  j
                  hddt        hf      }|dnd| d}t        |dt        d      hf      }	|	|	dz  r|	n
t        |	      }	|d|	 dz  }|	}|w| j                  | d| d|        ||z  } |rt        j                  |      |z   S t        |      S )Nr   adSlotsc                     |d   d   d   dk(  S )NadSlotRendereradSlotMetadatatriggerEvent!SLOT_TRIGGER_EVENT_BEFORE_CONTENTr  r  s     rz  r  z7YoutubeIE._get_available_at_timestamp.<locals>.<lambda>  s$    A&6$78H$I.$Y  ^A  %A r{  r  fulfillmentContentfulfilledLayoutplayerBytesAdLayoutRendererrenderingContent)N)#playerBytesSequentialLayoutRenderersequentialLayouts.r  r  instreamVideoAdRenderer
playerVarslength_secondsr  zan adza zs adskipOffsetMillisecondsr  r  r   z skippable after r  z: Detected z for )r  r2   r  r0  r1  r*   r"   r   r  r  ro  rp  )
r  r  r  r  nowwait_secondsr  rj   ad	skip_times
             rz  r\  z%YoutubeIE._get_available_at_timestamp  s0   iik$_  A24EGdfx { )4&7
  	)H $H|fll>S>S=TVfhjmxly.z{H$,Bxj2EB$X0H=_cKdJe/fgI$)2QIC	N	))A66$#  H:[E&!JK('	)* 99S>L003xr{  c                 B   t        |d      }t        |d      }|t        |d      }t        |d      }	t        |d      }
t        |d      }|rdn|rdn|
rd	n|	rd
n	d||	fv rdnd }| j                  |||||      ^ }}t        d |D              r|D ]  }d|d<   	 ||||fS )N).liveBroadcastDetailsisLive	isLiveNowisLiveContent
isUpcomingisPostLiveDvrrp  r  is_upcomingr   Frq   c              3   >   K   | ]  }|j                  d         yw)r  Nr  )r  r  s     rz  r  z*YoutubeIE._list_formats.<locals>.<genexpr>  s     1AquuY1s   Tr  )r2   r!   re  r  )r  r  r  r  rw  r  rj   live_broadcast_detailsr  live_contentr  rp  rp   r  rY  r  s                   rz  r  zYoutubeIE._list_formats  s    !-l<Y!ZM84? 6DG @|<m_=	&/{)0I-8M*6J*/G\3J*JJ  	 #AA(L\^hjuw  A)111 $#)$ &{GYFFr{  c           
      <   d }|rFd| j                  d      vr3| j                  ||d      }t        |d      s| j                  d       d }|sOd| j                  d      vr<d|i}|j	                  | j                                | j                  |d	d||dd
|      }|S )Ninitial_datarC  Fr  r  zIIncomplete data received in embedded initial data; re-fetching using API.r  r  r  z!Downloading initial data API JSON)re  rf  r  rV  rp  rg  r   r  )r  extract_yt_initial_datar2   r  rs  r  rv  )r  r  r2  r_  r  r  rp  s          rz  _download_initial_dataz YoutubeIE._download_initial_data  s    ~T-D-D^-TT77'QV7WLj9##$op#d6M6Mm6\ \)ELL113411 V5#58 2 YL r{  c                     | j                   r|syt        |d      }t        |d      dk(  xs& d| j                  |d      xs dj                         v S )NF)topbardesktopTopbarRendererlogotopbarLogoRenderer)	iconImageiconTypeYOUTUBE_PREMIUM_LOGOpremiumtooltipTextr   )r  r2   r  r  )r  r  tlrs      rz  _is_premium_subscriberz YoutubeIE._is_premium_subscriber
  s`    $$L[] 78<RR OT^^C?E2LLNN	
r{  c                 F   | j                  |||      }| j                  ||      xs | j                  |      }| j                  ||||      }| j	                  |      }	|	r| j                  d       | j                  | j                  |||	      |||||	      \  }
}||||	|
|fS )Nz%Detected YouTube Premium subscription)r  extract_ytcfgrQ  r  r  r  rm  r3  )r  r}   r  r  r_  r  r2  r  r  r+  rw  r  s               rz  r  zYoutubeIE._initial_extract  s    00nhW**8W=hAXAXYgAh228WnVcd $ ; ;L I DE'+'E'E'']<QRg~}>S(U$* |5JL\^hhhr{  c                 \-    t        |i       \  }} j                  |       j                         dz   }|dz   z   }d} j                  ||||      \  }}}}	}
t	        |	dt
              }t        |dt              }|r! j                  | j                         |      S r fdnd }t	        |	d	t
              }t	        |	d
t
              }t	        |dddddt
        ht        f      }t	        |dddddt        ht        f      }t	        |dddt
        ht        f      xs i }t	        |ddddt
        hf      xs i } j                  |d      xs  j                  |d      } j                  |d      } j                  xr |xs t        |d      xs |xs
  |g d      }|s|r j                  d       |} j                  |d      }t        |d      }| j                  xr |xs |n|}||}t        |	dt              }|rB|j                  d      s0 j                  d       r j!                  d! d"       ng }g }|j#                  d#      D ]  }t$        j&                  j)                  t$        j&                  j+                  |            fd$} |d%      }|sO |d      } |}!| r	|!d&|  d'z  }!|j-                  d(d)t/        d*j1                  |d%   d+         dd,i      |!d-       |j-                  |         j!                  d.j1                  d/j3                  |                    j5                  |||      S t7        t        |d0            xs, t7        t        |d0            xs t9         |d1            xs d }" j;                  |||	|
|"      \  }#}$t	        |	d2      }%d3k(  r j=                   d4       s j                  d5      st	        |%d6      r j?                         t        |d7t
              xs i }& j                  |&d8      xs t        |d8      }'tA         j                  |&d9      xs d:      }(|(rX|(jC                  d;      r?t        |d<      })|)s |d=      }*|*r|*j#                  d#      nd }) jE                  |(|)d,>       |'d?|( z  }'|'rd@|'jG                         v r6tI        |'dA      }'tI        |'jK                         dB       d? jL                   }'nLt        |dCdDt
        hf      r|'dEz  }'n2dF|'v r.tI        |'jK                         dB       d? jN                  rdGndH dI}' jQ                  |'d,J       t        |dKtR              xs g }+|+sLrJtU        jV                   jY                  dL            D ,cg c]  },t[        |,j]                  d             }+},|+D ]z  }-|-jC                  dM      stU        j^                  dN|-      }.|.s.dO |.ja                         D        \  }/}0|/d+kD  sN|0d+kD  sT|/|0z  }1D ]  }2|2j                  dP      dQk7  s|1|2dR<     n  jc                  ||fdS      }3 |dTdUg      }4|4r|3j-                  dV|4i       |3je                         }5g dW}6tg        |6      }7|3ji                  fdX|6D               |3D ]5  tk        fdYtm        |6      D        |7      }8dZdV   v rd+nd[d\|8z  z
  d]<   7  jo                  |3        jp                  js                  |5       t        |d^      xs  |d_      }9 ju                  tw        t        |d`      xs t        |da      xs  |d`                  }:t        |db      };ty        t        |#dc            }<ty        t        |#dd            }=|"s	|=r|<r|=|<z
  }" j{                  |"      fde}>t}        |>      D ]=  }?|?j                  d]      xs d[dfz
  |?d]<   t        |?j                  dg      dhdij      |?dg<   ? r j                  |<|||dkk(         ji                   j                  |	|"              j                  |;      }@i d%d|dldm|3dnt	        |5do      dp|dq|:drt        |:d dsd t      d1|"dut7        t        ||fdv      xs  |dw            dxt        t        |dy            dzt        |d{      d|u s |d}      d~k(  s |d      dk(  rdnd+d|d|9r|9gnd d|+dt        |d      dt        |d      rdnt        |d      rdnd|<dddddd j                  dg       v rdndPddddf
d}Ad }B fd}Cfd}Di }Et               }Ft	        |	ddddd f      D Gci c]  }G|Gd    j                  |Gd   d       }H}Gd j                  d      vxr%  j                  dd|      xs  j                  d      }It	        |	d       }Jt	        |Jdddddt
        hf      }K|KD Lch c]  }L|Lj                  d      dk7  s BL      ! }M}LKD Lch c](  }L|Lj                  d      dk(  rt         BL      d      * }N}LJD ]n  }O|Od   d   }P|Od   t           }Q|Od   t           d   d   }R j                  |Q      d   }S|Od   t           }Ti }Ud|}Vt	        |Pdd f      D ]  }W|Wd   }t)        |       B|W      }Xt        fddD              xs Sj                  xr Sj                  xr | }YVs0d,}V TYxs Sj                        x}ZrUj                  ZdRd       Us(Yr&Fj                  Q        j                  |Q        n;j                  dd g      d[   }[ j                  Wdd      }\|Wj                  d      dk7  }]|]r#Xs CE|X\QU       Wj                  d      sHj                         D ]g  \  }^}_|^s	^}`]r ^dk7  rIs^dX z  }^_t        \d d      z  }_Xd` k(  r D`        C|$|^ d_ dQU        C|$|^_Q[`k(  rUnd^iU       i t        Xd      }X]sXrX|$v rtI        \d      }\Wj                  d      r DX        C|$||X d\ dQU        C|$|X\QU        Mj                  E       Nj                  |$       |MrkNro n FrPMsNrL j                  d,t         dMxr dd/j3                  M       dBNxr dtg        N       dŝdij      ƫ       |$Ad<   E|Ad<   t$        j&                  j                  |      }a|aj                  |aj                  fD ]c  }bt$        j&                  j)                  |b      }c|cj                         D ]/  \  }d}edD ]%  \  }f}g|fdz  }f|fAvsdgv st9        ed+         Af<   ' 1 e |xs d:jK                         j                  d˫      rtU        j^                  d|      }.|.r|.j]                  dͫ      }h|.j]                  dΫ      }i|irij                  dd:      }ihsid d }hAj                  |.j]                  djK                               |.j]                  dѫ      x}jrjgn;|.j]                  dҫ      j#                  dӫ      D jcg c]  }j|jjK                          c}j|.j]                  dԫ      jK                         it7        h      d՜       d֊t	        |ddfd؄ddddf j                  d|ܫ      Ad<   	 |d   d   d   d   d   d+   d   d    d前 dd牉dv rdnddgAj                  di       d<   |rU j                  ||"      xs*  j                  ||"      xs  j                  ||"      xs d Ad<    j                  |      |Ad<   t	        |dtR        g       }kt        |kd      }l|lrlj                  d      }m|mr j                  m      }mt        ld       dk(  rmAd<   nltU        j^                  dm      }.|.rTAj                  |.j]                  d      t        |.j]                  d\            t        |.j]                  d            d       t        ld tR              xs g D ]  }nt        t	        |ndd            }o|oD ]  }pd dfd d gd ffD ]y  \  }q}rt        p|qt
              xs i j                  d      }s|ss.tU        j                  rs      }.|.sGt        |.j]                  d            A|.j]                  d      dz   <       t	        ldddddd	d	d
d
dddt        hfd|      Ad<   t	        |ld      }t|trB j                  td      }u|tj                  d      ruAd<   nAj                  du      uAdu<   t        kd      }v|vrt	        vd      }wt	        |wdddddddddddd dd!ddt        hf      }xAj                   j                  |wd      xs	 xrxd+   nd  j                  wd"      xrxnd d#       @s( j                  t	        wd$d%t        hfd|            }@t        vd& tR              xs g }yd|}z|yD ]  }{t        |{d'       d,u sd,}z n yD ]  }{|{j                  d(      xs i }|||j                  d      }}|}s- j                  |d      }} j                  ||d)      }~|}d*k(  r~Ad+<   _zrb}d,k(  r~Ad<   n}d-k(  r~r~gnd Ad.<   }d/k(  s~Ad<     j                  t	        vd0            } j                  |t        j                        rd,Ad1<   Aj                  |Aj                  d2      @t        |@d d3d t      d4       ty        t        |d5      t        6      xs ty         |d5      t        6      }|rHt        j                  j                  t        j                  j                        j                  d7      n)t        t        |d5            xs t         |d5            }|rs4d8v r/t         j                   j                  ld9                  xs }Ad:<   |Ad;<   |rod<vrjt              j                  t        j                  j                  =      }|t        d>      k\  r'Adl   D ]  }?|?j                  d?      d@k(  sd,|?dA<   ! dBD ]  \  }}fAj                  |      }e|eseAf<      j                  t	        ldC            } j                  |t        j                        xs t        |dDt              } j                  t        j                        rdEn j                  |r&$ j                  t        j                        xs d|nd |r&$ j                  t        j                        xs d|nd Adz   dk\  d n4 j                  t        j                        xs t        |dFt              G      AdH<    j                  |k      |AdI<    j                  |	       |AS c c},w c c}Gw c c}Lw c c}Lw c c}jw # t        t        t        f$ r Y Tw xY w(J  Nz//www.youtube.com/zwatch?v=rU   ).r  r  )errorScreen%playerLegacyDesktopYpcTrailerRenderertrailerVideoIdc                 ,    j                  | d       S )NrX  )_html_search_meta)r  r  r2  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda><  s    $"8"8GT"8"R r{  c                      y r}  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>=  s    r{  r  r  r  .r  r  $structuredDescriptionContentRendererr4  &expandableVideoDescriptionBodyRendererattributedDescriptionBodyTextvideoDescriptionHeaderRendererr  r  r  !playerOverlayVideoDetailsRendererr^   ).r^   )zog:titleztwitter:titler^   zoNo title found in player responses; falling back to title from initial data. Other metadata may also be missing).ri   shortDescription)multicameraplayerLegacyMulticameraRenderermetadataListforce_singlefeed
noplaylistzDownloading just video z because of --no-playlist,c                 .     t         fdt              S )Nc                     |    d   S )Nr   r  )r  rK  s    rz  r  z=YoutubeIE._real_extract.<locals>.feed_entry.<locals>.<lambda>|  s    4 r{  )r4   r  )rK  	feed_datas   `rz  
feed_entryz+YoutubeIE._real_extract.<locals>.feed_entryz  s    &%';S B Br{  rZ   z (rd  url_transparentYoutubez{}watch?v={}r   T)_typer  r}   r^   zNDownloading multifeed video ({}) - add --no-playlist to just download video {}r  lengthSecondsrj   ).r9  rp  z): Video is in Post-Live Manifestless modeallow_unplayable_formats).licenseInfos)r  playerErrorMessageRendererr  	subreasonr   z>The uploader has not made this video available in your countryavailableCountriesregionsAllowed)metadata_availablez. zsign inz,This helps protect our community. Learn morer  r  playerCaptchaViewModelz:. YouTube is requiring a captcha challenge before playbackz-This content isn't available, try again laterr  r  a   has been rate-limited by YouTube for up to an hour. It is recommended to use `-t sleep` to add a delay between video requests to avoid exceeding the rate limit. For more information, refer to  https://github.com/yt-dlp/yt-dlp/wiki/Extractors#this-content-isnt-available-try-again-laterrj  keywordszog:video:tagzyt:stretch=z(\d+)\s*:\s*(\d+)c              3   2   K   | ]  }t        |        y wr}  )rr  )r  r.  s     rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  s     <E!H<s   r  r  r   )..rv   zog:imageztwitter:imager}   )maxresdefaulthq720	sddefault	hqdefault0	mqdefaultr/  sd1sd2sd3hq1hq2hq3mq1mq2mq3r  rh  3c              3   x   K   | ]1  }d D ]*  }ddj                  |||dk(  rdnddk(  rdnd      i , 3 y	w)
)webpjpgr}   z:https://i.ytimg.com/vi{webp}/{video_id}/{name}{live}.{ext}r  _webpr   r  _live)r  rK  r\   r  rO  N)r   )r  rK  r\   rp   r  s      rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  sn      B 	B +. OVV!# #vW2{V_G_Geg W i
 B 
 Bs   7:c              3   D   K   | ]  \  }}d  d | d   v s|  yw)r  r}   Nr  )r  r  tthumbr  s      rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>  s2     eDAqAhZqQRPSBTX]^cXdBdaes     z.webpr  r  r  categorygenrer  externalChannelIdownerProfileUrlstartTimestampendTimestampc                 p    r| j                  d      sydk(  rdk7  r| j                  d      dk(  ryy y y )Nr  Tr  r  r(  r  )r4  rp   r\  s    rz  is_bad_formatz.YoutubeIE._real_extract.<locals>.is_bad_format  sH    $SWW_-E*/D	/Q
+/CC D 0R*r{  rk   r  z(Last 2 hours)r  r  r  r  r  rv   )r  r}   ri   re   rg   z"https://www.youtube.com/channel/%srX  r|   ).	viewCountinteractionCountaverage_ratingaverageRatingr_   isFamilySafeFisFamilyFriendlyr  zog:restrictions:agez18+r   r  rb   ru   rs   playableInEmbedrp   r  r   isShortsEligibler  rL   r  resr  zhdr:12sourcezprefer-vp9-sortcompat_optszvcodec:vp9.2channelsr  r%  ru  )r   r   _format_sort_fieldsc                     t        | j                  d      xs dd      j                  dd      xs | j                  d      S )NvssIdr   r  r7  languageCode)r-   rt  r,  )r   s    rz  get_lang_codez.YoutubeIE._real_extract.<locals>.get_lang_code0  s=     7!3!9r3?GGSQ 1yy02r{  c                     | j                  |g       }j                  D ]>  }i ||g d}|j                  d|dt        dt	        ||            d|ddt
        |i       @ y )N)r4  xosfr\   r}   r	  rK  rd  T)rU  _SUBTITLE_FORMATSr)  r;   r9   rV  )	r  rq  rL  sub_namer<  rp  	lang_subsr4  r  s	           rz  process_languagez1YoutubeIE._real_extract.<locals>.process_language4  sz    !,,Y;I-- 
 :59b9  37#<>NxY^>_`H!4." 	
r{  c                 l    D ].  }|j                  d      dk7  s|j                  d      r*| |d<   0 y )Nr  r  r  r  )rL  r  r  s     rz  "set_audio_lang_from_orig_subs_langzCYoutubeIE._real_extract.<locals>.set_audio_lang_from_orig_subs_langB  s6     .55?f,QUU:5F$-AjM.r{  captionsplayerCaptionsTracklistRenderertranslationLanguagesc                     |d   xr |d   S )Nr  languageNamer  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>O  s    Q~.D1^3D r{  r  r  r   rm  translated_subsr   rz  r{  c                      |d   xr |d   d   S )Nr9  r  r  r  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>W  s    ?+`*>_0` r{  captionTrackskindr  za-r9  r  
clientNameSUBS_PO_TOKEN_POLICYc                     |d   S )Nre  r  r  s     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>i  s    STU^S_ r{  re  c              3   :   K   | ]  }|t        d       v   yw))exp.Nr  )r  r  rx  s     rz  r  z*YoutubeIE._real_extract.<locals>.<genexpr>o  s     T\"l;;Ts   )xpexpvr!  r  )r$  potcr  rK  isTranslatableundr7  z from %sz-origz (Original)tlangz (auto-generated)zL: There are missing subtitles languages because a PO token was not provided.z+Subtitles for these languages are missing: zAutomatic captions for z languages are missing.)rv  automatic_captionsrY  ))r  )r  r  )end)r&  _timez
Auto-generated by YouTube.u  (?xs)
                    (?:\n|^)(?P<track>[^\n·]+)\ ·\ (?P<artist>[^\n]+)\n+
                    (?P<album>[^\n]+)\n+
                    (?:℗\s*(?P<release_year>\d{4}))?
                    (?:.+?\nReleased\ on\s*:\s*(?P<release_date>\d{4}-\d{2}-\d{2}))?
                    (?:.+?\nArtist\s*:\s*(?P<clean_artist>[^\n]+)\n)?
                    .+\nAuto-generated\ by\ YouTube\.\s*$
                r   r      r   clean_artistr   u    · r   )r   r   r   r   r   )r  z!engagement-panel-comments-section)r  twoColumnWatchNextResultsr  r  r  .r  r  . commentsEntryPointHeaderRenderercommentCountc                     |d   d   v S )Nr  panelIdentifierr  )r  r.  COMMENTS_SECTION_IDSs     rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    Q/S-TUf-gk- r{  header"engagementPanelTitleHeaderRenderercontextualInfor  rh   r  r*  conversationBarliveChatRenderercontinuationsreloadContinuationDatar{  z https://www.youtube.com/watch?v=z &bpctr=9999999999&has_verified=1json)r  r  youtube_live_chatyoutube_live_chat_replay)r}   r  r\   r  	live_chatr   rn   )r  r*  r  r  r  r.  videoPrimaryInfoRenderersuperTitleLinkc                     | d   d   S )NsuperTitleIconr  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    !$4"5j"A r{  LOCATION_PINr\  u   (.+?)\s*S(\d+)\s*•?\s*E(\d+)r   )seriesseason_numberepisode_numberc                     | d   d   d   S )NvideoActionsmenuRenderertopLevelButtonsr  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>  s    a/?@QR r{  )toggleButtonRenderer.)"segmentedLikeDislikeButtonRenderer.rG  c                     | d   d   d   S )NdefaultTextaccessibilityaccessibilityDatar  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>"  s    a&6&GH[&\ r{  z*(?P<count>[\d,]+)\s*(?P<type>(?:dis)?like)c                     | d   S )NrK  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>$  s    !O*< r{  c                     | d   d   S )NrL  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>%  s    !,?*@AT*U r{  zK(?P<type>(?:dis)?like) this video along with (?P<count>[\d,]+) other peoplerz  rs  r  _countrD  rE  rF  #segmentedLikeDislikeButtonViewModellikeButtonViewModeltoggleButtonViewModeldefaultButtonViewModelbuttonViewModelaccessibilityTextr  ro   )r  videoViewCountRendererr  r  r  videoSecondaryInfoRenderer)ownervideoOwnerRendererattributedTitlecommandRunsonTapr  showDialogCommandpanelLoadingStrategyinlineContentdialogViewModelcustomContentlistViewModel	listItemslistItemViewModelsubscriberCountText)rc   rd   r   )navigationEndpoint)r^   runs.rf  )r  r  c                     | d   d   d   S )NmetadataRowContainermetadataRowContainerRendererrm  r  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>S  s    !234RSTZ[ r{  c                     | d   d   S )NmetadataRowRendererhasDividerLiner  r  s    rz  r  z)YoutubeIE._real_extract.<locals>.<lambda>W  s    !,A*BCS*T r{  rl  )r  r   Licenser   AlbumArtistr   Song)rX  rY  r  r   rc   zhttps://www.youtube.com/%s)ry   rz   r{   
uploadDate)timezonez%Y%m%d)rq   NdateTextrx   rw   )r  rp  r  )tzinfoztoday-2daysr  m3u8_native__needs_testing))r   r   )r   r   r  	isPrivatera   
isUnlisted)
is_privateneeds_premiumneeds_subscriptionr   is_unlistedr`   __post_extractor)r7   	_match_idhttp_schemer  r2   r  r!   r  r  r  r  r  _preferred_langr  rt  rw  r  r  r0  r1  r*   unquote_plusr)  r.   r   r  playlist_resultr"   r(   r  r  
report_drmr   r(  raise_geo_restrictedr  r,   r  r^  r  raise_no_formatsrr  r  finditer_meta_regexr5   r  r  groups_extract_thumbnailsr  rg  r'  r  rq  _remove_duplicate_formatsr  _sort_thumbnailsr  r/   r)   rq  r  r#   r  ry  handle_from_urlr    r   rp  r  r-   rV  rY  rQ  rZ  r  r  rS  rs  rC  r}  r4  r  r2  fragmentrp  endswithr,  r   rU  KeyError
IndexError	TypeErrorr  r  "_extract_chapters_from_descriptionr  r4   r  r<   r  r0   r'   r  r  r   r  r   dtdatetimefromtimestamprs  utcstrftimer6   r1   r  r   AVAILABILITY_PRIVATEr  AVAILABILITY_PUBLIC_availabilityAVAILABILITY_PREMIUMAVAILABILITY_SUBSCRIPTIONAVAILABILITY_UNLISTEDextract_commentsmark_watched)r  r}   r  rq  r  r_  r  r  r+  rw  r  playability_statusestrailer_video_idsearch_metar  r  initial_sdcrinitial_descriptioninitial_vdhrinitial_video_details_rendererinitial_titletranslated_titlevideo_titletranslated_descriptionoriginal_descriptionvideo_descriptionmultifeed_metadata_listentriesfeed_idsfeedr  feed_id
feed_titler^   rj   r  r%  rZ  pemrr  r  	countriesregions_allowedr  r  keywordr  whratior  r  thumbnail_urloriginal_thumbnailsthumbnail_namesn_thumbnail_namesr  r  re   owner_profile_urlr  live_end_timer  r4  channel_handler  r  r  r  rY  skipped_subs_clientsr%  translation_languagesget_translated_subsr  all_captionsr8  need_subs_langsneed_caps_langsr5  pctrr<  innertube_client_namer.  rj  
pot_paramsalready_fetched_potcaption_trackrL  requires_potsubs_po_token	orig_lang	lang_nameis_manual_subs
trans_code
trans_nameorig_trans_coder{  	componentrp  r-  r.  d_ks_ksr   r   ar  vpirstltlbtbrsr  getterregexrz  vcrvcvsirvorcollaboratorsrm  multiple_songsrowmrr	mrr_titlemrr_contents_textowner_badgesrw   rx   upload_datetimes_kr  rz  r/  r  r  rp   r\  rx  r  r  r2  s   `                                                                                                                                     @@@@@@@@@rz  _real_extractzYoutubeIE._real_extract&  s   *33]>>#&##%(<<+h6dhdydy^XeGa.CEUWa  ,8 N % V ?? $++-1AC C " S(6 	 %%57L\`a#O 
 $L%I=vs3L M +<SB+Ys:D E $LS:TFC3I J PMO 	)5l5~/$E9 *: *@=? 	' NN<1 G~~<gF 	  >>,G,,A1A N#M7;N*N &&LM 	 }56 (K!%>R!S(8JK
 (<'G !!<&< $ $Mc	 	
 $ 3"+N# #=+<+<=O+P~~l+!8
B[\]399#> -D !' 5 511$7!9IB ).G" !+G!4J'E!2j\!33NN!2"+**11(IdOA<NO/6 8 "'$  OOG,5-6 dkk		(+X78 ++X{4EG G  	- IJ G"9\?#KLG%k*&=>GBF 	
 x}FVXbdlm 	IW6H%&68NO+%z)RST>>"<=,~_tBu)$=TS YVX  ^^D(3`yAUW_7`F"4>>$#D#JKI''(hi ),8L MI$*56F*GBQO$9$9#$>W[	--iW[-\Byk**.'0^_F *6<<>3 ?@4C[C[B\]F3mE]`d_e5fgZZFDN%fllnc:;2PTPePen  lA  >B Bw x  %%ft%<]JdKQrG T%5%5n%EwOQ QWWY/0QH Q   	G!!-0yy!5w?<dkkm<DAq1uQ !A!( =A uuX&87<"3 4= 	 --}l.KMde
#Z$AB}  )oo/

  0 B &	B 	B
   	SEeIo$>egxyA(/5<(?1RAPQE"RE,	S 	&&z2))*=>\:6N+g:N&&{m[1 (':;(;'() *
 &l4EF'	2HJZ([\%i0F&WXMo$6H $ ; ;K R	 -1 	dC!$!6!<" BC!.sww}/EGW_b!cC	d !11?CmU`dmUmo 	t//0@(KL--.?@"
("
["
 w"
 *	"
 &9;G"
 ,"
 *"
 <
D:^hlm"
 "
 +=,79KL 3124"
 mIm_,UV"
  ,75@12g=45>  FG'"
( ;)"
* 8*d+"
, H-"
.  +?AR!S/"
0 ;1"
4 !*- I ),8J KW!05%8"3t~~mUW7X"X^fHfg$7="
H	2		.
 	"u
 %%5Z!BDZD8F G!
  $..n1EPQ."RR!
 !
 0t7N7Nv7VV [NN.6Y$..:Y 	 +`c#C>QTW[V\*^ _9Eb#QW\aIa=-bb $Aswwv%'? s+T2A A  T	Bj>"CDD_-.HIK$&$78X$YZb$cdp$q!+/+B+B;+OPf+gJ')/':;]'^$J"'!-d_F_4`!a Da(3h')-8	 T^TT u"++sZ5X5X5r]r0s 
 +*.'(@,JpZdZpZp(qq}q"))#0$'!6+  "l(,,[966xMFF6D6226	 NN=&1NM	!.!2!26!:e!C!$ $!8Y	;PZ\(,,-=> .C.I.I.K m*J
% &0O%**=2$")o5
"l9dJ&OO
 b(9$:::?K ).ZL:N)l+6ZQ %*Hj*k&/?&B
R\Hk`jHkm%m0 )D9	!iCU6U&y2EF	 $$%566yA$*H56I$+[1;
L !&)YU_aGDaN --i8--.@A#iT	l  _..x=*hio&QRVR[R[\kRlQmmn$ok&=c/>R=SSj$k	D.  &8!"%[\\**3/
$--z/?/?@ 	9ILL)))4E 91!O 9IC7NC$19$21Q4$8S	99	9 #**,556TU99 '(D #zz.9#zz.9#/#7#7R#@L''3BQ'7!ZZ8-1ZZ-G(G(G9=H9M9S9STZ9[%\Aaggi%\!ZZ0668$0$/$=   ] ,\ <
  0(<`br
 %!9_	$%@ABSTUghixyz{|  ~V  W  Xf  g :(Ccd$4?C]4]0"<> =DOOK,[9 00xH ??hW::;LhW 	  #33LADOe, #=>((+,CnnS)ACFTU (+D$99%FLD&*jjm-0A-?.1$**Q-.@% 
  R    &   :[]^   &C\I+K != UN  nMo*p & ")fd!;!Ar F Fw O #%88E5#9D#FPQUQ[Q[\cQdFeTZZ%7(%B C %&&&, ".d0A357LNc')@BZ!#6	5G QV	"WD t%LMC__S+6778$46D01XXl+3)+D&#?@t%DEC(!=#w@RTg&9JO]lS"5w	C5/R SM KK>>#w7hP]M!<Lcg*.//#?T*U-:M  "!%!5!5 \r' )./"0 [    #N 3 TUY]]%)N  :gg34:GGG,	  NN38	$(NN3$H!	)&7DO' G+(9W"h.AR+<*=X\Y"f,(9W:   //TCl0mnL|Y-?-?@.2*++)(?[eij
 	 )L,?*U M[6L 	
 YbBKK%%iAJJ8T	, EF >";|#<=	 	 9@R1R*%%dnnT:&FGI XLW  *]%[;.UU/<DDBKKOOD\O"3M"BB	? 6Cwwz*m;15-.6 J 	HCAS		
 %%l4&BCoofi.L.LM S"=+TR 	 	0M0MNH##% !-1G OOFI,J,JK T !-1G OOFI,O,OP T,2$.$6DOOFI,K,KL Q |4P $ S 	^ $(#8#8RZ\c#d ($45gQX!
 cAD &]" *i0 		sA   %!AY:!AY?AZ 
AZ0-AZ	%AZ
AZ ZAZ+Z*AZ+rP  )T)NFr}  )NNr   )S__name__
__module____qualname__IE_DESCr   r  r	   _INVIDIOUS_SITES
_VALID_URL_EMBED_REGEX_RETURN_TYPEr;  r  r%  r$  r#  r"  _GEO_BYPASSIE_NAMEr  r  _TESTS_WEBPAGE_TESTSr   r  r  r4  r3  classmethodrv  r~  r  r  r  r  r  r   r'  r  r9  r  rB  rO  rR  rY  r}  r  r  r  r  r  r  r  rD  staticmethodrr  r  r  r  r
   r  r  r  r  r  r  r  r3  r7  rm  rq  rw  r}  re  ry  r  r\  r  r  r  r  r  __classcell__)r  r-  r.  ry  s   000@rz  rH   rH   T   s7   G !@ "(((3DDE "( "A H		8L& LO
 P:-DFKGhG
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 
 {
  #!
" :#
$ "&8#%-0I7
: $?  hB +6ZA%
  AhZ 4J
-
5
 <
 	

 H
 12
 ,
 %c
 4
 U
 S
 A
 
 {
 #
  :!
"  #
$ 8#%-0I3
6 $=YhX A<
-
5
 .
 	

 H
 12
 y
 %c
 4
 U
 S
 2
 
 #
 :
  '!
"  #
$ 8#%!%>3
8 !-1

 0G$Whb =
-
5
 a
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"*C7
< /!-1
A%_hn I8
-
5
 N
 	

 L
 8*
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%(A7
: #D)9G$ihr P8
-
5
 2
 	

 H
 ?+
 }
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%%,E7
: #D)A!qht I8
-
5
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
6 :=shr 58
-
5
 <
 	

 H
 7)
 |
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%$'@1
qhl 18khz 
-
5
 2
 	

 H
 7)
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%"&?7
: 66"D)G$sh~	 
-
5
 L
 	

 H
 8*
 z
 %c
 4
 "4
 U
 A
 
 #
 :
  ,!
"  #
$ '!+8#%"&?7
: #D)A!{	h@ =
-
5
 O
 	

 J
 +,
 {
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$  '8#%#'@5
8 #D)? }
hD }hN =
-
5
 |
 	

 H
 +,
 }
 %c
 4
 U
 A
 
 #
 :
 '
   !
" J#
$ 9#%%)B1
4 #D)=IhL ;
-
5
 H
 	

 J
 8*
 /
 %c
 4
 U
 S
 A
 
 #
 :
  ,!
"  #
$ '!+8#%04M7
< !-1
C&GhX =	Shb =	]hh .ghn qmh~ =
-
5
 K
 	

 H
 -.
 }
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%%)B3
6 #D)E#sh~ =	yhF =BA%
 -Ch\ =Yhd =
-
5
 w
 	

 H
 ;-
 H
 %c
 4
 U
 	
 A
 
 M
 #
  :!
" '#
$ "&8#%I(A5
8 #D)? ahd =
-
5
 O
 	

 H
 ,-
 '
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" M#
$ %!!%8#%(+D;
> #D)E#ahh ]ghr =	mh| =%A%1
 /whT =
-
5
 4
 	

 H
 ?+
 x
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#% $=7
: 77"D)C"QhZ =7A%
 ^Uhr ohz wh@ 8hF CEhN ;KhV =Sh` =	[hl ? 
- 
5 
 ] 
 	 

 : 
  
 	{ 
 H 
 7) 
 y 
 %c 
 4 
 "4 
 U 
 S 
  ! 
" A# 
$ "%!!%&8#"%!? 
B #D)M'eht Ash~ PA%"W>	
 $yh\ =
-
5
 Z
 	

 H
 +,
 (
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%)+D1
4 #D)=Wh^ =
-
5
 B
 	

 H
 ;-
 {
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%#<U9
< #D)I%Uhb =_hh Cghp !
-!
5!
 Z!
 	!

 [!
 !
 12!
 H!
 7)!
 0!
 %c!
 4!
 "4!
 U!
 S!
  23!!
" A#!
$ "%!!%& 8#%1A!
D #D)K&mh| =yhD =
-
5
 \
 	

 L
 ,-
 ~
 %c
 4
 "4
 U
 S
 A
 
 #
  :!
" '#
$ "&8#%&)B5
8 :? AhF 
-
5
 Q
 	

 H
 ,-
 *
 %c
 4
 U
 A
 
 :
 '
  
  I!
" 8#
$ $%+1J/
2 #D);Ah@ }hH ?EhP =MhX =
-
5
 5
 	

 H
 ?+
 |
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%$(A9
>  )?YK*HI!

 (M'Uhf ?#i-)1M%NO	chp <mhv <
-
7
 ,
 	

 H
 ;-
 y
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ &!!%8#%!%>9
> !
C%uhB  =
-
5
 C
 	

 H
 8*
 }
 %c
 4
 U
 S
 A
 
 {
 #
  :!
" '#
$ "&8#%%(A5
8 #D)? hB! =
-
5
 ;
 	

 H
 ?+
 z
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%&!+8#%"&?;
> #D)E# hJ" =
-
5
 S
 	

 H
 7)
 {
 %c
 4
 "4
 U
 $S
 A
 #
 9
  ,!
"  #
$ '!+8#%#&?7
: #D)C"E"hJ# =
-
5
 A
 	

 J
 7)
 |
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#%$(A1
4 #D)9I#hH$ =
-
5
 <
 	

 J
 +,
 *
 4
 U
 2
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
2 #D);C$hB% =
-
5
 ;
 	

 H
 +,
 *
 4
 U
 A
 
 #
 :
 '
  
  B!
" 8#
$ $%+'@/
4  )6D6*:;!
 CCA!$hB& "<A&hJ& 6<
-
5
 ;
 	

 H
 ?+
 y
 %c
 4
 "4
 U
 S
 A
 
 {
  #!
" :#
$ "!%8#%!%>7
<  )?UG*DE!

 $K&I&hV' ?<
-
6
 :
 	

 L
 ?+
 '
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%(+D3
8  !
 :E#U'h\( H9
-
5
   b
 	

 H
 ?+
 .
 %c
 4
 "4
 U
 

 S
 A
 
  {!
" ##
$ &&!%&!+8#%/)B=
@ #D)G$[(hf) =
-
6
 =
 	
 ~
 %c
 4
 "4
 U
 	
 S
 A
 
  {!
" ##
$ :%
& ''
( "&8#%&)B9
>  )"' ){+  "
 $Q)c)hz* <
-
5
 O
 	

 H
 +,
 x
 %c
 4
 U
 2
 
 #
 :
 '
   !
" B#
$ 9#% (A1
4 #D)=u*hv+ ?!
-!
5!
 ]!
 	!

 ]!
 +!
 J!
 D!
 !
 A!
 '!
 !
 ~!
 4!
 U!
  "4!!
" %c#!
$ !U"")J&#%!%$%A!
F T
K(s+hF- =
-
5
 G
 A	

 '
 
 +
 D
 |
 4
 U
 S
 #
 #
 
  !
" K#
$ ++%'89#%!%$%3
6 #D)=C-hD. =
-
5
 @
 A	

 '
 

 >
 B
 z
 4
 U
 S
 #
 #
 
  !
" U#
$ #)z#%!+&!%$%7
: #D)A!A.hF/ =
-
5
 _
 2	

 '
 +
 <
 @
 *
 4
 U
 %c
 #
 #
 
  !
" O#
$ ,,#%!+&!%$%"9
> "
C%C/hP0 =
-
5
 X
 2	

 '
 	
 +
 D
 y
 4
 U
 #
 #
 
 
  O!
" +,#
$ #%!%&%!3
8 "
="M0hFX1 w
-
5
 8
 :	

 A
 
 I
 4
  
 8
 #
 S
 *
 :
 U
  H!
" #
$ 12&)+T;"#!5
8 #D)A!H Q
-
5
 g
 	

 H
 8*
 ,
 %c
 4
 U
 S
 A
 
 #
 :
  '!
"  #
$ 8#%-3L3
6 #D)? F _
-
5
 T
 	

 H
 7)
 |
 %c
 4
 U
 S
 2
 
 #
 :
  !
" '#
$ "&8#%$(A5
8 #D)A!H [
-
5
 J
 	

 H
 +,
 S
 %c
 4
 U
 A
 
 #
 :
 '
   !
" I#
$ 9#%TTm1
6  )=8**EF!
="J (XAS
 "D)IQNf "*!%1440059?A
 8N7S7S7U%V%Vtq!ad%V"% %";
5'nmF^	, 26$ +sZ 48 AL 
/(    	3 Z_  _d R!F'7R 4 4.  0
:/bV(p 9 9	R = = 
 
("3 " "H %*oFYFYaetx$(X\fj %XO Xt4<l 	^ 	^ ^ ^)V3-j`D
55&KZ$L"<G, 	
i"L
A> &Ws   CAH?rH   )\r  r  rQ  r  r  r  rE  ro  r^  r  rY  r  r  urllib.parser0  _baser   r   r   r   r   r	   r
   r   r   jsc._builtin.ejsr   jsc._directorr   jsc.providerr   r   r   r   pot._directorr   pot.providerr   r   networking.exceptionsr   utilsr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   utils.networkingr=   r>   r?   rV  rZ  rW  rX  rY  r[  r]  rt  rH   r  r{  rz  <module>r     s            	 
   
 
 
 , 2 a a 2 8 .& & & & & & & & & &N K J. %C "$A !'G $#?  'G $(I %K ^E( ^Er{  