
    ukiG                        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 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 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&y)    N   )InfoExtractor   )compat_etree_fromstring)Request)network_exceptions)ExtractorError
clean_htmldetermine_extfloat_or_noneformat_fieldget_element_by_id	get_firstint_or_nonejoin_nonempty
js_to_jsonmerge_dictsparse_countparse_qs	qualitiesstr_or_nonetraverse_objtry_geturl_or_noneurlencode_postdataurljoinvariadicc                      e Zd ZdZddgZdZdZdZdZdZ	dZ
g d	d
ddddddddde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)d*eed+dgdd,d-d.d/dd0d1d2d3dd d4d5d6d7dd8d9d:d;d!d<d=d>dd?d@d:d;d!dAdBdCdDddEddFdGdHdIdJd4dKdLdMddNdOdPdQdRdedSedTdUdVdWdXddYdZd[d\d]d^eded_d`dadbdcddddedfdgdhddid dbdjdkddldmdndodpdqdrd dbdsdtddudvdwdxdydzdd{d|
dadbd}d~dddddddedddddddddddddddedddddddddddddddddddddddddddddddddddddddededddiddddddeddddd%dddgdddddddidd dddddddddd dbddddddddddbddddddidd ddddddddddΜddddZddddddԜdgd֜dddddedddddddeddgd֜dddddedddddddedddddgiiidgZdZddiZd Zd Zd Zy)
FacebookIEa(  (?x)
                (?:
                    https?://
                        (?:[\w-]+\.)?(?:facebook\.com|facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd\.onion)/
                        (?:[^#]*?\#!/)?
                        (?:
                            (?:
                                permalink\.php|
                                video/video\.php|
                                photo\.php|
                                video\.php|
                                video/embed|
                                story\.php|
                                watch(?:/live)?/?
                            )\?(?:.*?)(?:v|video_id|story_fbid)=|
                            [^/]+/videos/(?:[^/]+/)?|
                            [^/]+/posts/|
                            events/(?:[^/]+/)?|
                            groups/[^/]+/(?:permalink|posts)/(?:[\da-f]+/)?|
                            watchparty/
                        )|
                    facebook:
                )
                (?P<id>pfbid[A-Za-z0-9]+|\d+)
                zd<iframe[^>]+?src=(["\'])(?P<url>https?://www\.facebook\.com/(?:video/embed|plugins/video\.php).+?)\1z(?x)<div[^>]+
                class=(?P<q1>[\'"])[^\'"]*\bfb-(?:video|post)\b[^\'"]*(?P=q1)[^>]+
                data-href=(?P<q2>[\'"])(?P<url>(?:https?:)?//(?:www\.)?facebook.com/.+?)(?P=q2)z\https://www.facebook.com/login.php?next=http%3A%2F%2Ffacebook.com%2Fhome.php&login_attempt=1z]https://www.facebook.com/checkpoint/?next=http%3A%2F%2Ffacebook.com%2Fhome.php&_fb_noscript=1facebookz-https://www.facebook.com/video/video.php?v=%szZhttps://www.facebook.com/video/tahoe/async/%s/?chain=true&isvideo=true&payloadtype=primaryz>https://www.facebook.com/radiokicksfm/videos/3676516585958356/3676516585958356mp4zdr Adam Przygodaz$md5:34675bda53336b1d16400265c2bb9b3bzRADIO KICKS FM202308182re:https?://scontent\.fitm\d-1\.fna\.fbcdn\.net/.+i/'d100063551323670g#~*{@r   )idexttitledescriptionuploaderupload_date	thumbnail	timestampuploader_idduration
view_countconcurrent_view_countCannot parse data)url	info_dictexpected_warningsz<https://www.facebook.com/video.php?v=637842556329505&fref=nf 6a40d33c0eccbb1af76cf0485a052659637842556329505zOre:Did you know Kei Nishikori is the first Asian man to ever reach a Grand SlamzTennis on Facebook20140908iT)r&   r'   r(   r*   r+   r-   zRequires logging in)r3   md5r4   skipz4https://www.facebook.com/video.php?v=274175099429670274175099429670u7   119 reactions · 1.4K shares | Asif Nawab Butt on Reels zAsif Nawab Butt20140506iV"iSHpfbid028xue38TBXRyNbiqBSV2LFs3QK3yopvKjupbqFoL6U9SKbx4p2SMdJjQSBvnjsHGWlg)\``@)r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r1   r0   zVideo with DASH manifestz4https://www.facebook.com/video.php?v=957955867617029 b2c28d528273b323abe5c6ab59f0f030957955867617029zPWhen you post epic content on instagram.com/433 8 million followers, this is ...zDemy de Zeeuw20160110iYV)noter3   r9   r4   r:   z8https://www.facebook.com/maxlayn/posts/10153807558977570 037b1fa7f3c2d02b7a0d7bc16031ecc6544765982287235z)"What are you doing running in the snow?"FailArmy)r&   r'   r(   r*   z
Video gonezOhttps://m.facebook.com/story.php?story_fbid=1035862816472149&id=116132035111903 1deb90b6ac27f7efcf6d747c8a27f5e31035862816472149z;What the Flock Is Going On In New Zealand  Credit: ViralHogzS. Saintzswf params escapedz<https://www.facebook.com/barackobama/posts/10153664894881749 97ba073838964d12c70566e0085c2b9110153664894881749zPAverage time to confirm recent Supreme Court nominees: 67 days Longest it's t...i,V20160223zBarack Obama)r&   r'   r(   r,   r-   r+   r*   zGif on giphy.com gonez6https://www.facebook.com/cnn/videos/10155529876156509/ 70b82ebf5f0e9b91b2a49d3db356361110155529876156509z%Holocaust survivor becomes US citizenu   She survived the holocaust — and years later, she’s getting her citizenship so she can vote for Hillary Clinton http://cnn.it/2eERh5fiX20161030CNN100059479812265gI+F@)r&   r'   r(   r)   r-   r+   r*   r,   r0   r.   r1   r/   r3   r9   r4   zAhttps://www.facebook.com/yaroslav.korpan/videos/1417995061575415/1417995061575415u@   Довгоочікуване відео | By Yaroslav - Facebooku'   Довгоочікуване відеоisX20170209zYaroslav KorpanGpfbid06AScABAWcW91qpiuGrLt99Ef9tvwHoXP6t8KeFYEqkSfreMtfa9nTveh8b2ZEVSWlg+9@)r&   r'   r(   r)   r-   r+   r*   r.   r1   r,   r0   r/   Invalid URLr3   r4   r:   z>https://www.facebook.com/LaGuiaDelVaron/posts/10726917028604711072691702860471z$md5:ae2d22a93fbb12dad20dc393a869739diX20161024u   La Guía Del Varón)r&   r'   r(   r-   r+   r*   r,   zLhttps://www.facebook.com/groups/1024490957622648/permalink/1396382447100162/202882990186699z1birb (O v O") | Hello? Yes your uber ride is herezlHello? Yes your uber ride is here * Jukin Media Verified * Find this video and others like it by visiting...i9X20170202zElisabeth Ahtn100013949973717)r&   r'   r(   r)   r-   r+   r*   r.   zHhttps://www.facebook.com/groups/1645456212344334/posts/3737828833107051/1569199726448814zPence MUST GO!zVickie Gentry shared a memory.ideZ20171124zVickie GentryGpfbid0FkkycT95ySNNyfCw4Cho6u5G7WbbZEcxT496Hq8rtx1K3LcTCATpR3wnyYhmyGC5lgI+b@)
r&   r'   r(   r)   r-   r+   r*   r.   r,   r/   zkhttps://www.facebook.com/attn/posts/pfbid0j1Czf2gGDVqeQ8KiMLFm3pWN8GxsQmeRrVhimWDzMuKQoR8r4b1knNsejELmUgyhl6968553779868435z$md5:2f2fcf93e97ac00244fe64521bbdb0cbzATTN:20231207g`@100064451419378i^re)r&   r'   r)   r*   r+   r(   r/   r.   r0   r,   r-   r3   r4   zhttps://www.facebook.com/permalink.php?story_fbid=pfbid0fqQuVEQyXRa9Dp4RcaTR14KHU3uULHV1EK7eckNXSH63JMuoALsAvVCJ97zAGitil&id=100068861234290270103405756416z
Lela EvanszToday Makkovik's own Pilot Mandy Smith made her inaugural landing on the airstrip in her hometown. What a proud moment as we all cheered and...Hpfbid02wjMpknobSMnyynK3TNKN4Ww1StcpAKXgowqTyge3bz7LwHZMQ68uiXzzbu7xeryBl20231228iegd;Ox@)r&   r'   r(   r)   r,   r*   r.   r+   r-   r/   r0   zhttps://www.facebook.com/story.php?story_fbid=pfbid0Fnzhm8UuzjBYpPMNFzaSpFE9UmLdU4fJN8qTANi1Dmtj5q7DNrL5NERXfsAzDEV7l&id=100073071055552Tr3   only_matchingz6https://www.facebook.com/video.php?v=10204634152394104zAhttps://www.facebook.com/amogood/videos/1618742068337349/?fref=nfzbhttps://www.facebook.com/ChristyClarkForBC/videos/vb.22819070941/10153870694020942/?type=2&theaterzfacebook:544765982287235zJhttps://www.facebook.com/groups/164828000315060/permalink/764967300301124/z@https://zh-hk.facebook.com/peoplespower/videos/1135894589806027/zfhttps://www.facebookwkhpilnemxj7asaniu7vnjjbiltxjqhye3mhbshg7kx5tfyd.onion/video.php?v=274175099429670zIhttps://www.facebook.com/onlycleverentertainment/videos/1947995502095005/z<https://www.facebook.com/WatchESLOne/videos/359649331226507/359649331226507zBFnatic vs. EG - Group A - Opening Match - ESL One Birmingham Day 1z?#ESLOne VoD - Birmingham Finals Day#1 Fnatic vs. @Evil Geniusesit[20180523zESL One Dota 2100066514874195gL7A @)r&   r'   r(   r)   r-   r+   r*   r.   r/   r0   r,   r1   skip_download)r3   r4   paramsz@https://www.facebook.com/100033620354545/videos/106560053808006/106560053808006zJosef Novak on ReelsGpfbid0cjYJYXpePWqhZ9DgpB6gKXrN2q3obwducdKm4wT7K5nkhbfKg5cneocYbsdaji7fliX\g$C
@zJosef Novak20190204)r&   r'   r(   r,   r1   r.   r-   r/   r*   r)   r+   z1https://www.facebook.com/watch/?v=647537299265662zAhttps://www.facebook.com/PankajShahLondon/posts/10157667649866271r&   10157667649866271   r3   r4   playlist_countr:   zHhttps://m.facebook.com/Alliance.Police.Department/posts/4048563708499330117576630041613zFacebook video #11757663004161318939301441643820201123i_)r&   r'   r(   r.   r+   r-   zMhttps://www.facebook.com/groups/ateistiskselskab/permalink/10154930137678856/211567722618337zFacebook video #21156772261833712787522765425420161122i3XzNo videoz7https://www.facebook.com/watch/live/?v=1823658634322275z3https://www.facebook.com/watchparty/211641140192478211641140192478r   z.https://m.facebook.com/events/1509582499515440637246984455045z;ANALISI IN CAMPO OSCURO " Coaguli nel sangue dei vaccinati"zDOther event by Comitato Liberi Pensatori on Tuesday, October 18 2022zComitato Liberi Pensatori100065709540881)r&   r'   r(   r)   r,   r*   r.   zYhttps://www.facebook.com/groups/1513990329015294/posts/d41d8cd9/2013209885760000/?app=fblz1http://www.unique-almeria.com/mini-hollywood.html cba5d8c5021e9340dcefe925255e2c3e1529066599879zFacebook video #1529066599879)r&   r'   r(   zunable to extract uploaderr3   r9   r4   r5   zHhttps://www.newsmemory.com/eedition/e-publishing-solutions/2-in-one-app/ ae97d4a44f8cc9a8b1a4c03b9ed793af10155710648695814z6Download the all new and improved Trinidad Express Appz$md5:4806195c99908e4189b45b1c23bd4f89g'1ZQ@iۿm[20180810zTrinidad Express Newspapers100064446413648r&   r'   r(   r1   r)   r/   r,   r-   r+   r*   r.   r0   zhttps://www.curs.md/ro 090bae53b9bff2be993c896edc2ea205334484292523563z$md5:9abffe1c86cdd967ffa224e1ccc13b90z$md5:0ba98567a61c640f9fabf1882235b33dg^I*@i$]e20231121zIstoria Moldovei100063529778592extractor_argsgenericimpersonatechrome)r3   r9   r4   rk   zK(?:pagelet_group_mall|permalink_video_pagelet|hyperfeed_story_id_[0-9a-f]+)graphURIz/api/graphql/c           
         t        | j                        }| j                  ddd       | j                  |d dd      }| j	                  d|d      }| j	                  d	|d
      }||||dddddd	}t        | j                  t        |            }d|j                  d<   	 | j                  |d dd      }	t        j                  d|	      :| j                  d|	dd d      }
