Ë
    š„jž»  ã                   ó�  — d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddl m!Z!m"Z"m#Z#  G d	„ d
e«      Z$ G d„ de«      Z% G d„ de«      Z& G d„ de«      Z' G d„ de'«      Z( G d„ de'«      Z) G d„ de'«      Z* G d„ de'«      Z+ G d„ de'«      Z, G d„ de«      Z-y)é    Né   )ÚInfoExtractoré   )ÚHEADRequest)Ú	HTTPError)ÚExtractorErrorÚfloat_or_noneÚint_or_noneÚjoin_nonemptyÚ
js_to_jsonÚjwt_decode_hs256Úmimetype2extÚ
orderedSetÚparse_age_limitÚparse_iso8601Úreplace_extensionÚsmuggle_urlÚstrip_or_noneÚtry_getÚunified_timestampÚ
update_urlÚurl_basenameÚurl_or_noneÚurlencode_postdataÚurljoin)ÚrequireÚtraverse_objÚtrim_strc                   óÄ   — e Zd ZdZdZddddddd	d
ddœddœddddddddddœddœddddddddddœddœd d!d"dd#d$d%d&dd'œd(œd)d*dd+d,d-d.dd'œd(œgdd/œd0d1d2d3d4œd5d6œgZd7„ Zd8„ Zy9):ÚCBCIEzcbc.caz`https?://(?:www\.)?cbc\.ca/(?!player/|listen/|i/caffeine/syndicate/)(?:[^/?#]+/)+(?P<id>[^/?#]+)zGhttp://www.cbc.ca/22minutes/videos/clips-season-23/don-cherry-play-offsÚ 97e24d09672fc4cf56256d6faa6c25bcÚ
2682904050Úmp4u   Don Cherry â€“ All-Starsu^   Don Cherry has a bee in his bonnet about AHL player John Scott because that guyâ€™s got heart.iX±VÚ20160203úCBCC-NEW©ÚidÚextÚtitleÚdescriptionÚ	timestampÚupload_dateÚuploaderzGeo-restricted to Canada©ÚurlÚmd5Ú	info_dictÚskipzPhttp://www.cbc.ca/22minutes/videos/22-minutes-update/22-minutes-update-episode-4Ú 162adfa070274b144f4fdc3c3b8207dbÚ
2414435309z*22 Minutes Update: What Not To Wear QuebeczKThis week's latest Canadian top political story is What Not To Wear Quebec.Ú20131025iÓ™jR)r'   r(   r)   r*   r,   r-   r+   zNo longer availablezRhttp://www.cbc.ca/archives/entry/1978-robin-williams-freestyles-on-90-minutes-liveÚ 0274a90b51a9b4971fe005c63f592f12Ú
2487345465z,Robin Williams freestyles on 90 Minutes Livez‹Wacky American comedian Robin Williams shows off his infamous "freestyle" comedic talents while being interviewed on CBC's 90 Minutes Live.Ú19780210iÈæAz404 Not Foundznhttp://www.cbc.ca/natureofthings/blog/birds-eye-view-from-vancouvers-burrard-street-bridge-how-we-got-the-shotÚ 377572d0b49c4ce0c9ad77470e0b96b4Ú
2680832926z&An Eagle's-Eye View Off Burrard BridgezwHercules the eagle flies from Vancouver's Burrard Bridge down to a nearby park with a mini-camera strapped to his back.Ú20160201i¤‚¯V)r'   r(   r)   r*   r,   r+   r-   )r0   r1   Ú 415a0e3f586113894174dfb31aa5bb1aÚ
2658915080zFly like an eagle!zFEagle equipped with a mini camera flies from the world's tallest towerÚ20150315iÐÎU)r/   Úplaylistr2   zJhttp://www.cbc.ca/news/canada/calgary/dog-indoor-exercise-winter-1.3928238zWKeep Rover active during the deep freeze with doggie pushups and other fun indoor tasksz$dog-indoor-exercise-winter-1.3928238z$md5:c18552e41726ee95bd75210d1ca9194c)r)   r'   r*   é   )r/   r1   Úplaylist_mincountc                 óH  — | j                  ||t        «      }|j                  d«      }|sc|d   }| j                  d|› d�|d¬«      }|rt	        |d„ t
        «      }|s0| j                  d|z   |«      d	   d
   d   j                  d«      d   }| j                  d|› �d|«      S )NÚmediaIdÚclipIdzLhttp://tpfeed.cbc.ca/f/ExhSPC/vms_5akSXx4Ng_Zn?byCustomValue={:mpsReleases}{ú}F©Úfatalc                 ó   — | d   d   d   S )NÚentriesr   Úguid© ©Úxs    úK/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/cbc.pyú<lambda>z,CBCIE._extract_player_init.<locals>.<lambda>~   s   € °1°Y±<À±?À6Ñ3J€ ó    z\http://feed.theplatform.com/f/h9dtGB/punlNGjMlc1F?fields=id&byContent=byReleases%3DbyId%253DrI   r   r'   ú/éÿÿÿÿú
