
    V|he                     Z    S SK r S SKrS SKrSSKJr  SSKJrJrJ	r	J
r
Jr   " S S\5      rg)    N   )InfoExtractor   )ExtractorErrorfloat_or_noneint_or_nonetry_geturl_or_nonec                   "   \ rS rSrSrSrSrSS\" \R                  " 5       5      SSSSSS\" \R                  " 5       5      S	.
r
S
SSSSSSSSSSS.	S.SSSSS.S.SSSSS.S.SSS SS!S"S#S$.S.S%S&S'.S(S&S'.S)S*S+SS,S-S.S$.S./rS/ rS4S1 jrS2 rS3rg0)5	PlutoTVIE   Fa  (?x)
        https?://(?:www\.)?pluto\.tv(?:/[^/]+)?/on-demand
        /(?P<video_type>movies|series)
        /(?P<series_or_movie_slug>[^/]+)
        (?:
            (?:/seasons?/(?P<season_no>\d+))?
            (?:/episode/(?P<episode_slug>[^/]+))?
        )?
        /?(?:$|[#?])z3https://service-vod.clusters.pluto.tv/v3/vod/slugs/webnafalseunknown)
appName
appVersionclientIDclientModelNumberserverSideAds
deviceMakedeviceModel
deviceTypedeviceVersionsidzYhttps://pluto.tv/on-demand/series/i-love-money/season/2/episode/its-in-the-cards-2009-2-3 ebcdd8ed89aaace9df37924f722fd9bd5de6c598e9379ae4912df0a8mp4zIt's In The Cardsu   The teams face off against each other in a 3-on-2 soccer showdown.  Strategy comes into play, though, as each team gets to select their opposing teams’ two defenders.zI Love Moneyr      i  )	idexttitleepisodedescriptionseriesseason_numberepisode_numberduration)urlmd5	info_dictz8https://pluto.tv/on-demand/series/i-love-money/season/1/   5de6c582e9379ae4912dedbdzI Love Money - Season 1)r    r"   )r)   playlist_countr+   z/https://pluto.tv/on-demand/series/i-love-money/   z2https://pluto.tv/on-demand/movies/arrival-2015-1-1 3cead001d317a018bf856a896dee17625e83ac701fa6a9001bb9df24Arrivalu   When mysterious spacecraft touch down across the globe, an elite team - led by expert translator Louise Banks (Academy Award® nominee Amy Adams) – races against time to decipher their intent.i(#  )r    r!   r"   r$   r(   zohttps://pluto.tv/en/on-demand/series/manhunters-fugitive-task-force/seasons/1/episode/third-times-the-charm-1-1T)r)   only_matchingzFhttps://pluto.tv/it/on-demand/series/csi-vegas/episode/legacy-2021-1-1zPhttps://pluto.tv/en/on-demand/movies/attack-of-the-killer-tomatoes-1977-1-1-ptv1 7db56369c0da626a32d505ec6eb3f89f5b190c7bb0875c36c90c29c4zAttack of the Killer Tomatoesz]A group of scientists band together to save the world from mutated tomatoes that KILL! (1978)iD  c           
         / 0 [        5       penU GH  nU R                  UR                  S5      USSS9nU(       d  M.  [        R                  " SU[        R
                  5      n	U	(       a@  UR                  [        R                  R                  U	R                  S5      S5      5        M  [        R                  " SU[        R
                  5      n	U	(       d  M  UR                  [        R                  R                  U	R                  S5      S	5      5        GM     U H:  n
U R                  XS
SSSS9u  pUR                  U5        U R                  X\5      nM<     U(       a  XEp2X#4$ U R                  S5        X#4$ )Nr)   zDownloading m3u8 playlistF)notefatalz)^(https?://.*/)0\-(end|[0-9]+)/[^/]+\.ts$r   z0-end/master.m3u8z ^(https?://.*/).+\-0+[0-1]0\.ts$zmaster.m3u8r   m3u8_nativehlsm3u8_idr8   zUnable to find ad-free formats)set_download_webpagegetresearch	MULTILINEaddurllibparseurljoingroup#_extract_m3u8_formats_and_subtitlesextend_merge_subtitlesreport_warning)selfvideo_idformats	subtitlesad_free_formatsad_free_subtitles	m3u8_urlsfmtresfirst_segment_urlm3u8_urlfmtssubss                R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/plutotv.py_to_ad_free_formatsPlutoTVIE._to_ad_free_formatsc   sl   8:BIC((/J ) C  "		<c! !LL(():)@)@)CEXY[ "		3S! ! LL(():)@)@)C]SU' * "HAAE=%u B VJD""4( $ 5 56G N	 "
 !0Y !!  @A!!    Nc           
         UR                  SU5      n/ 0 pe[        US [        5      =(       d    /  Hk  nUR                  S5      S:w  a  M  [        UR                  S5      5      nU R	                  XSSSSS	9u  pUR                  U	5        U R                  Xj5      nMm     U R                  XEU5      u  pVUUUUR                  S
5      UR                  S5      [        UR                  S5      SS9S.nU(       aU  UR                  UUR                  S
5      [        UR                  S5      5      [        UR                  S5      5      S.5        U$ )N_idc                     U S   S   $ )Nstitchedurls )xs    rY   <lambda>+PlutoTVIE._get_video_info.<locals>.<lambda>   s    q}V7Lr\   typer:   r)   r   r9   Fr;   namer$   r(   i  )scale)r    rN   rO   r"   r$   r(   seasonnumber)r%   r#   r&   r'   )r?   r	   listr
   rH   rI   rJ   rZ   r   updater   )rL   
video_jsonslugseries_namerM   rN   rO   	video_urlr)   rW   rX   infos               rY   _get_video_infoPlutoTVIE._get_video_info   s@   >>%. -LdSYWYYI}}V$-immE23CAAumU% B QJDNN4 --i>I Z "55hS "^^F+%>>-8%jnnZ&@M
 KK%%>>&1!,Z^^H-E!F"-jnnX.F"G	  r\   c           	         U R                  U5      R                  5       nUS   nU R                  U R                  U-   X0R                  S9nUS   S:X  Ga  UR                  SU5      nUR                  S5      UR                  S5      pv/ nUS    Hl  n	Ub   U[        U	R                  S	5      5      :w  a  M&  U	S
    H=  n
Ub  XzR                  S5      :w  a  M  UR                  U R                  XU5      5        M?     Mn     U(       d  [        S5      eUb  [        U5      S:X  a  US   $ UnUb  USU-  -  nU R                  UUR                  SU5      US9$ U R                  XC5      $ )Nseries_or_movie_slug)query
video_typer%   rg   r&   episode_slugseasonsrj   episodesrn   z$Failed to find any videos to extractr   r   z - Season %dr^   )playlist_idplaylist_title)_match_valid_url	groupdict_download_json	_INFO_URL_INFO_QUERY_PARAMSr?   r   appendrr   r   lenplaylist_result)rL   r)   mobj	info_slugrm   ro   r&   rx   videosri   r#   r|   s               rY   _real_extractPlutoTVIE._real_extract   sy   $$S)335/0	(())CYVmVm(n
)$..;K*.((?*CTXXnE]<F$Y/ ,+fjjYaNbBc1c%j1G#/LKKPVDW4W MM$"6"6wk"Z[  2 0 $%KLL'CK1,<ay (N(.="@@''4>NN5)4T7E ( G G ##J::r\   rb   )N)__name__
__module____qualname____firstlineno___WORKING
_VALID_URLr   struuiduuid1r   _TESTSrZ   rr   r   __static_attributes__rb   r\   rY   r   r      s2   HJ FI

%! "4::<  o50-/  J(!""# 
	
 N 02
 E 0'
 H50"  d 

 E!
 \!

 f508~ 
	
]9Fv "D@;r\   r   )r@   urllib.parserD   r   commonr   utilsr   r   r   r	   r
   r   rb   r\   rY   <module>r      s)    	   ! q; q;r\   