|
rt        d|
 d      | j                  d       y | j	                  d|	dd       }| j	                  d |	d!d       }|r|sy ||d"d#}t        | j                  t        |            }d|j                  d<   | j                  |d d$%      }t        j                  d&|      | j                  d'       y y # t        $ r}| j                  d(|        Y d }~y d }~ww xY w))Nzfacebook.comlocaleen_USzDownloading login pagezUnable to download login page)rB   errnotez/<input type="hidden" name="lsd" value="([^"]*)"lsdzname="lgnrnd" value="([^"]*?)"lgnrndzhttp://facebook.com/home.php01z-60)	emailpassr   r   nextdefault_persistentlegacy_returntimezonetrynum!application/x-www-form-urlencodedContent-Typez
Logging inzunable to fetch login pagez <form(.*)name="login"(.*)</form>zh(?s)<div[^>]+class=(["\']).*?login_error_box.*?\1[^>]*><div[^>]*>.*?</div><div[^>]*>(?P<error>.+?)</div>zlogin errorerrordefaultgroupzUnable to login: Texpectedzjunable to log in: bad username/password, or exceeded login rate limit (~3/min). Check credentials or wait.zname="fb_dtsg" value="(.+?)"fb_dtsgr   z.name="h"\s+(?:\w+="[^"]+"\s+)*?value="([^"]+)"h	dont_save)r   r   name_action_selectedzConfirming login)rB   zid="checkpointSubmitButton"zSUnable to confirm login, you have to login in your browser and authorize the login.zunable to log in: )r   
_LOGIN_URL_set_cookie_download_webpage_search_regexr   headersresearch_html_search_regexr	   report_warning_CHECKPOINT_URLr   )selfusernamepasswordlogin_page_req
login_pager   r   
login_formrequestlogin_resultsr   r   r   
check_form	check_reqcheck_responseerrs                    T/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/facebook.py_perform_loginzFacebookIE._perform_login  s=    17;++ND1I4S , U
   > ##$EzS[\ 2"% 


 $//+=j+IJ*M'!	 227D8DNj 3 lMyy<mLX//!=$g 0 O (+<UG)DtTT##  %Q  R((/	SW ) YG""A=RU_c # eA ! #(3J
   4 46H6TUI0SIn-!33It9K 4 MNyy7HT##$yz U! 	"4SE :;	s&   A$F$ .F$ 3A/F$ $	G-GGc                    +,-./01  j                  |j                  dd            0 fd}d }d - j                   j                  ddg0dd	      d
      }|r -|j	                  dg             }-fd}dn fd	,d / 0fd11fd}dn1fd	}|sP j                   j                  d j
                  z   d j
                   dg0dd	      t        d
      } ||      }|sv |dd      }	|	rig ++,/ 0fd.do.fd	}