cbcplayer:Ú	CBCPlayer)Ú_parse_jsonr   ÚgetÚ_download_jsonr   ÚstrÚsplitÚ
url_result)ÚselfÚplayer_initÚ
display_idÚplayer_infoÚmedia_idÚclip_idÚfeeds          rN   Ú_extract_player_initzCBCIE._extract_player_initu   sÒ   € Ø×&Ñ& {°JÄ
ÓKˆØ—?‘? 9Ó-ˆÙØ! (Ñ+ˆGØ×&Ñ&ØaÐbiÐajÐjlÐmØ˜uð 'ó &ˆDñ Ü" 4Ñ)JÌCÓP�ÙØ×.Ñ.ØrÐu|Ñ|Øóà&ñ(à()ñ+à+/ñ1ç16±°s³¸Bñ@�ð �‰ ¨H¨:Ð6¸ÀXÓNÐNrP   c                 ól  — | j                  |«      }| j                  ||«      }| j                  |d ¬«      xs( | j                  d|dd ¬«      xs | j	                  |«      }| j                  d|dd|¬«      }| j                  d|d|i t        ¬	«      }t        j                  d
|«      D �cg c]  }| j                  ||«      ‘Œ }}g }dD ]'  }	|j                  t        j                  |	|«      «       Œ) |j                  t        |dddddd„ ddt        hf	«      «       t        |ddt        hf«      x}
r|j                  |
«       |j                  t        |«      D �cg c]  }| j!                  d|› �d|«      ‘Œ c}«       | j#                  ||t%        |«      | j'                  |«      «      S c c}w c c}w )N©Údefaultztwitter:titler)   u'   ^(?P<title>.+?)(?:\s*[|â€“-]\s*CBC.*)?$zcleaned title)Úgroupre   úwindow\.__INITIAL_STATE__\s*=úinitial state)re   Útransform_sourcez,CBC\.APP\.Caffeine\.initInstance\(({.+?})\);)z%<iframe[^>]+src="[^"]+?mediaId=(\d+)"z<div[^>]+\bid=["\']player-(\d+)zguid["\']\s*:\s*["\'](\d+)ÚdetailÚcontentÚbody.c                 ó   — |d   dk(  S )NÚtypeÚpolopoly_mediarK   ©Ú_Úvs     rN   rO   z%CBCIE._real_extract.<locals>.<lambda>�   s   € ˜˜6™Ð&6Ñ6€ rP   ÚsourceIdÚappÚ	contentIdrS   rT   )Ú	_match_idÚ_download_webpageÚ_og_search_titleÚ_html_search_metaÚ_html_extract_titleÚ_search_regexÚ_search_jsonr   ÚreÚfindallrb   Úextendr   rX   Úappendr   rZ   Úplaylist_resultr   Ú_og_search_description)r[   r/   r]   Úwebpager)   Údatar\   rI   Ú	media_idsÚmedia_id_reÚ
content_idr_   s               rN   Ú_real_extractzCBCIE._real_extract…   sû  € Ø—^‘^ CÓ(ˆ
Ø×(Ñ(¨¨jÓ9ˆØ×&Ñ& w¸Ð&Ó=ò 6Ø×*Ñ*¨?¸GÀWÐVZÐ*Ó[ò6à×,Ñ,¨WÓ5ð 	ð ×"Ñ"Ø6Ø�?¨'¸5ð #ó Bˆð × Ñ Ø,¨gØ˜Z°Äjð !ó Rˆô  "Ÿz™zÐ*YÐ[bÓcöeàð ×%Ñ% k°:Õ>ðeˆð eð ˆ	ð/ò 	?ˆKð ×ÑœRŸZ™Z¨°WÓ=Õ>ð		?ð
 	×Ñœ dØ�i ¨¨iÙ6¸	À:ÔPSÈuð-Vó Wô 	Xô & d¨U°KÄ#ÀÐ,GÓHÐHˆ:ÐHØ×Ñ˜ZÔ(Ø�‰ä& yÓ1ö3àð �O‰O˜j¨¨
Ð3°[À(ÕKò3ô 	4ð ×#Ñ#Ø�Z¤¨uÓ!5Ø×'Ñ'¨Ó0ó2ð 	2ùò#eùò3s   Â*F,ÅF1N)Ú__name__Ú
__module__Ú__qualname__ÚIE_NAMEÚ
_VALID_URLÚ_TESTSrb   rˆ   rK   rP   rN   r    r    "   s'  „ Ø€GØt€Jð YØ1àØØ/Ø{Ø#Ø%Ø"ñ
ð +ñð  bØ1àØØAØhØ%Ø"Ø#ñ
ð &ñð  dØ1àØØCð jØ%Ø"Ø"ñ
ð  ñð  @à5à"ØØBð  ZØ)Ø'Ø&ññ
ð 6à"ØØ-ØhØ)Ø'Ø&ññ
ðð. +ñ5ð: \ànØ8ØAñ
ð
 ñ	ðKN€Fò`Oó  2rP   r    c                   ó:  — e Zd ZdZdZdgZdddddd	d
dddœddœddi dd“dd“dd“dd“dd“dd“dd“d g “d!d"“d#d$g“d%d&“d'd(“d)d$“d*d+“d,d-“d.d/“d0d1g“d2œd3d4dd5d6d7d8d9g d:d;d<gd<g d=¢d/d>gd?œd@dAidBœdCdi ddD“dd“dd“ddE“dd“dd“dd“d g “d!d"“d#d$g“d%d&“d'd(“d)d$“d*d+“d,d-“d.d/“d0d1g“d2œdFdGdd5d6d7d8d9g d:d;d<gd<g d=¢d/d>gd?œd@dAidBœdHdIi ddJ“dd“ddK“ddL“ddM“d!dN“dOdPdQdRdSœgi“ddT“d dU“ddV“d#g dW¢“d)dX“d%dYg“d'dZ“d.d[“d0d>g“d2œd\d]i dd^“dd“dd_“dd`“dda“d!db“dOdcdddedfœgi“ddg“d g “d#dh“d)dY“d%di“d'dZ“d.d/“ddj“d0d>g“d2œdkdlddmdndodpdqdrdsdtg g dugg dv¢dZdwœdxd@dAidyœdzd{d|dd}d~dYd/dd€d�d‚g g dƒg d„¢d…œd2œd†d‡dˆdd‰dŠd‹d/dŒd�dŽd�g d>gd>d�gd‘d�d’œd2œd“d”d•œd–d”d•œd—d”d•œgZd˜„ Zd™„ Zyš)›ÚCBCPlayerIEzcbc.ca:playerzy(?:cbcplayer:|https?://(?:www\.)?cbc\.ca/(?:player/play/(?:video/)?|i/caffeine/syndicate/\?mediaId=))(?P<id>(?:\d\.)?\d+)ÚCAz(http://www.cbc.ca/player/play/2683190193Ú 64d25f841ddf4ddb28a235338af32e2cÚ
2683190193r#   zGerry Runs a Sweat Shopz$md5:b457e1c01e8ff408d9d801c1c2cd29b0i¨ ºVÚ20160210r%   r&   z0Geo-restricted to Canada and no longer availabler.   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2657631896Ú e5e708c34ae6fca156aafe17c43e8b75r'   Ú
2657631896r(   Úmp3r)   z>CBC Montreal is organizing its first ever community hackathon!r*   z$md5:dd3b692f0a139b0369943150bd1c46a9r+   iÐ…úTr,   Ú20150307Ú	thumbnailzChttps://i.cbc.ca/ais/1.2985700,1717262248558/full/max/0/default.jpgÚchaptersÚdurationgåÐ"Ûùì~@Ú
categorieszAll in a Weekend MontrealÚtagszcount:11ÚlocationÚQuebecÚseriesÚseasonzSeason 2015Úseason_numberiß  Ú
media_typeÚExcerptÚgenresÚOther)r/   r0   r1   z:http://www.cbc.ca/i/caffeine/syndicate/?mediaId=2164402062Ú
2164402062zCancer survivor four times overzNTim Mayer has beaten three different forms of cancer four times in five years.izÞ³NÚ20111104zChttps://i.cbc.ca/ais/1.1711287,1717139372111/full/max/0/default.jpgg9´Èv¾[g@zCBC News: Windsor at 6:00ÚWindsor)ÚCancerzNews/Canada/Windsorr©   ÚNews)r'   r(   r)   r*   r+   r,   r™   rš   r›   r    rœ   rž   r�   r£   r¥   Úskip_downloadÚm3u8©r/   r1   Úparamsz(https://www.cbc.ca/player/play/1.2985700z	1.2985700zÇThe modern technology we tend to depend on so heavily, is never without it's share of hiccups and headaches. Next weekend - CBC Montreal will be getting members of the public for its first Hackathon.z(https://www.cbc.ca/player/play/1.1711287z	1.1711287z.https://www.cbc.ca/player/play/video/9.6424403Ú 8025909eaffcf0adf59922904def9a5ez	9.6424403z(The National | N.W.T. wildfire emergencyz$md5:ada33d36d1df69347ed575905bfd496ci ˜ofg#Ûù~ª	¥@Ú	subtitleszen-USz
re:Englishz_https://cbchls.akamaized.net/delivery/news-shows/2024/06/17/NAT_JUN16-00-55-00/NAT_JUN16_cc.vtt)Únamer/   z^https://i.cbc.ca/ais/6272b5c6-5e78-4c05-915d-0e36672e33d1,1714756287822/full/max/0/default.jpgzcount:5Ú20240617)r«   úThe NationalzThe National Latest BroadcastszThe National - Full Showr´   ÚCanadazFull Programz.https://www.cbc.ca/player/play/video/1.7194274Ú 188b96cf6bdcb2540e178a6caa957128z	1.7194274z;#TheMoment a rare white spirit moose was spotted in Albertaz$md5:18ae269a2d0265c5b0bbe4b2e1ac61a3i·™5fg¬ZdkS@ÚengÚvttÚm3u8_native)r(   ÚprotocolzChttps://i.cbc.ca/ais/1.7194274,1717224990425/full/max/0/default.jpgzcount:3zcount:17Ú20240504z.https://www.cbc.ca/player/play/video/9.6427282z	9.6427282z#Men's Soccer - Argentina vs MoroccozGArgentina faces Morocco on the football pitch at Saint Etienne Stadium.z
CBC SportszEvent Coveragez^https://i.cbc.ca/ais/a4c5c0c2-99fa-4bd3-8061-5a63879c1b33,1718828053500/full/max/0/default.jpgg   >¨ÙAÚ20240724g     ¤Ä@z2024 Paris Olympic Games)zOlympics Summer SoccerzSummer Olympics ReplayszSummer Olympics Soccer Replays)r'   r(   r)   r*   r    r£   r™   r+   r,   r›   rš   r¥   r�   rœ   rž   zVideo no longer available)r/   r1   r2   r¯   z.https://www.cbc.ca/player/play/video/9.6459530Ú 6c1bb76693ab321a2e99c347a1d5ecbcz	9.6459530z-Parts of Jasper incinerated as wildfire ragesz$md5:6f1caa8d128ad3f629257ef5fecf0962z^https://i.cbc.ca/ais/507c0086-31a2-494d-96e4-bffb1048d045,1721953984375/full/max/0/default.jpggœÄÀŽÅ¨ÙAÚ20240726gáz®GÂ�@zcount:23)zNews (FAST)r«   r´   zTV News ShowszThe National )r'   r(   r)   r*   r    r£   r™   r+   r,   r›   rš   r¥   r�   rœ   z.https://www.cbc.ca/player/play/video/9.6420651Ú 71a850c2c6ee5e912de169f5311bb533z	9.6420651z>Is it a breath of fresh air? Measuring air quality in Edmontonz$md5:3922b92cc8b69212d739bd9dd095b1c3zCBC News Edmontonz^https://i.cbc.ca/ais/73c4ab9c-7ad4-46ee-bb9b-020fdc01c745,1718214547576/full/max/0/default.jpggé&qH}šÙAÚ20240612gL7‰A`áq@ÚEdmontonzcount:7)r'   r(   r)   r*   r    r£   r™   r+   r,   r›   rš   r¥   rœ   r�   rž   zcbcplayer:1.7159484T©r/   Úonly_matchingzcbcplayer:2164402062z(http://www.cbc.ca/player/play/2657631896c                 ó>   ‡— t        |dˆfd„dt        ht        f«      S )Nr¯   c                 ó   •— |d   ‰k(  S )Nr²   rK   )rq   rr   r²   s     €rN   rO   z*CBCPlayerIE._parse_param.<locals>.<lambda>ˆ  s   ø€ ÀÀ&Á	ÈTÑ@Q€ rP   Úvalue)r   rX   Úany)r[   Ú
asset_datar²   s     `rN   Ú_parse_paramzCBCPlayerIE._parse_param‡  s"   ø€ Ü˜J¨Ó3QÐSZÔ]`Ð\aÔcfÐ(gÓhÐhrP   c                 óX  ‡— | j                  |«      }| j                  d|› �|«      }| j                  d|d|t        ¬«      d   d   }t	        |ddd	„ f«      }|s-t	        |d
t
        hf«      x}rddt        d|› d�ddi«      |ddœS t	        |ddt
        hf«      dk(  Šg i }}t	        |ddd„ f«      D ]K  }	|j                  |	j                  d«      xs dg «      j                  |	d   |	j                  d«      dœ«       ŒM |D �]—  }