t        t        |	dd      xs g       }t        |ddd d!d"d#dd$d%t        hf
      }|D ]:  }t        |d&ddt        hfd'd#dd(d%t        hf      }|D ]
  } |
|         |
|       < t        |	d) t              xs g }|D ]  } |
|d*        t        |	d+d,t        -      xs i }|r2t        |d. d/ gt              xs g }|D ]
  } |
|        +s .|       t        +      d0kD  r j                  +      S +r+d1   nd2i} |0      }|j	                  d3      r|d3   |d3<   |j	                  d4      r|d4   |d4<   t        ||      S |s\t        j                   d50      }| t#        d6|j%                  d0       d7d89      t'        0fd:d;D              r j)                          |s^d<|v rYd=t+        j,                  d>i      d?} |d@      }|rt        |dA t              }|r|dB   ||dC   <    |dD      }|j	                  dE      xs g D ]  }|d1   dFk(  s|dG    _          j1                  t3        | j.                  dH         t5        |      I      dJ   dK   }g +t        |dL       xs g D ]  }t        |dM       xs i }|j	                  d2      }|s(t7        |      }+j9                   j;                   j<                  |z   j?                         ||j	                  dC                     j                  +      S |s j                   j@                  z  t5        d0 j                  dN0dOdP	       j                  dQ0dRdS	       j                  dT0dUdV	      dW      dXdYiZ      } j                   j                  d[|d\d	      d
      } ||      }|st#        d]      t        |      d0kD  r~g +|D ]e  }|d1   j	                  d^      } | s+j9                   j;                  t3        ||        j?                         |d1   j	                  d_                   g  j                  +      S |d1   }g }!i }"|D ]  }#|#d`   }$|#rtC        |#t              r|#g}#|#rtC        |#t              s0daD ]]  }%dbD ]V  }&|#d1   j	                  |% dc|&       }'|'s|$ddk(  rdendf}(|%dgk(  r|(d0z  }(|!j9                  |$ dc|% dc|& |'|(|%dgk(  rdhnd di       X _  ,|#d1   |!       |#d1   j	                  dj      })|)s|"jE                  dkg       j9                  dl|)i        |!|"dm}* /|*       |*jG                   |0             |*S )pNz://m.facebook.com/z://www.facebook.com/c                    t        j                  d|       D cg c]  }j                  |d       }}t        |dt              xs g }t        |dddfdft              }t        |d	      }t        |d
      }|xs9 j                  ddj                  d      j                  d      df| dd d      }|xs j                  g d| dd       }t        |dt        hf      xsn t        |dddddd f      xsY t        |ddd f      xsG t        |dddt        hf      xs0 t        |ddt        hf      xs t        |ddd d!t        hf      xs i }|j                  d"      xs? t        t        d#|             xs( j                  d$gj                  d      | d%d      }	t        j                  d&| d'd             }