|
d   }|
d   }|dk7  r| j                  d|› d |› �«       Œ+| j                  ||d!|› d"�«      }t        | j                  |d#«      «      }|d$k(  �r| j                  |d%   |d&d'‰¬(«      \  }}|j                  |«       |s| j!                  ||¬)«       ‰s|sŒªt	        |d*„ t"        t%        j&                  t(        d+„ ¬,«      hd-t*        hf«      xs i }| j-                  d.|j                  d%«      d/d ¬0«      }|rd1|v r�Œ|t/        t1        |d%   «      d&«      z   }| j3                  t5        |«      |d2d3d3¬4«      s�ŒL|j                  i |¥|d5d6d d d7œ¥«       �Œi|j                  |d%   || j                  |d8«      d9k(  rd:nd d;œ«       �Œš t	        |dd<d=„ d>t7        d?¬@«      hfdAt7        d?¬@«      hfdBt
        hfdCœf«      }t9        |«      dDk(  r*|dE   j                  dF«      s|dE   j                  dG«      sg }i t	        |dHt
        hfdIt
        j:                  hfdJd%t<        ht?        d ¬K«      hfdLt7        d?¬@«      hfddMt
        hfdNt
        hfddOt@        hfddPt6        hˆfdQ„hfddRt
        hfdSdTdBt
        hfddUt"        fdVdTdBt
        hfdWœ«      ¥||||‰dXœ¥S )YNúhttps://www.cbc.ca/player/play/rg   rh   ©ri   ÚvideoÚcurrentClipÚmediaÚassetsc                 ó,   — t        |d   «      xr |d   S )NÚkeyrn   ©r   rp   s     rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>‘  s   € ´;¸qÀ¹xÓ3HÒ3VÈQÈvÉY€ rP   rC   Úurl_transparentÚThePlatformz;http://link.theplatform.com/s/ExhSPC/media/guid/2655402169/z?mbr=true&formats=MPEG4,FLV,MP3Úforce_smil_urlT)ÚresÚproto)Ú_typeÚie_keyr/   r'   Ú_format_sort_fieldsÚ
streamTypeÚLiveÚ
textTracksc                 ó   — t        |d   «      S )NÚsrcrÓ   rp   s     rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>£  s   € Ì;ÐWXÐY^ÑW_ÓK`€ rP   ÚlanguageÚundrà   Úlabel)r/   r²   rÒ   rn   Úmedianetz!Skipping unsupported asset type "z": zDownloading z JSONÚcontentTyper­   r/   r#   Úhls)Úm3u8_idÚlive)Útargetc                 ó8   — |j                  d«      dk7  xr |d   S )NÚvcodecÚnoneÚtbr)rV   rp   s     rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>¼  s   €  §¡ x£°FÑ!:Ò!G¸qÀ¹x€ rP   c                 ó   — | d   S )Nrí   rK   rL   s    rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>½  s
   € ¸Q¸u¹X€ rP   )rÒ   rR   z(https?://[^?#]+?/)hdntl=zbase urlrd   z/live/zChecking for https formatF)ÚerrnoterG   z	https-mp4Úhttps)r/   Ú	format_idrº   Úmanifest_urlÚacodecÚ	mediaTypeÚaudiorì   )r/   r(   rë   rš   c                 ó"   — t        |d   «      d uS )NÚ	startTime)Úfloatrp   s     rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>Ö  s   € ¬e°A°k±NÓ.CÈ4Ð.O€ rP   r÷   éè  ©ÚscaleÚendTimer²   )Ú
start_timeÚend_timer)   r   r   rý   rþ   r)   r*   Úimage©ÚqueryÚpublishedAtÚclipTypeÚshowNamer¡   r›   c                 ó   •— ‰rd S | S ©NrK   )rM   Úis_lives    €rN   rO   z+CBCPlayerIE._real_extract.<locals>.<lambda>è  s   ø€ ÑV]Èd€ Ðcd€ rP   Úregionr�   .Úgenrerœ   )r)   r*   r™   r+   r£   r    r¢   r›   rž   r�   r¥   rœ   )r'   Úformatsr±   rš   r  )!rv   rw   r|   r   r   rX   r   Ú
setdefaultrV   r€   Úreport_warningrW   r   rÉ   Ú#_extract_m3u8_formats_and_subtitlesr   Ú_merge_subtitlesÚallÚ	functoolsÚpartialÚsortedÚdictr{   r   r   Ú_request_webpager   r	   ÚlenÚstripr   r   r
   )r[   r/   Úvideo_idrƒ   r„   rÐ   r_   r
  r±   ÚsubÚassetÚ	asset_keyÚ
asset_typerÈ   r(   ÚfmtsÚsubsÚbest_video_fmtÚbase_urlÚmp4_urlrš   r  s                        @rN   rˆ   zCBCPlayerIE._real_extractŠ  s²  ø€ Ø—>‘> #Ó&ˆØ×(Ñ(Ð+JÈ8È*Ð)UÐW_Ó`ˆØ× Ñ Ø,¨gØ˜X¼
ð !ó DàDKñMàMZñ\ˆô Ø�7˜HÑ&VÐWóYˆñ ¤|°D¸9ÄsÀeÐ:LÓ'MÐM˜8ÐMð +Ø'Ü"ØQÐRZÐQ[Ð[zÐ{Ø(¨$ð~óð Ø'7ñ	ð 	ô ˜t g¨|¼c¸UÐ%CÓDÈÑNˆØ �ˆä  w°Ñ>`Ð&aÓbò 	ˆCØ× Ñ  §¡¨Ó!4Ò!=¸¸rÓB×IÑIØ˜5‘zØŸ™ Ó(ñKõ ð	ð ó *	ˆEØ˜e™ˆIØ˜v™ˆJØ˜ZÒ'Ø×#Ñ#Ð&GÈ
À|ÐSVÐW`ÐVaÐ$bÔcØØ×,Ñ,¨Y¸ÀLÐQ[ÐP\Ð\aÐBbÓcˆJÜ˜t×0Ñ0°¸]ÓKÓLˆCØ�f‹}Ø!×EÑEØ˜uÑ% x°ÀÈGð Fó U‘
��dà—‘˜tÔ$á Ø×)Ñ)¨$°yÐ)ÔAÙ¡$Øä!-¨dÙGÌÜ×&Ñ&¤vÑ3EÔFÐGÈÌdÈVð5Uó "Vò "\àY[ð ð  ×-Ñ-Ø0°.×2DÑ2DÀUÓ2KÈZÐaeð .ó g�á 8¨xÑ#7ÙØ"Ô%6´|ÀNÐSXÑDYÓ7ZÐ\aÓ%bÑb�Ø×(Ñ(Ü# GÓ,¨hÐ8SØ %¨Uð )ö 4ð —N‘Nð $Ø(ð$à&Ø%0Ø$+Ø(,Ø"&ò$ö ð —‘Ø% eÑ,ØØ(,×(9Ñ(9¸*ÀkÓ(RÐV]Ò(]™fÐcgñ ö ðM*	ôX   Ø�ZÑ!OØ*¬]ÀÔ-FÐ,GÐHØ&¬¸TÔ)BÐ(CÐDØ ¤3 %˜ñRð'ó ˆô ˆx‹=˜AÒ x°¡{§¡°|Ô'DÈÐQRÉÏÉÐXbÔHcØˆHð
Ü˜4Ø!¤C 5Ð)Ø -´·	±	¨{Ð;Ø% u¬{¨m¼jÈtÔ>TÐ=UÐVØ+¬mÀ$Ô.GÐ-HÐIØ&¨
´S°EÐ:Ø%¬ uÐ-Ø")¨8´k°]Ð!CØ$ j´=°/ÓDdÐCeÐfØ$ h´°Ð6Ø  f¬s¨eÐ4Ø" G¬SÐ1Ø+¨S°&¼3¸%Ð@ñ"ó ð
ð ØØ"Ø Øò'
ð 	
rP   N)	r‰   rŠ   r‹   rŒ   r�   Ú_GEO_COUNTRIESrŽ   rÉ   rˆ   rK   rP   rN   r�   r�   ¨   s€  „ Ø€Gð N€JØ�V€Nà9Ø1àØØ.ØAØ#Ø%Ø"ñ
ð Cñð LØ1ð
Ø�,ð
à�5ð
ð ÐUð
ð ÐAð	
ð
 ˜ð
ð ˜:ð
ð Ð^ð
ð ˜ð
ð ˜ð
ð Ð6Ð7ð
ð �Jð
ð ˜ð
ð Ð1ð
ð �mð
ð ˜Tð
ð  ˜)ð!
ð" �w�ið#
ñð. LàØØ6ØkØ#Ø%Ø^ØØØ1Ø$˜+Ø!Ú@Ø#Ø�hñ
ð" # FÐ+ñ'ð, :Ø1ð
Ø�+ð
à�5ð
ð ÐUð
ð ð  fð	
ð
 ˜ð
ð ˜:ð
ð Ð^ð
ð ˜ð
ð ˜ð
ð Ð6Ð7ð
ð �Jð
ð ˜ð
ð Ð1ð
ð �mð
ð ˜Tð
ð  ˜)ð!
ð" �w�ið#
ñ	ð0 :àØØ6ØkØ#Ø%Ø^ØØØ1Ø$˜+Ø!Ú@Ø#Ø�hñ
ð" # FÐ+ñ'ð0 @Ø1ð
Ø�+ð
à�5ð
ð Ð?ð
ð ÐAð	
ð
 ˜ð
ð ˜ð
ð ØØ)Ø|ñð ðð
ð Ðyð
ð ˜	ð
ð ˜:ð
ð  ÒTð!
ð" Ð0ð#
ð$ �^Ð$ð%
ð& ˜ð'
ð( ˜.ð)
ð* �v�hð+
ñð< @Ø1ð
Ø�+ð
à�5ð
ð ÐRð
ð ÐAð	
ð
 ˜ð
ð ˜ð
ð ˜%¨%¸]Ñ"KÐ!LÐMð
ð Ð^ð
ð ˜ð
ð ˜)ð
ð �nð
ð �Jð
ð ˜ð
ð ˜)ð
ð ˜:ð
ð  �v�hð!
ñð, @àØØ;ØdØ"Ø*ØyØ%Ø%ØØØØ/Ð0ÚqØ ñ
ð" ,Ø" FÐ+ñ)ð, @Ø1àØØDØAØ$Ø#ØyØ'Ø%ØØØØÚcñ
ñð( @Ø1àØØUØAØ)Ø#ØyØ'Ø%ØØØ�hØ! :Ð.ØØ"ñ
ñð* %Øñð &Øñð :ØñðmY€Fòviói
rP   r�   c                   ó>   — e Zd ZdZdZddddiddœd	ddd
iddœgZd„ Zy)ÚCBCPlayerPlaylistIEzcbc.ca:player:playlistz=https?://(?:www\.)?cbc\.ca/(?:player/)(?!play/)(?P<id>[^?#]+)zKhttps://www.cbc.ca/player/news/TV%20Shows/The%20National/Latest%20Broadcasté   r'   z+news/tv shows/the national/latest broadcastzPlaylist no longer available)r/   rA   r1   r2   z+https://www.cbc.ca/player/news/Canada/Northznews/canada/northc                 ó  ‡ ‡‡— t         j                  j                  ‰ j                  |«      «      j	                  «       Š‰ j                  |‰«      }‰ j                  d|d‰«      Šˆˆˆ fd„}‰ j                   |«       ‰«      S )Nrg   rh   c            	   3   óx   •K  — t        ‰ddˆfd„dddf«      D ]  } ‰j                  d| › �t        «      –— Œ y ­w)NrÍ   ÚclipsByCategoryc                 ó*   •— | j                  «       ‰k(  S r  )Úlower)Úkrq   Úplaylist_ids     €rN   rO   zDCBCPlayerPlaylistIE._real_extract.<locals>.entries.<locals>.<lambda>  s   ø€ ¸¿¹»ÀkÑ9Q€ rP   Úitems.r'   rË   )r   rZ   r�   )r  Újson_contentr+  r[   s    €€€rN   rI   z2CBCPlayerPlaylistIE._real_extract.<locals>.entries  sR   øè ø€ Ü(¨ØÐ*Ó,QÐSZÐ\_Ðaeð8ó ò a�ð —o‘oÐ(GÈÀzÐ&RÔT_Ó`Ó`ñaùs   ƒ7:)ÚurllibÚparseÚunquoterv   r)  rw   r|   r�   )r[   r/   rƒ   rI   r-  r+  s   `   @@rN   rˆ   z!CBCPlayerPlaylistIE._real_extract	  sr   ú€ Ü—l‘l×*Ñ*¨4¯>©>¸#Ó+>Ó?×EÑEÓGˆØ×(Ñ(¨¨kÓ:ˆØ×(Ñ(Ø,¨g°ÈóUˆö	að ×#Ñ#¡G£I¨{Ó;Ð;rP   N©r‰   rŠ   r‹   rŒ   r�   rŽ   rˆ   rK   rP   rN   r#  r#  ö  sP   „ Ø&€GØQ€Jà\ØàÐ?ð
ð /ñð =ØàÐ%ð
ð /ñð€Fó <rP   r#  c                   ó,   — e Zd ZdZdgZdd„Zdd„Zd„ Zy)	ÚCBCGemBaseIEÚcbcgemr‘   Nc                 ó<   — | j                  d|› �|xs |ddi¬«      S )Nz9https://services.radio-canada.ca/ott/catalog/v2/gem/show/ÚdeviceÚwebr   ©rW   )r[   Úitem_idr]   s      rN   Ú_call_show_apizCBCGemBaseIE._call_show_api  s3   € Ø×"Ñ"ØGÈÀyÐQØÒ!˜'¨(°EÐ):ð #ó <ð 	<rP   c                 óZ  — | j                  d|xs |||ddddddd|d	œ	¬
«      }t        |dt        hf«      }|dk(  r| j                  | j                  ¬«       |dk(  r| j                  d¬«       |dk7  r7t        ||j                  d«      d¬«      }t        | j                  › d|› �«      ‚|S )Nz5https://services.radio-canada.ca/media/validation/v2/ÚhdÚipadÚtrueÚjsonræ   Ú2Údesktop)	ÚappCodeÚconnectionTypeÚ
deviceTypeÚmultibitrateÚoutputÚtechÚmanifestVersionÚmanifestTypeÚidMedia)Úheadersr  Ú	errorCoder   )Ú	countriesé#   Úpassword)Úmethodr   Úmessagez - )Údelimz said: )
rW   r   ÚintÚraise_geo_restrictedr!  Úraise_login_requiredr   rV   r   rŒ   )r[   r_   Úapp_coder]   rK  Ú
media_dataÚ
error_codeÚerror_messages           rN   Ú_call_media_apizCBCGemBaseIE._call_media_api!  sÏ   € Ø×(Ñ(ØCØÒ"˜(¨GØ#Ø"&Ø$Ø &Ø ØØ#&Ø )Ø#ñ
<ð )ó ˆ
ô " *¨{¼S¸EÐ.BÓCˆ
Ø˜Š?Ø×%Ñ%°×0CÑ0CÐ%ÔDØ˜ÒØ×%Ñ%¨ZÐ%Ô8Ø˜Š?Ü)¨*°j·n±nÀYÓ6OÐW\Ô]ˆMÜ  D§L¡L >°¸¸Ð!HÓIÐIàÐrP   c                 ó®  — d }t        |dt        hf«      }|rCt        j                  d|«      x}r+t	        |j                  d«      «      }|j                  d«      }d|it        |dt        hfdt        hfdt        hfdddt        ht        d ¬	«      hfd
t        hfddt        hfddt        hfddt        hfddt        d¬«      ht        hfdœ	«      ¥||dœ¥S )Nr)   z (?P<episode>\d+)\. (?P<title>.+)ÚepisodeÚepisode_numberr/   r*   ÚimagesÚcardr   ÚepisodeNumberÚmetadatar›   ÚairDateÚavailabilityDateÚratingÚC)Ústart)	r'   Ú
episode_idr*   r™   r]  r›   Úrelease_timestampr+   Ú	age_limit)r\  r)   )r   rX   r}   Úmatchr
   rf   r   r   r   r   r   )r[   Ú	item_infor]  r)   Úmobjs        rN   Ú_extract_item_infozCBCGemBaseIE._extract_item_info;  s  € ØˆÜ˜Y¨´3°%Ð(8Ó9ˆÙœbŸh™hÐ'JÈEÓRÐR�dÐRÜ(¨¯©°IÓ)>Ó?ˆNØ—J‘J˜wÓ'ˆEð ˜nð
ä˜9Øœs˜e�nØ$¤s e˜nØ -´¨uÐ5Ø&¨°¼°}ÄzÐX\ÔG]ÐF^Ð_Ø#2´[°MÐ"BØ'¨´k°]ÐCØ&0°)Ô>OÐ=PÐ%QØ(Ð*<Ô?PÐ>QÐRØ(¨(´XÀCÔ5HÐ4IÌOÐK\Ð]ñ
'ó 
ð
ð Øò
ð 	
rP   r  )ÚgemNN)r‰   rŠ   r‹   Ú_NETRC_MACHINEr!  r:  rZ  rm  rK   rP   rN   r3  r3    s   „ Ø€NØ�V€Nó<ó
ó4
rP   r3  c                   óv  — e Zd ZdZdZdi dd“dd“dd	“d
d“dd“dd“ddg“dd“dd“dd“dd	“dd“dd“dd“dd“d d!“d"d#“d$d%i¥d&d'id(œd)i dd*“dd“dd+“d
d,“dd-“dd“dd“dd.“dd“dd+“dd*“dd/“ddg“dd0“dd1“d d2“d"d3“d$d%i¥d&d'id(œd4d5d6œgZd7Zd8Zd8Zd8Z	e
j                  d9„ «       Zd:„ Zd@d;„Zd<„ Zd=„ Zd>„ Zd?„ Zy8)AÚCBCGemIEz
gem.cbc.cazbhttps?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s(?P<season>[0-9]+)[a-z][0-9]{2,4})/?(?:[?#]|$)z-https://gem.cbc.ca/media/schitts-creek/s06e01r'   zschitts-creek/s06e01r(   r#   r)   zSmoke Signalsr*   z$md5:929868d20021c924020641769eb3e7f1r™   z\re:https://images\.radio-canada\.ca/[^#?]+/cbc_schitts_creek_season_06e01_thumbnail_v01\.jpgr›   i,  r¥   u   ComÃ©die et humourr    úSchitt's Creekr¡   úSeason 6r¢   r@   r\  r]  r   rg  r,   Ú20210618r+   i âË`Úrelease_dateÚ20200107rh  i Ê^ri  é   ÚformatÚbvr®   z-https://gem.cbc.ca/media/schitts-creek/s01e01zschitts-creek/s01e01zThe Cup Runneth Overz$md5:9bca14ea49ab808097530eb05a29e797z\re:https://images\.radio-canada\.ca/[^#?]+/cbc_schitts_creek_season_01e01_thumbnail_v01\.jpgzSeason 1i  Ú20210617i€�Ê`Ú20151123i WRVz3https://gem.cbc.ca/nadiyas-family-favourites/s01e01TrÂ   z$fc05b0ee-3865-4400-a3cc-3da82c330c23Nc                 ó<   — | j                  dd dddi¬«      d   d   S )Nz<https://services.radio-canada.ca/ott/catalog/v1/gem/settingszDownloading site settingsr6  r7  r   ÚidentityManagementÚropcr8  ©r[   s    rN   Ú_ropc_settingszCBCGemIE._ropc_settings‘  s=   € à×"Ñ"ØJÈDØ'°¸%Ð/@ð #ó BàBVñXàX^ñ`ð 	`rP   c                 óN   — t        |«      d   t        j                  «       z
  dk  S )NÚexpi,  )r   Útime)r[   Útokens     rN   Ú_is_jwt_expiredzCBCGemIE._is_jwt_expired—  s"   € Ü Ó& uÑ-´·	±	³Ñ;¸cÑAÐArP   c                 ó:  — | j                  | j                  d   d |t        d| j                  i|¥d| j                  d   i¥«      ¬«      }|d   | _        |d   | _        | j                  j                  | j                  d| j                  | j
                  g«       y )	Nr/   Ú	client_idÚscopeÚscopes)r„   Úrefresh_tokenÚaccess_tokenÚ