j                  d(d)g| d*d       }|rt        j                  d+|      sd }||	|j                  d,      |
|t!        j                  d-| d.d             t        |d/d0t        hf      d1t        |fd2d3d4d5t"        hfd6t"        hfd7t         hfd8fd9      }j%                  | i       }t        j&                  d:d;|xs |j                  d      xs |xs d;      xs |xs d;j)                  d<d=      xs d> |d<   t+        ||      S c c}w )?N-data-sjs>({.*?ScheduledServerJS.*?})</script>Ffatal).require...__bboxr   ...r   resultdataexpected_type.attachmentsc                 H    | dk(  xr t        |d         k(  xr |d   dk(  S )Nmediar&   
__typenameVideo)str)kvvideo_ids     r   <lambda>zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>  s0    WXQtW!9XaoQX>X     )r(   text)creation_storycomet_sectionsmessagestoryr   r   z=<h2\s+[^>]*class="uiHeaderTitle"[^>]*>(?P<content>[^<]*)</h2>zq(?s)<span class="fbPhotosPhotoCaption".*?id="fbPhotoPageCaption"><span class="hasCaption">(?P<content>.*?)</span>zog:titleztwitter:titlez<title>(?P<content>.+?)</title>r(   contentr   )r)   zog:descriptionztwitter:descriptionr)   r   ownervideor   r   c                     | dk(  xr |d   S Nr   name r   r   s     r   r   zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>*  s%    ijnuiu  jDz{  }C  {D r   c                     | dk(  xr |d   S r   r   r   s     r   r   zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>+  s    qG|?YPQRXPY r   nodeactorseventevent_creatorshort_form_video_contextvideo_ownerr   fbPhotoPageAuthorNamezownerName\s*:\s*"([^"]+)"r*   z<abbr[^>]+data-utime=["\'](\d+)r-   zog:imageztwitter:imager,   z\.(?:jpg|png)r&   )z \bviewCount\s*:\s*["\']([\d,.]+)z!video_view_count["\']\s*:\s*(\d+)z
view count)r   )..r   .r   liveViewerCount)r)   r*   r.   r-   r,   r0   r1   c                     |d   v S )Nr3   r   )_r   r   s     r   r   zHFacebookIE._extract_from_url.<locals>.extract_metadata.<locals>.<lambda>H  s    8qx3G r   feedbacklikerscounttotal_comment_countshare_count_reduced)
like_countcomment_countrepost_countget_allz\s*\|\s*Facebook$r<   
 Facebook video #)r   findall_parse_jsonr   dictr   r   _meta_regex_html_search_metagetr
   r   r   _og_regexesr   r   r   int_search_json_ldsubreplacer   )webpagej	post_datapostr   r(   r)   
page_titleuploader_datar*   r-   r,   r4   info_json_ldr   r   s                 r   extract_metadataz6FacebookIE._extract_from_url.<locals>.extract_metadata  s   MOZZ@'NK L))!XU)C LI L	 ,o CD J HJ  ]C BZ ([jnpEe%67E#E+vwK @$"9"9P E  ,d.>.>.OQs; Y	 #: #@J
 & 6)?)?H *@ *6K %'D6!23 yTG-=}cSZ  ]D  $E  FyTC2Y#Z[y TFHcD6#BCy TG_tf#EF	y
 TG-=?Y[hkojp#qry
 wy  %((0 s,-DgNO r%%1ND4D4DW4MNPWYckp & r  $D$6$62GT %7 %+ ,I .._-wT / SI
 +;Y!G 	*$,006&&)$*<*<_\4 += +9 : *34FHY\g[h:j *k t&G#+Wse"<&;cU%C%:[M$JV & "	#I$  //2/NL%'VV,@"eF||O_O_`gOhF|lvF|z|%} &p)4):(C(CD#(N&pTdemdnRo !|Y77uLs   K#c                     g }| D ]A  }t        |d       dk(  s|d   d   }|j                  d      s.|j                  |d          C |S )Nc                     | d   d   S )Nr   r   r   xs    r   r   zJFacebookIE._extract_from_url.<locals>.extract_video_data.<locals>.<lambda>Y  s    1Q47 r   VideoConfigr   r   r   	videoData)r   r  append)	instances
video_dataitem
video_items       r   extract_video_dataz8FacebookIE._extract_from_url.<locals>.extract_video_dataV  s\    J! C4!23}D!%aJ!~~j1"))*[*AB	C
 r   z handleServerJS\(({.+})(?:\);|,")z\bs\.handle\(({.+?})\);zserver js dataz{}r   Fr   r  c                 B    | r t        | d t              xs g       S y )Nc                     | d   d   S )Njsmodsr  r   r  s    r   r   zUFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instances.<locals>.<lambda>i  s    q{;'? r   )r   list)js_datar  s    r   extract_from_jsmods_instanceszCFacebookIE._extract_from_url.<locals>.extract_from_jsmods_instancesf  s3    )'?+G +MJLN N r   c           
          t        | ddddt              }|re|j                  j                  t	        t
        j                  j                  |            t        | j                  d            xs |             y y )Ndash_manifestplaylistdash_manifest_xml_stringmanifest_xmlr   dash_manifest_urlmpd_url)