token_data)	rW   r€  r   Ú
_CLIENT_IDÚ_refresh_tokenÚ_access_tokenÚcacheÚstorero  )r[   Ú
oauth_dataÚnoteÚresponses       rN   Ú_call_oauth_apizCBCGemIE._call_oauth_apiš  s«   € Ø×&Ñ&Ø×Ñ Ñ&¨¨dÔ9KØ˜TŸ_™_ðMàðMð ˜×,Ñ,¨XÑ6ñMó :ð 'ó ˆð ' Ñ7ˆÔØ% nÑ5ˆÔØ�
‰
×Ñ˜×,Ñ,¨l¸T×=PÑ=PÐRV×RdÑRdÐ<eÕfrP   c                 ó   — | j                   s7| j                  j                  | j                  dd d g¬«      \  | _         | _        | j                   rU| j                  rI| j                  d«       | j                  s+| j                  j                  | j                  d«      | _        y 	 | j                  d||dœd¬«       y # t        $ rF}t        |j                  t        «      r&|j                  j                  d	k(  rt        d
d¬«      ‚‚ d }~ww xY w)NrŒ  rd   zUsing cached refresh tokenÚclaims_tokenrO  )Ú
grant_typeÚusernamerO  z
Logging in)r“  i�  z Invalid username and/or passwordT©Úexpected)rŽ  r�  Úloadro  r�  Úwrite_debugÚ_claims_tokenr•  r   Ú
isinstanceÚcauser   Ústatus)r[   r™  rO  Úes       rN   Ú_perform_loginzCBCGemIE._perform_login¥  s÷   € Ø×"Ò"Ø6:·j±j·o±oØ×#Ñ# \¸DÀ$¸<ð 7Fó 7IÑ3ˆDÔ Ô!3ð ×Ò 4×#5Ò#5Ø×ÑÐ9Ô:Ø×%Ò%Ø%)§Z¡Z§_¡_°T×5HÑ5HÈ.Ó%Y�Ô"Øð		Ø× Ñ Ø(Ø$Ø$ñ"ð !ð	 !õ "øô
 ò 	Ü˜!Ÿ'™'¤9Ô-°!·'±'·.±.ÀCÒ2GÜ$Ð%GÐRVÔWÐWØûð	ús   Â&B> Â>	DÃADÄDc                 ó¦  — | j                  | j                  «      r+	 | j                  d| j                  dœ«       | j                  S | j                  S # t        $ rt d\  | _        | _        | j
                  j                  | j                  dd d g«       | j                  d«        | j                  | j                  «       Ž  Y | j                  S w xY w)NrŠ  )r˜  rŠ  )NNrŒ  z=Refresh token has been invalidated; retrying with credentials)r…  r�  r•  rŽ  r   r�  r‘  ro  r  r£  Ú_get_login_infor  s    rN   Ú_fetch_access_tokenzCBCGemIE._fetch_access_token»  sÈ   € Ø×Ñ × 2Ñ 2Ô3ð	=Ø×$Ñ$Ø"1Ø%)×%8Ñ%8ñ&ô ð ×!Ñ!Ð!ˆt×!Ñ!Ð!øô "ò =Ø:DÑ7�Ô# TÔ%7Ø—
‘
× Ñ  ×!4Ñ!4°lÀTÈ4ÀLÔQØ×#Ñ#Ð$cÔdØ#�×#Ñ# T×%9Ñ%9Ó%;Ò<à×!Ñ!Ð!ð=ús   �A ÁA/CÃCc           
      ó’  — | j                  «       d   sy | j                  r| j                  | j                  «      rp| j                  dd dddidd| j	                  «       › �i¬«      d	   | _        | j
                  j                  | j                  d
| j                  «       | j                  S | j                  d«       | j                  S )Nr   zKhttps://services.radio-canada.ca/ott/subscription/v2/gem/Subscriber/profilezDownloading claims tokenr6  r7  ÚAuthorizationzBearer )r  rK  ÚclaimsTokenr—  zUsing cached claims token)	r¥  rž  r…  rW   r¦  r�  r‘  ro  r�  r  s    rN   Ú_fetch_claims_tokenzCBCGemIE._fetch_claims_tokenÊ  sÐ   € Ø×#Ñ#Ó% aÒ(Øà×!Ò! T×%9Ñ%9¸$×:LÑ:LÔ%MØ!%×!4Ñ!4Ø]ØÐ0¸À5Ð8IØ(¨G°D×4LÑ4LÓ4NÐ3OÐ*PÐQð "5ó "Sð Tañ"bˆDÔð �J‰J×Ñ˜T×0Ñ0°.À$×BTÑBTÔUð ×!Ñ!Ð!ð ×ÑÐ8Ô9à×!Ñ!Ð!rP   c                 óÐ  ‡
— | j                  |«      j                  dd«      \  Š
}| j                  ‰
«      }t        |dddddˆ
fd„t        t        d«      hf«      }i }| j                  «       x}r||d	<   | j                  |d
   ‰
|¬«      d   }| j                  |‰
ddddi¬«      }| j                  |«       |D ]^  }	|	j                  d«      dk(  sŒ|	j                  d«      €d|	d<   |	j                  d«      €d|	d<   d|	d   j                  «       v sŒZd|	d<   Œ` dt        |«      it        |dt        hfddd t        hfdd!dt        hfd"œ«      ¥| j                  |«      ¥‰
‰
|d#œ¥S )$Nr'   r¡   rk   .Úlineupsr,  c                 ó   •— |d   ‰k(  S ©Nr/   rK   ©rq   rr   r  s     €rN   rO   z(CBCGemIE._real_extract.<locals>.<lambda>Þ  s   ø€ ˜˜5™ XÑ-€ rP   ú	item infozx-claims-tokenrJ  )r]   rK  r/   r#   ræ   rI  Ú )rç   r  rë   rì   r(   Úm4aró   z	mp4a.40.2Údescriptiverñ   éþÿÿÿÚ
preferencer¢   r)   ÚstructuredMetadataÚpartofSeasonÚseasonNumberr	  )r    r¢   r¥   )r'   rg  r
  )Ú_match_valid_urlrf   r:  r   rÇ   r   rª  rZ  Ú_extract_m3u8_formatsÚ_remove_duplicate_formatsrV   r)  r
   rX   rm  )r[   r/   r¢   Ú
video_infork  rK  r—  Úm3u8_urlr
  Úfmtr  s             @rN   rˆ   zCBCGemIE._real_extractÙ  sÏ  ø€ Ø"&×"7Ñ"7¸Ó"<×"BÑ"BÀ4ÈÓ"RÑˆ�-Ø×(Ñ(¨Ó2ˆ
Ü  Ø�s˜I s¨GÛ-¬s´W¸[Ó5IÐ4Jð.Ló Mˆ	ð ˆØ×3Ñ3Ó5Ð5ˆ<Ð5Ø(4ˆGÐ$Ñ%à×'Ñ'Ø�iÑ ¨X¸wð (ó HØHMñOˆà×,Ñ,Ø�h ¨u¸^ÈRÐ<Pð -ó Rˆà×&Ñ& wÔ/àò 
	+ˆCØ�w‰w�xÓ  FÓ*Ø—7‘7˜5“>Ð)Ø!&�C˜‘JØ—7‘7˜8Ó$Ð,Ø$/�C˜‘Mð ! C¨Ñ$4×$:Ñ$:Ó$<Ò<Ø(*�C˜Ò%ð
	+ð œ[¨Ó7ð
ä˜:Ø"¤S EÐ*Ø"6¸ÈÔYdÐXeÐ!fØ/°¸#Ä¸uÐEñ(ó ð
ð ×%Ñ% iÓ0ð
ð Ø"Øò
ð 	
rP   )zRefreshing access token)r‰   rŠ   r‹   rŒ   r�   rŽ   r�  rŽ  r�  rž  r  Úcached_propertyr€  r…  r•  r£  r¦  rª  rˆ   rK   rP   rN   rq  rq  T  sa  „ Ø€GØv€Jð ?ð
ØÐ(ð
à�5ð
ð �_ð
ð ÐAð	
ð
 Ðxð
ð ˜ð
ð Ð+Ð,ð
ð Ð'ð
ð �jð
ð ˜Qð
ð �ð
ð ˜að
ð Ð0ð
ð ˜:ð
ð ˜ð
ð  ˜Jð!
ð"   ð#
ð$ ˜ñ%
ð( ˜TÐ"ñ/ð4 ?ð
ØÐ(ð
à�5ð
ð Ð+ð
ð ÐAð	
ð
 Ðxð
ð Ð'ð
ð ˜Qð
ð �jð
ð ˜að
ð Ð-ð
ð Ð0ð
ð ˜ð
ð Ð+Ð,ð
ð ˜:ð
ð ˜ð
ð  ˜Jð!
ð"   ð#
ð$ ˜ñ%
ð( ˜TÐ"ñ/ð2 EØñða3€Fðj 8€JØ€NØ€MØ€Mà×Ññ`ó ð`ò
Bó	gòò,"ò"ó(
rP   rq  c                   óB   — e Zd ZdZdZdddddddd	œd
œdddœgZd„ Zd„ Zy)ÚCBCGemPlaylistIEzgem.cbc.ca:playlistz]https?://gem\.cbc\.ca/(?:media/)?(?P<id>(?P<show>[0-9a-z-]+)/s(?P<season>[0-9]+))/?(?:[?#]|$)z*https://gem.cbc.ca/media/schitts-creek/s06é   zschitts-creek/s06rs  rr  r@   )r'   r)   r    r¢   r¡   ©r/   Úplaylist_countr1   z$https://gem.cbc.ca/schitts-creek/s06TrÂ   c              #   ó’   K  — t        |dd„ f«      D ]1  } | j                  d|d   › �t        fi | j                  |«      ¤Ž–— Œ3 y ­w)Nr,  c                 ó   — |d   S r®  rK   rp   s     rN   rO   z+CBCGemPlaylistIE._entries.<locals>.<lambda>  s
   € ÈÈ%É€ rP   zhttps://gem.cbc.ca/media/r/   )r   rZ   rq  rm  )r[   Úseason_infor\  s      rN   Ú_entrieszCBCGemPlaylistIE._entries  sY   è ø€ Ü# K°'Ñ;PÐ1QÓRò 	4ˆGØ!�$—/‘/Ø+¨G°E©NÐ+;Ð<¼hñ4à×)Ñ)¨'Ó2ñ4ó 4ñ	4ùs   ‚AAc                 ór  ‡— | j                  |«      j                  ddd«      \  }}Š| j                  ||¬«      }t        |dddˆfd„t        t        d	«      hf«      } | j                  | j                  |«      |fi t        |d
t        hfd
t        hfdt        hfdœ«      ¤dt        |d
t        hf«      i¤ŽS )Nr'   Úshowr¡   )r]   rk   .r¬  c                 ó&   •— |d   t        ‰«      k(  S )Nr¸  )rS  )rq   rr   r¡   s     €rN   rO   z0CBCGemPlaylistIE._real_extract.<locals>.<lambda>"  s   ø€ ˜˜>Ñ*¬c°&«kÑ9€ rP   zseason infor)   r¸  )r)   r¡   r¢   r    )
r¹  rf   r:  r   rÇ   r   r�   rÈ  rX   r
   )r[   r/   Ú	season_idrÊ  Ú	show_inforÇ  r¡   s         @rN   rˆ   zCBCGemPlaylistIE._real_extract  sÛ   ø€ Ø"&×"7Ñ"7¸Ó"<×"BÑ"BÀ4ÈÐQYÓ"ZÑˆ	�4˜Ø×'Ñ'¨¸Ð'ÓCˆ	Ü" 9Ø�s˜IÛ9¼3ÄÈÓAWÐ@Xð/Zó [ˆð $ˆt×#Ñ#Ø�M‰M˜+Ó&¨	ñBä˜;Ø!¤C 5Ð)Ø"¤S EÐ*Ø"0´;°-Ð!@ñ)ó ñBô $ I°¼#¸Ð/?Ó@òBð 	BrP   N)r‰   rŠ   r‹   rŒ   r�   rŽ   rÈ  rˆ   rK   rP   rN   rÁ  rÁ    sL   „ Ø#€GØq€Jð <Øà%ØØ'ØØ ñ
ñ	ð 6Øñð€Fò 4óBrP   rÁ  c                   ób   — e Zd ZdZdZdZddddidœd	d
ddidœdddddddddddœ	dœdddœgZd„ Zy)ÚCBCGemContentIEzgem.cbc.ca:contentFz4https?://gem\.cbc\.ca/(?P<id>[0-9a-z-]+)/?(?:[?#]|$)zhttps://gem.cbc.ca/the-tunnelé   r'   z
the-tunnelrÃ  zhttps://gem.cbc.ca/summit-72r   z	summit-72z?https://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086ú,ski-jumping-nh-individual-womens-final-30086r#   ú,Ski Jumping: NH Individual (Women's) - Finalú$md5:411c07c8a9a4a36344530b0c726bf8abéù1  ú!re:https://[^.]+\.cbc\.ca/.+\.jpgé´i‡iÚ20260207Úwas_live©	r'   r(   r)   r*   r›   r™   rh  ru  Úlive_status©r/   r1   zhttps://gem.cbc.ca/copa-71TrÂ   c           
      óº  ‡ ‡— ‰ j                  |«      }‰ j                  ||«      }‰ j                  ||«      d   d   d   Š‰d   }‰ j                  d|› d�«       |dk(  r`t	        ‰dd	d
dt        d«      hf«      }t        j                  |«      r‰ j                  |t        «      S ‰ j                  d|› d�t        «      S ˆˆ fd„}‰ j                   |«       |«      S )NÚpropsÚ	pagePropsr„   rå   zRouting for content type "ú"Ú
StandaloneÚheaderÚctarÏ   r/   úhttps://gem.cbc.ca/z/s01e01c               3   ó†   •K  — t        ‰dddddt        d«      hd„ hf«      D ]  } ‰j                  | t        «      –— Œ y ­w)Nrk   .r¬  r/   rã  c                 ó4   — t         j                  | «      r| S d S r  )rÁ  ÚsuitablerL   s    rN   rO   z@CBCGemContentIE._real_extract.<locals>.entries.<locals>.<lambda>g  s   € Ô 0× 9Ñ 9¸!Ô <˜1€ À$€ rP   )r   r   rZ   rÁ  )Úplaylist_urlr„   r[   s    €€rN   rI   z.CBCGemContentIE._real_extract.<locals>.entriesd  sT   øè ø€ Ü ,¨TØ˜3 	¨3°¼Ð@UÓ8VÐ7WÙFÐGð4ó !ò F�ð —o‘o lÔ4DÓEÓEñ	Fùs   ƒ>A)rv   rw   Ú_search_nextjs_datar�  r   r   ÚCBCGemOlympicsIEræ  rZ   rq  r�   )r[   r/   r]   rƒ   Úcontent_typeÚnew_urlrI   r„   s   `      @rN   rˆ   zCBCGemContentIE._real_extractS  sð   ù€ Ø—^‘^ CÓ(ˆ
Ø×(Ñ(¨¨jÓ9ˆØ×'Ñ'¨°Ó<¸WÑEÀkÑRÐSYÑZˆØ˜MÑ*ˆØ×ÑÐ5°l°^À1ÐEÔFà˜<Ò'Ü" 4Ø˜% ¨%´'Ð:OÓ2PÐ1Qð*Só TˆGä×(Ñ(¨Ô1Ø—‘ wÔ0@ÓAÐAð —?‘?Ð%8¸¸ÀGÐ#LÌhÓWÐWõ	Fð ×#Ñ#¡G£I¨zÓ:Ð:rP   N)r‰   rŠ   r‹   rŒ   ÚIE_DESCr�   rŽ   rˆ   rK   rP   rN   rÏ  rÏ  -  s„   „ Ø"€GØ€GØH€Jð /Øà�,ð
ñ	ð .Øà�+ð
ñ	ð Qà@ØØDØAØØ=Ø!+Ø&Ø%ñ

ñð  ,Øñð9 €FóD;rP   rÏ  c                   ó:   — e Zd ZdZdZddddddd	d
dddœ	dœgZd„ Zy)ré  zgem.cbc.ca:olympicszRhttps?://gem\.cbc\.ca/(?P<id>(?:[0-9a-z]+-)+[0-9]{5,})/s01e(?P<media_id>[0-9]{5,})zIhttps://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086/s01e30086rÑ  r#   rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÛ  c                 óh  ‡	— | j                  |«      j                  dd«      \  }Š	| j                  |«      }t        |dddddˆ	fd„t        t        d«      hf«      }d	d
dœj                  |j                  d«      «      }t        |ddt        ht        f«      }|d	k(  r1|r/|t        j                  «       kD  rg }d}| j                  dd¬«       n.| j                  ‰	d|«      d   }| j                  ||d|d	k(  ¬«      }||||dœt        |dt        hfdt        hfdddt        hfdddt        hfdœ«      ¥S )Nr'   r_   rk   .r¬  r,  c                 ó   •— |d   ‰k(  S )NÚformattedIdMediarK   )rq   rr   r_   s     €rN   rO   z0CBCGemOlympicsIE._real_extract.<locals>.<lambda>†  s   ø€ ˜Ð-Ñ.°(Ñ:€ rP   r°  r  rØ  )Ú	LiveEventÚReplayrn   ra  ))rè   Ú	startDate)Úreplayrb  Úis_upcomingú#This livestream has not yet startedTrš  Úmedianetliver/   r#   ©rè   ©r'   r
  rÚ  rh  r)   r*   r^  r_  rô  r›   )r)   r*   r™   r›   )r¹  rf   r:  r   rÇ   r   rV   r   rƒ  Úraise_no_formatsrZ  rº  rX   r   r
   )