r   r   extend_parse_mpd_formatsr   urllibparseunquote_plusr   r  )vid_dataformatsr(  r"  r   s       r   extract_dash_manifestz;FacebookIE._extract_from_url.<locals>.extract_dash_manifestk  st    (/:7QSaqtvMt66+FLL,E,Em,TU'5H(IJUg  7  W X r   c                 l    | d   D ],  }d|j                  di       d<   d|j                  di       d<   . y )Nr/  zfacebookexternalhit/1.1http_headersz
User-Agenti  downloader_optionshttp_chunk_size)
setdefault)infofs     r   process_formatsz5FacebookIE._extract_from_url.<locals>.process_formatss  sI     )_ V B[^R0>LU1267HIVr   c              3      K   t        j                  d|  d      D ]  }j                  |d      xs i   y w)Nzdata-sjs>({.*?z.*?})</script>Fr   )r   r   r   )_filter
relay_datar   r   r  s     r   yield_all_relay_dataz:FacebookIE._extract_from_url.<locals>.yield_all_relay_data}  sJ      jjOG9O)TV]^ P
&&z85&IOROPs   ;>c                 <    t        t        d  |             i       S N)r   filter)r:  r<  s    r   extract_relay_dataz8FacebookIE._extract_from_url.<locals>.extract_relay_data  s    t%9'%BCRHHr   c                 h    d}fd}t         |       dddd dddd|t        hf
d	
      xs i S )Nr   c                 N    | dk(  xr t        fdt              D              S )Nr   c              3   &   K   | ]  }|v  
 y wr>  r   ).0targetr   s     r   	<genexpr>zhFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.<locals>.<genexpr>  s     7h!7h   )anyr   )r   r   target_keyss    `r   r   zUFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>  s"    AK$hC7hRZ[fRg7h4h r   .r   )N)...r   r   c                 &    t        d |D              S )Nc              3   >   K   | ]  }|j                  d         yw)RelayPrefetchedStreamCacheN
startswith)rD  keys     r   rF  zhFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>.<locals>.<genexpr>  s      [RU0L!M [s   )rH  r   r   s     r   r   zUFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data.<locals>.<lambda>  s    S [YZ [[ r   r   r   Fr   )r   r   )r:  rI  pathr<  s    ` r   extract_relay_prefetched_datazCFacebookIE._extract_from_url.<locals>.extract_relay_prefetched_data  s^    D&h 4W =Y L[S(HdTF@< FKL R PRRr   zNbigPipe\.onPageletArrive\(({.+?})\)\s*;\s*}\s*\)\s*,\s*["\']onPageletArrive\s+z)bigPipe\.onPageletArrive\(({.*?id\s*:\s*"z	".*?})\);zjs dataz/"(?:dash_manifest|playable_url(?:_quality_hd)?))r   r   nodesr   mediaset)rI  c           
         | j                  d      xs | j                  d      xs }t        | dddt        hf      }|r%| d   } t        | d      | d<   | j                  |       g }t	        dd	g      }t        | d
t        hf      xs | }dD ]i  \  }}|j                  |      }|st        |      dk(  r$|j                  j                  |d             L|j                  | ||      dz
  |d       k  ||       t        | d      }t        |dddt        hf      }	t        |dd f      }
t        |
      D ]  \  }} ||t        |	|              |
s*|	D ]%  }|j                  j                  |d             ' t        |dd f      D ]A  }t        |ddt        j                  hf      }|j                  | ||      dz
  |d   d       C t        |dddt        hf      D ]'  }|j                  j                  |ddd !             ) |sy i i }}t        | d"t        hf      }t        | d#d$ hd% f      D ]  }|j                  d&      xs d'}|d(   t        |d)| d*|+      d,}|j                  d-      s|r%|j!                  |d.   g       j                  |       h|j!                  |d.   g       j                  |        t        | d(t        hf      }|r'|s%|s#j#                  d/d0g d.d1+      }d2|ig|r|n||<   ||t        | d3d4      t        | ddt$        hf      t        | d5d6t&        7      t)        | j                  d8      d9      xs t)        | j                  d:            ||d;} |       t+        | d<       }| j                  d=      }|r|j                  ||d>       n|xs d?| |d@<   j                  |       y )ANvideoIdr&   r   r   playback_video)r   r   r   sdhdvideoDeliveryLegacyFields))playable_urlrX  )playable_url_quality_hdrY  )playable_url_dashr<   )browser_native_hd_urlrY  )browser_native_sd_urlrX  mpdFr   rp   )	format_idqualityr3   )videoDeliveryResponseFragmentvideoDeliveryResponseResultdash_manifest_urls.manifest_urldash_manifestsc                     |d   S )Nr%  r   rP  s     r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    \]^l\m r   r'  progressive_urlsc                     |d   S )Nprogressive_urlr   rP  s     r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    ]^_p]q r   metadatarb  rk  hls_playlist_urlshls_playlist_urlr"   hls)r   m3u8_idis_video_broadcast video_available_captions_localesc                     t        | d       S )Nc                     | d   S )Nr   r   )cs    r   r   z]FacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>.<locals>.<lambda>  s
    1X; r   rO  )sortedr  s    r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    6!1F#G r   c                     t        |d         S )Ncaptions_url)r   rP  s     r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    [>1B%C r   localized_languageundry  localized_countryz (%s)r   )r3   r   localized_creation_methodr   z	og:localeztwitter:localer   r3   )thumbnailImageuri)preferred_thumbnailimager  publish_timecreation_timer   playable_duration_in_msi  length_in_second)r&   r/  r,   r.   r-   r/   automatic_captions	subtitlesc                     | d   d   S )Nsavable_descriptionr   r   r  s    r   r   zKFacebookIE._extract_from_url.<locals>.parse_graphql_video.<locals>.<lambda>  s    1=R;STZ;[ r   r   r(   r)   r   r(   )r  r   r   updater   r   r)  _extract_mpd_formatsr  r   	enumerater   lower_extract_m3u8_formatsboolr   r5  r   r   r   r   r   )!r   v_id	reel_infor/  qfmt_datarO  ra  r[  mpd_urlsrg  idxr"  r(  prog_fmtm3u8_urlr  r  is_broadcastcaptionlangsubsry  r   r6  r)   r(   entriesr0  r8  r   r   r  s!                              r   parse_graphql_videoz9FacebookIE._extract_from_url.<locals>.parse_graphql_video  s    99Y/N599T?NhD , 02LN^ae`fg!iI  %&6 7)5e=h)igY/ G!4,/A  ,E4ORVQW3XYb]bH+L Y (0||C'8+$(6%?#NN4+D+D\S[ch+D+ij#NN-6+,Y<!+;'3	,  *(G<  ,E3stH+H7KSR`cnbo6pqH%1(=MOm<n%oN.7.G k*]-mWl[cehNijk)'/ fG#NN4+D+DWh^c+D+def$0<NPq;r$s $0J	TWT]T]S^;_$`	)2'(|a'7#+,=#>	(  %1<OQTVhkvjw;x$y zt'A'A(HV[chrw'A'xyz #46	&#/8Ltf7U#VL#/:GHC8 $ U
  '{{+?@IE#*>#:$0:MRVQWW\~gk$l  #;;'BC|.99'(:KRPWWX\]%001BBGNNtTU $07V#WL#,>y!%!7!7(*:;WhX_ "8 "aX]_kWlVm|+FS ##*%1!#<>e&g'3EGTK=;Y'Z%1%hs%t%2599=V3WY]%^ &U(5eii@R6S(T.@%.D $D)")%1["\K!IIf-E%*+6% 
 )4(P9I$7PWNN4(r   c                 h    | j                  |      xs i }|j                  d      dk(  r |      S y )Nr   r   )r  )
attachmentrO  r   r  s      r   parse_attachmentz6FacebookIE._extract_from_url.<locals>.parse_attachment  s7    &NN3/52Eyy.'92599 :r   rS  r   .r   r   r   )Nattached_storyr   )stylesstyle_type_renderer)throwbackStylesattachment_target_rendererr  all_subattachmentsrE  r  c                     | d   d   d   S )NrT  	currMediaedgesr   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    *k0J70S r   rv  )r   cover_media_renderercover_videor   r   c                     | d   d   S )Nr   r   r   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    !G*]"; r   c                     | d   d   S )Nr   r   r   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>  s    !$4"5m"D r   r   r   r&   r/   r,   z8class="[^"]*uiInterstitialContent[^"]*"><div>(.*?)</div>z,The video is not available, Facebook said: ""Tr   c              3   &   K   | ]  }|v  
 y wr>  r   )rD  pr  s     r   rF  z/FacebookIE._extract_from_url.<locals>.<genexpr>5  s      )aQ'\ )rG  )z>You must log in to continuezid="login_form"zid="loginbutton"z/watchparty/l   Ws/j livingRoomID)doc_id	variablesz"login_data"\s*:\s*{c                     | d   d   S )N
login_datar   r   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>E  s    <9O r   valuer   z!\[\s*"RelayAPIConfigDefaults"\s*,defineRelayAPIConfigDefaultsr   r   )r   r   living_roomc                     | d   d   d   S )Nrecapwatched_contentr  r   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>S  s    '
CT8UV]8^ r   c                     | d   d   S )Nr   r   r   r  s    r   r   z.FacebookIE._extract_from_url.<locals>.<lambda>T  s    &	'0B r   z%pkg_cohort["\']\s*:\s*["\'](.+?)["\']z
pkg cohortzPHASED:DEFAULTz!client_revision["\']\s*:\s*(\d+),zclient revision3944515z>"DTSGInitialData"\s*,\s*\[\]\s*,\s*{\s*"token"\s*:\s*"([^"]+)"z
dtsg tokenr<   )__a__pc__revr   r   r   )r   r   zfor\s+\(\s*;\s*;\s*\)\s*;(.+)ztahoe js datar2   	video_urlr   stream_type)rX  rY  )srcsrc_no_ratelimitr   progressiveirY  i  )ra  r3   rb  heightsubtitles_srcenr3   )r&   r/  r  r>  )r   )$r   r  r   r   r  _SUPPORTED_PAGLETS_REGEXr   r   r   r   r   r  lenplaylist_resultr   r   r   r	   r   rH  raise_login_requiredjsondumps_api_config_download_jsonr   r   r   r  
url_result_VIDEO_PAGE_TEMPLATEie_key_VIDEO_PAGE_TAHOE_TEMPLATE
isinstancer5  r  )2r   r3   r   r  r  server_js_datar   r@  rR  r   r  rS  r   r  nsnr  edger   
video_infowebpage_infom_msgr	  prefetched_datar   r;  r  r  r  
tahoe_datatahoe_js_datar   r  r/  r  r7  ra  rb  src_typer  
preferencer  r4   r  r0  r  r  r8  r  r<  s2   ` `                                        @@@@@@@r   _extract_from_urlzFacebookIE._extract_from_url  s
   ((KK,.DExQ;	8z 
	 ))$*<*<02LM%t += +56>e * M +N,>,>{B,OPJ	N
	X	V	P	I	R !--d.@.@adh  eB  eB  B=d>[>[=\\fgB 	4 /A /1 3;JON 7~FJ0BKMD d) d)L:
 !dGV!D!JK*5)9g?WYfm 4&3* + #. 1J%j3GRUX\W]2^'/X|^b]c&dfB ,(+,$Z01  &SUYZ`^`! 7D$Tv67 %T ,DEL\`b heg ")%;D2 # ## !#   '2 5