r[   r/   r  r¼  rk  rÚ  rh  r
  r½  r_   s
            @rN   rˆ   zCBCGemOlympicsIE._real_extract€  s‚  ø€ Ø!×2Ñ2°3Ó7×=Ñ=¸dÀJÓOÑˆ�(à×(Ñ(¨Ó2ˆ
Ü  Ø�s˜I s¨GÛ:¼CÄ'È+ÓBVÐAWð.Yó Zˆ	ð
 #Ø ñ
÷ ‰#ˆi�m‰m˜FÓ#Ó
$ð 	ô
 )¨ØÐFÌÈÔY\ð5^ó _Ðð ˜)Ò#Ñ(9Ð>OÔRV×R[ÑR[ÓR]Ò>]ØˆGØ'ˆKØ×!Ñ!Ð"GÐRVÐ!ÕWà×+Ñ+¨H°nÀhÓOÐPUÑVˆHØ×0Ñ0°¸8ÀUÐQ\Ð`iÑQiÐ0ÓjˆGð ØØ&Ø!2ñ	
ô
 ˜9Ø!¤C 5Ð)Ø -´¨uÐ5Ø&¨°¼°}ÐEØ'¨°:Ä¸}ÐMñ	'ó ð
ð 	
rP   Nr1  rK   rP   rN   ré  ré  n  s@   „ Ø#€GØf€JàZà@ØØDØAØØ=Ø!+Ø&Ø%ñ

ñð €Fó#
rP   ré  c                   ó¬   — e Zd ZdZdZddddddd	d
dddœ	ddœddd	ddddddœddiddœddd	ddddddddœ	ddiddœdd d!d	d"d#d$d%d&d'd(œddid)d*œd+dd,œgZd-„ Zy.)/ÚCBCGemLiveIEzgem.cbc.ca:livez1https?://gem\.cbc\.ca/live(?:-event)?/(?P<id>\d+)z$https://gem.cbc.ca/live/920604739687ÚOttawaz5The live TV channel and local programming from Ottawazmhttps://thumbnails.cbc.ca/maven_legacy/thumbnails/CBC_OTT_VMS/Live_Channel_Static_Images/Ottawa_2880x1620.jpgr  ÚAyqZwxRqh8EHr#   i°»ïXÚ20170413r%   )	r)   r*   r™   rÚ  r'   r(   rh  ru  r-   zLive might have ended)r/   r1   r2   zhttps://gem.cbc.ca/live/44Ú44Tzre:^Ottawa [0-9\-: ]+z/re:https://images.gem.cbc.ca/v1/cbc-gem/live/.*)r'   r(   r  r)   r*   rÚ  r™   r¬   )r/   r1   r¯   r2   z#https://gem.cbc.ca/live-event/10835Ú10835uS   re:^The National \| Bidenâ€™s trip wraps up, Paltrow testifies, Bird flu [0-9\-: ]+u˜   March 24, 2023 | President Bidenâ€™s Ottawa visit ends with big pledges from both countries. Plus, Gwyneth Paltrow testifies in her ski collision trial.i�GdÚ20230325)	r'   r(   r  r)   r*   rÚ  r™   rh  ru  z#https://gem.cbc.ca/live-event/42314Ú 297a9600f554f2258aed01514226a697Ú42314rØ  z&Women's Soccer - Canada vs New Zealandz$md5:36200e5f1a70982277b5a6ecea86155dzre:https://.+default\.jpgi_¢fÚ20240725)r'   r(   rÚ  r)   r*   r™   rh  ru  z#Replay might no longer be available)r/   r0   r1   r¯   r2   z#https://gem.cbc.ca/live-event/43273rÂ   c                 ó¤  ‡	— | j                  |«      Š	| j                  |‰	«      }| j                  |‰	«      d   d   d   }|j                  d«      s0t	        |d«      ‰	k(  r|d   }nt	        |ddˆ	fd	„t
        f«      xs i }|j                  d«      }|st        d