(45"+E2w<!#//BB+2WQZx8H
/8>>*-/9*/EL,>>+.0:;0GL-"<<<IIY[bcE $B5;;q>BRRST!# #  ) ,( ) ) ))+n3*!ZZ"H) I <<STOo/OQUV-0\Ic&k*+,PQJ%>>(39r 1!9 88'-ayD$1 --T--j9:H'	2 . 44:<<IKK G .^_ece =&BCIryy4yt--4KKM46): < == '':: ////(:H' ..@'$.> / @ "//<g)9 0 >  $11Yr  2  ;)  #$G 0 J" !,,""4j#T # 3 	 - 'M
 7}EJ !455z?QG KaDHH[1	 tw0$%)[[]AaDHHZ4H J K	K ''::]
	 	NA-(IZ4(CJq$/'  ; HA$((gYaz#:;C -6,FSB
"d?&!OJ,5;ay()L#&'1-4_c$	(  "!A$0aDHH_5M$$T2.55um6LM1	N6 "
	
 		")'23r   c                     | j                  |      }|j                  d      r| j                  |z  n|}| j                  ||      S )Nz	facebook:)	_match_idrN  r  r  )r   r3   r   real_urls       r   _real_extractzFacebookIE._real_extract  sA    >>#&;>>>+;V4,,x7\_%%h99r   N)__name__
__module____qualname__
_VALID_URL_EMBED_REGEXr   r   _NETRC_MACHINEIE_NAMEr  r  r  _TESTS_WEBPAGE_TESTSr  r  r   r  r  r   r   r   r   r   "   s   J4 	p	cL pJuONGJ!}UO$'A(%N#, %&
 22! U$ N1#f,%#
 &#U> F#N)%N#e%(
 22#;U` +E1#g'%#
 &_Uz J1#@"	
 
yUN a1$R"	
 
MUb %M1%hN#%&
 (aUB H1%< g#%N,%(
}Uj S$WD#%)d%(N!
 'cUN P$;#%-N
 &KUh ^#H J#%(,	
 &eUD Z$%;#%'dN
 AUd }$A%,N#
aUD ^#! nN$e%#
AUb ZaUh HgUn SmUv tsU~ *{UF \CUN RKUV xSU^ [[Uf N#Y\#%(, N%(
 #D)#cUJ R#+N%(d#%%
 22!GUl CiUv S%
 %	qUF	 Z#6,%#
 &C	U`	 _#6,%#
 ]	Ux	 Iu	U~	 E#
 %}	UP
 @#RaN3,
	K
Uf
 ke
UFp
 C1!4

 ;;
 Z1%M%(AN#%5,
 22', (1#;%(A N#%*,
 $i-(1L%MN%=1Nd  nOK9vYv:r   r   c                   R    e Zd ZdZdddddeddd	d
dddeddgdddddddgZd Zy)FacebookPluginsVideoIEzQhttps?://(?:[\w-]+\.)?facebook\.com/plugins/video\.php\?.*?\bhref=(?P<id>https.+)zhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fgov.sg%2Fvideos%2F10154383743583686%2F&show_text=0&width=560 af83aeae1d595f377c6e47a45082815510154383743583686r"   zWhat to do during the haze?z$md5:81839c0979803a014b20798df255ed0bg!rhEP@r$   iW20160826zgov.sg100064718678925r   r2   r~   zrhttps://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fvideo.php%3Fv%3D10204634152394104Tre   zhttps://www.facebook.com/plugins/video.php?href=https://www.facebook.com/gov.sg/videos/10154383743583686/&show_text=0&width=560c                     | j                  t        j                  j                  | j	                  |            t
        j                               S r>  )r  r+  r,  unquoter  r   r  )r   r3   s     r   r  z$FacebookPluginsVideoIE._real_extract  s:    LL  !45! 	!r   N)r  r  r  r  r  r  r  r   r   r   r  r    sn    eJ _1%2%(AN#% ,
 22#& D Q+F4!r   r  c                       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&eed'd(d)gZd* Zy+),FacebookRedirectURLIEFz0https?://(?:[\w-]+\.)?facebook\.com/flx/warn[/?]zlhttps://www.facebook.com/flx/warn/?h=TAQHsoToz&u=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DpO8h3EaFRdo&s=1r&   pO8h3EaFRdor'   r"   r(   z.Tripeo Boiler Room x Dekmantel Festival DJ Setr)   z$md5:2d713ccbb45b686a1888397b2c77ca6b
channel_idUCGBpxWJr9FNOcFYA5GkKrMgplayable_in_embedT
categoriesMusicchannelzBoiler Roomr.   brtvofficialr*   tagszcount:11r/   i  live_statusnot_liver,   zre:https?://i\.ytimg\.com/vi/.+channel_urlz8https://www.youtube.com/channel/UCGBpxWJr9FNOcFYA5GkKrMgavailabilitypublicuploader_urlz(http://www.youtube.com/user/brtvofficial20150917r   )r+   	age_limitr0   r   zYoutube video is now privaterU   c                     t        t        |      j                  dd g      d         }|st        dd      | j	                  |      S )NuzInvalid facebook redirect URLTr   )r   r   r  r	   r  )r   r3   redirect_urls      r   r  z#FacebookRedirectURLIE._real_extract  sD    "8C=#4#4S4&#A"#EF !@4PP|,,r   N)r  r  r  IE_DESCr  r  r  r  r   r   r   r  r    s   GDJ}
-
5
 E
 A	

 4
  
 7)
 }
 >
 
 J
 
 :
 ;
 U
  H!
" F#
$ &+
. /3 F8-r   r  c                   B    e Zd ZdZdZddddddd	d
ddddeeddgZd Zy)FacebookReelIEz4https?://(?:[\w-]+\.)?facebook\.com/reel/(?P<id>\d+)zfacebook:reelz.https://www.facebook.com/reel/1195289147628387 aeb0153ecb2eaacdf2dc2bf88f593fef1195289147628387r"   u   9.7K views · 352 reactions | When your trying to help your partner out with an arrest and #FAAFO games begin. Let the “Slapathon” commence!! 👊👋 | Beast Camp Trainingz$md5:5a767dc7e78718667b150a7facc4a34fz9.7K views &#xb7; 352 reactions | When your trying to help your partner out with an arrest and #FAAFO games begin. Let the &#x201c;Slapathon&#x201d; commence!! &#x1f44a;&#x1f44b; | Beast Camp Training100040874179269g r(#@r$   iNa20211121)r&   r'   r(   r)   r*   r.   r/   r,   r-   r+   r   r   rP   c                 Z    | j                  |      }| j                  d| dt        |      S )Nz https://m.facebook.com/watch/?v=z&_rdr)r  r  r   )r   r3   r   s      r   r  zFacebookReelIE._real_extract  s3    >>#&.xj>
HV 	Vr   N)r  r  r  r  r  r  r  r  r   r   r   r  r    sS    HJG?1$ HA c,N#% 
 F&Vr   r  c                       e Zd ZdZdZddddddd	d
dddeddddddddddddddeddddddd d!d"d#ed$d%dd&d'd(d)d*d(d)gZd+d,d-d.d/Zd0 Zd1 Z	y2)3FacebookAdsIEzLhttps?://(?:[\w-]+\.)?facebook\.com/ads/library/?\?(?:[^#]+&)?id=(?P<id>\d+)zfacebook:adsz8https://www.facebook.com/ads/library/?id=899206155126718899206155126718r"   zvideo by Kandaoz$md5:0822724069e3aca97cbed5dabbab282eKandao774114102743284zhttps://facebook.com/KandaoVRijzer$   20231214)r&   r'   r(   r)   r*   r.   r  r-   r,   r+   r   rT   rU   z8https://www.facebook.com/ads/library/?id=501152689226254501152689226254zvideo by mat.nawrockiz$md5:02a446ace7ff8c3c37a2892922492490zmat.nawrocki148586968341456z)https://www.instagram.com/_u/mat.nawrockii˹f20240812)r&   r'   r(   r)   r*   r.   r  r,   r-   r+   r   ra   z8https://www.facebook.com/ads/library/?id=893637265423481893637265423481u@   Jusqu’à -25% sur une sélection de vins pétillants italiens zEataly Paris Marais2086668958314152z&https://facebook.com/EatalyParisMaraisiIpe20231226)r&   r(   r*   r.   r  r-   r+   r   rp   rq   z:https://es-la.facebook.com/ads/library/?id=901230958115569Tre   z6https://m.facebook.com/ads/library/?id=901230958115569)zsd-wmkzSD, watermarked)rX  N)zhd-wmkzHD, watermarked)rY  N)watermarked_video_sd_urlvideo_sd_urlwatermarked_video_hd_urlvideo_hd_urlc                     g }t        |t        j                  h fdf      D ]^  \  }}|j                   j                  |   d    j                  |   d   |d t        t         j                              |      d       ` |S )Nc                 F    |d   j                   v xr t        |d         S )Nr   r   )_FORMATS_MAPr   r   r   r   s     r   r   z0FacebookAdsIE._extract_formats.<locals>.<lambda>\  s'    qtt/@/@'@'V[QRSTQUEV r   r   r   r"   )ra  format_noter3   r'   rb  )r   r   itemsr  r,  r   tuple)r   
video_dictr/  
format_key
format_urls   `    r   _extract_formatszFacebookAdsIE._extract_formatsY  s    &2:ZZLV@
 ' 		"J
 NN!..z:1=#00<Q?!>9U4+<+<%=>zJ 		 r   c                 8     j                  |      } j                  ||      }t        t        j                  d|      dt
        j                  hf      }t        |dddddddddddddt        hf      }|st        d	      |j                  d
      }|r|dk(  rt        ddd|      }t        |ddt        hf      t        |dddddddfdddt        hd ht        f      }t        ||xs d dt        |dd hfdt        hfdt         hfdt"        hfdt$        hfdt$        hfd            }g }	t'        t        |d fdf      d       D ]y  \  }
}|	j)                  | d!|
 |j                  d
      xs |t        |dd      xs |j                  d"      t#        |j                  d#             j+                  |      d$       { t-        |	      d k(  r|j/                  |	d%          n)t-        |	      d kD  r|j/                  |	d%   d
   |	d&d'       ||d(<   |S ))Nr   .r   r   entryPointRoot
otherPropsdeeplinkAdCardsnapshotzUnable to extract ad datar(   z{{product.name}}display_format	page_namez by )delim	from_dictbody__mmarkupc                 ,    |d   j                        S )Nr   rM  )r   r   	markup_ids     r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>x  s    AaDOO\eLf r   __htmlc                 .    | j                  d       xr | S Nz
{{product.rM  r  s    r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>y  s    \8R4R4XWX r   r  link_descriptionc                 ,    | j                  d      s| S d S rE  rM  r  s    r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>  s    ALLQ]D^1 dh r   page_idpage_profile_urir  page_like_count)r)   r*   r.   r  r-   r   )videoscardsc                 B    t        fdj                  D              S )Nc              3   R   K   | ]  }t        j                  |               y wr>  )r   r  )rD  r7  r   s     r   rF  z@FacebookAdsIE._real_extract.<locals>.<lambda>.<locals>.<genexpr>  s     8jSTQUU1X9N8js   $')rH  r,  r-  s    `r   r   z-FacebookAdsIE._real_extract.<locals>.<lambda>  s    S8jX\XiXi8j5j r   r   r   r)   video_preview_image_url)r&   r(   r)   r,   r/  r   r#  )r(   r  _typer&   )r  r   r   r   r   r  loadsr   r   r	   r  r   r   r
   rH  r   r   r   r   r  r  r4  r  r  )r   r3   r   r  r	  r   r(   r@  r4   r  r  entryrB  s   `           @r   r  zFacebookAdsIE._real_extractg  s~   >>#&((h7 JJGQTWZ^ZdZdYeSfh	sCh	3Sl,<j4&%R S  !<==!!33!"2KvY]^E u'=>	iCc8X?fJ<*X)Y[^*` a  !>T!
 .1h0ij$se,%}5/+?)K=9,{m<
 
	 #L&(jk%mno
 		JC NN!
!C5)7+4u+E6;MNnR[R_R_`mRn(3L)MN007 		 w<1WQZ(\A G,"#  #	$r   N)
r  r  r  r  r  r  r  r,  r4  r  r   r   r   r  r    s    `JGI#&A ,;#N%
 $ J#,A&,GN#%
" J#f--D#%	
  L Hc4Fn %B$$A$	L8r   r  )'r  r   urllib.parser+  commonr   compatr   
networkingr   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  r  r  r   r   r   <module>rY     s}     	  ! ,   6     2P: P:f!] !D#-M #-LV] V8FM Fr   