d¬«      ‚|j                  d«      rdnd}t	        |dt        hf«      }|dk(  r1|r/|t        j                  «       kD  rg }d}| j                  dd¬«       n.| j                  |d‰	«      d   }| j                  |‰	d|dk(  ¬«      }‰	|||dœt	        |dt        hfdt        hfddœ«      ¥S )NrÝ  rÞ  r„   rð  )ÚeventrÒ   r  )ÚfreeTv)Ústreams.r,  c                 ó8   •— |d   j                  d«      d   ‰k(  S )NrÒ   ú-r   )Ú	partitionr¯  s     €rN   rO   z,CBCGemLiveIE._real_extract.<locals>.<lambda>ù  s    ø€   5¡×!3Ñ!3°CÓ!8¸Ñ!;¸xÑ!G€ rP   zBCouldn't find video metadata, maybe this livestream is now offlineTrš  ÚisVodEnabledrØ  r  rb  rõ  rö  r÷  r/   r#   rø  rù  r)   r*   )r^  r_  r/   )r)   r*   r™   )rv   rw   rè  rV   r   rÇ   r   r   rƒ  rú  rZ  rº  rX   )
r[   r/   rƒ   r¼  Úvideo_stream_idrÚ  rh  r
  r½  r  s
            @rN   rˆ   zCBCGemLiveIE._real_extractí  s£  ø€ Ø—>‘> #Ó&ˆØ×(Ñ(¨¨hÓ7ˆØ×-Ñ-¨g°xÓ@ÀÑIÈ+ÑVÐW]Ñ^ˆ
ð �~‰~Ð0Ô1Ü˜JÐ(8Ó9¸XÒEØ'¨Ñ0‘
ä)¨*Ø0°'ÛGÌð7Nó Oò UàRTð ð %Ÿ.™.Ð);Ó<ˆÙÜ ØUÐ`dôfð fð %/§N¡N°>Ô$B‘jÈ	ˆÜ(¨°iÄ-ÀÐ5QÓRÐà˜)Ò#Ñ(9Ð>OÔRV×R[ÑR[ÓR]Ò>]ØˆGØ'ˆKØ×!Ñ!Ð"GÐRVÐ!ÕWà×+Ñ+¨O¸^ÈXÓVÐW\Ñ]ˆHØ×0Ñ0°¸8ÀUÐQ\Ð`iÑQiÐ0ÓjˆGð ØØ&Ø!2ñ	

ô
 ˜:Ø!¤C 5Ð)Ø -´¨uÐ5Ø6ñ(ó ð

ð 
	
rP   Nr1  rK   rP   rN   rü  rü  ¦  sü   „ Ø€GØE€Jð :à!ØVð MØ(Ø$ØØ%/Ø *Ø&ñ
ð ,ñ	
ð  0àØØØ1ØVØ(ØOñð '¨Ð-Ø+ñ	
ð 9àØØØoð  zØ(ØOØ%/Ø *ñ
ð '¨Ð-Ø+ñ	
ð" 9Ø5àØØ)ØBØEØ9Ø%/Ø *ñ	ð '¨Ð-Ø9ñ	
ð" 9Ø!ñ	
ð}B€FóH(
rP   rü  c                   óV   — e Zd ZdZdZddddddd	d
dddœ	dœdddddddddddœ	dœgZd„ Zy)ÚCBCListenIEzcbc.ca:listenzWhttps?://(?:www\.)?cbc\.ca/listen/(?:cbc-podcasts|live-radio)/[\w-]+/[\w-]+/(?P<id>\d+)z|https://www.cbc.ca/listen/cbc-podcasts/1353-the-naked-emperor/episode/16142603-introducing-understood-who-broke-the-internetÚ16142603z/Introducing Understood: Who Broke the Internet?r—   z$md5:c605117500084e43f08a950adc6a708céå   i@ýhi€5hÚ20250428)	r'   r)   r(   r*   r›   r+   rh  ru  r,   rÛ  zghttps://www.cbc.ca/listen/live-radio/1-64-the-house/clip/16170773-should-canada-suck-stand-donald-trumpÚ16170773z2Should Canada suck up or stand up to Donald Trump?z$md5:7385194f1cdda8df27ba3764b35e7976iW  iÀ&Îhi@ÕÌhÚ20250919Ú20250920c                 óâ  ‡— | j                  |«      Š| j                  d‰› �‰d¬«      }t        |dt        hf«      }|s`| j	                  d«       | j                  |‰«      }| j                  d|d‰t        ¬«      }t        |d	d
dˆfd„t        t        d«      hf«      }d‰it        |dt        ht        fdt        hfdt        hfdt        d¬«      hfdt        d¬«      hfdt        hfdœ«      ¥S )Nz'https://www.cbc.ca/listen/api/v1/clips/FrF   r„   z:API failed to return data. Falling back to webpage parsingzwindow\.__PRELOADED_STATE__\s*=zpreloaded staterÌ   )ÚpodcastDetailDataÚshowDetailData.Úepisodesc                 ó&   •— t        |d   «      ‰k(  S )NÚclipID)rX   r¯  s     €rN   rO   z+CBCListenIE._real_extract.<locals>.<lambda>E  s   ø€ œS  8¡Ó-°Ñ9€ rP   zepisode datar'   )rà   r/   r)   r*   Ú
releasedAtrù   rú   Úairdater›   )r/   r)   r*   rh  r+   r›   )rv   rW   r   r  r  rw   r|   r   rÇ   r   r   rX   r
   )r[   r/   r”  r„   rƒ   Úpreloaded_stater  s         @rN   rˆ   zCBCListenIE._real_extract7  s)  ø€ Ø—>‘> #Ó&ˆà×&Ñ&Ø5°h°ZÐ@À(ÐRWð 'ó Yˆä˜H v´¨vÐ&6Ó7ˆÙØ×ÑÐ \Ô]Ø×,Ñ,¨S°(Ó;ˆGØ"×/Ñ/Ø2°GÐ=NØ¬:ð 0ó 7ˆOô   Ø7¸¸jÛ9¼3ÄÈÓAXÐ@Yð2[ó \ˆDð
 �(ð

ä˜4Ø&¬¨´sÐ;Ø!¤C 5Ð)Ø -´¨uÐ5Ø&2´[ÀtÔ5LÐ4MÐ%NØ'¬+¸DÔ*AÐ)BÐCØ'¬+¨Ð7ñ"ó ð

ð 
	
rP   Nr1  rK   rP   rN   r  r    sn   „ Ø€GØk€Jð NàØFØØAØØ#Ø!+Ø&Ø%ñ

ñð yàØIØØAØØ#Ø!+Ø&Ø%ñ

ñð€Fó8
rP   r  ).r  r}   rƒ  Úurllib.parser.  Úcommonr   Ú
networkingr   Únetworking.exceptionsr   Úutilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úutils.traversalr   r   r   r    r�   r#  r3  rq  rÁ  rÏ  ré  rü  r  rK   rP   rN   ú<module>r&     sË   ðÛ Û 	Û Û å !Ý $Ý -÷÷ ÷ ÷ ÷ ó ÷, >Ñ =ôC2ˆMô C2ôLK
�-ô K
ô\
<˜-ô <ôD9
�=ô 9
ôxm
ˆ|ô m
ô`&B�|ô &BôR>;�lô >;ôB5
�|ô 5
ôpo
�<ô o
ôd9
�-õ 9
rP   