§
    Çj¼_  ã                   óÖ  — d Z ddlZddlZddlZddlZddlZddlZddlmZ  e	ej
        d¦  «        rC	 ej
                             d¬¦  «         ej                             d¬¦  «         n# e$ r Y nw xY w ee¦  «                             ¦   «         j        Zedz  Zedz  Zed	z  d
z  Zed	z  dz  Zed	z  dz  Zed	z  dz  Ze                     dd¬¦  «         edz  Zedz  Zd„ Zd6d„Z G d„ d¦  «        Zedk    �rl ej        d¬¦  «        Z e  !                    dddgdd¬¦  «         e  !                    d d!d"¬#¦  «         e  !                    d$d!d%¬#¦  «         e  !                    d&e"dd'¬(¦  «         e  !                    d)e"dd*¬(¦  «         e  !                    d+d!d,¬#¦  «         e  #                    ¦   «         Z$ ee$j%        ¬-¦  «        Z&	 e$j'        rZe$j%        dk    re& (                    ¦   «          n*e& )                    d.¬/¦  «         e& *                    ¦   «           ej+        d¦  «         e& )                    e$j,        ¬/¦  «         e$j-        r<e$j-        Z.e.d0k    red1z  Z/n	ed2e.› d3�z  Z/e& 0                     e"e/¦  «        e.¦  «         n²e$j1        r)e& 2                    ¦   «         re& 3                    ¦   «          n‚e$j.        rSe& 4                    e$j.        ¦  «        r8e& 5                    e$j.        ¦  «         e& 6                    d4e$j.        › d5�¦  «         n(e& 2                    ¦   «         re& 3                    ¦   «          e& 7                    ¦   «          dS # e& 7                    ¦   «          w xY wdS )7zþ
youtube_studio_manager.py - Autonomous YouTube Channel Operations Suite
Supports:
  1. Playwright Chrome (Stealth) with user profile 'mirsixabcf2' + Custom Extension
  2. invisible_playwright (Patched Firefox C++ Engine) for extreme anti-bot protection
é    N)ÚPathÚreconfigureúutf-8©ÚencodingÚ	extensionzmetadata.jsonÚcontentÚthumbnails_4kÚ
thumbnailsÚ	videos_4kÚbrowser_profilesT©ÚparentsÚexist_okÚchrome_mirsixabcf2Úinvisible_firefoxc                  ó¢  — t                                ¦   «         rn	 t          t           dd¬¦  «        5 } t          j        | ¦  «        cddd¦  «         S # 1 swxY w Y   n)# t
          $ r}t          d|› �¦  «         Y d}~nd}~ww xY w	 ddlm} i }| 	                    ¦   «         D ]\  }}||t          |¦  «        <   Œ|S # t
          $ r i cY S w xY w)z9Loads standardized metadata from extension/metadata.json.Úrr   r   Nz#[!] Warning reading metadata.json: r   )ÚEPISODE_METADATA)ÚMETADATA_JSONÚexistsÚopenÚjsonÚloadÚ	ExceptionÚprintÚmain_automationr   ÚitemsÚstr)ÚfÚer   ÚresÚkÚvs         ú0C:\Projects\Historical\youtube_studio_manager.pyÚload_metadatar&   $   sQ  € å×ÒÑÔð =ð	=Ý•m S°7Ð;Ñ;Ô;ð $¸qÝ”y ‘|”|ð$ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $øåð 	=ð 	=ð 	=ÝÐ;¸Ð;Ð;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<øøøøð	=øøøðØ4Ð4Ð4Ð4Ð4Ð4ØˆØ$×*Ò*Ñ,Ô,ð 	ð 	‰DˆAˆqØˆC•�A‘”‰KˆKØˆ
øÝð ð ð Øˆ	ˆ	ˆ	ðøøøsL   ›A ²AÁA ÁAÁA ÁAÁA Á
BÁ)B Â BÂ	5B? Â?CÃCçš™™™™™é?ç       @c                 óT   — t          j        t          j        | |¦  «        ¦  «         dS )z,Simulates realistic human interaction delay.N)ÚtimeÚsleepÚrandomÚuniform)Úmin_secÚmax_secs     r%   Úhuman_delayr0   7   s$   € å„J�vŒ~˜g wÑ/Ô/Ñ0Ô0Ð0Ð0Ð0ó    c                   ón   — e Zd Zdd„Zdd„Zdd„Zdd„Zd„ Zdd	„Zd
„ Z	dd„Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚYouTubeStudioManagerÚchrome_stealthc                 óZ   — || _         d| _        d| _        d| _        d| _        d| _        dS )zÔ
        mode:
          - 'chrome_stealth': Uses real Google Chrome with profile mirsixabcf2 + custom Extension.
          - 'invisible_playwright': Uses patched Firefox (feder-cr/invisible_playwright).
        N)ÚmodeÚ
playwrightÚbrowserÚcontextÚpageÚip_launcher)Úselfr6   s     r%   Ú__init__zYouTubeStudioManager.__init__<   s5   € ð ˆŒ	ØˆŒØˆŒØˆŒØˆŒ	ØˆÔÐÐr1   Fc                 óD  — t          d¦  «         t          d¦  «         t          d| j                             ¦   «         › �¦  «         t          d|rdnd› �¦  «         t          d¦  «         | j        dk    r|                      |¦  «        S |                      |¦  «        S )NúF======================================================================uG   ðŸš€ KHá»žI Ä�á»˜NG Há»† THá»�NG QUáº¢N TRá»Š YOUTUBE STUDIO Tá»° HÃ€NHu      Ä�á»™ng cÆ¡: u      Cháº¿ Ä‘á»™ hiá»ƒn thá»‹: u   Headless (Cháº¡y ngáº§m)u   Visible (Cá»­a sá»•)Úinvisible_playwright)r   r6   ÚupperÚ_start_invisible_playwrightÚ_start_chrome_stealth)r<   Úheadlesss     r%   ÚstartzYouTubeStudioManager.startI   s£   € Ýˆh‰ŒˆÝÐWÑXÔXÐXÝÐ4 ¤§¢Ñ!2Ô!2Ð4Ð4Ñ5Ô5Ð5ÝÐrÈHÐ.pÐ.HÐ.HÐZpÐrÐrÑsÔsÐsÝˆh‰ŒˆàŒ9Ð.Ò.Ð.Ø×3Ò3°HÑ=Ô=Ð=à×-Ò-¨hÑ7Ô7Ð7r1   c                 ó&  — 	 ddl m} nF# t          $ r9 t          d¦  «         t	          j        t          j        › d�¦  «         ddl m} Y nw xY wt           	                    dd¬¦  «         t          d¦  «         t          dt          › �¦  «          |t          |d¬	¦  «        | _
        | j
                             ¦   «         | _        | j                             ¦   «         | _        | j                             d
ddœ¦  «         t          d¦  «         dS )Nr   )ÚInvisiblePlaywrightu@   [-] ChÆ°a cÃ i Ä‘áº·t invisible_playwright. Ä�ang cÃ i Ä‘áº·t...z$ -m pip install invisible-playwrightTr   uH   [1/3] Khá»Ÿi cháº¡y invisible_playwright (Firefox C++ Patched Engine)...z      Profile: )Úprofile_dirrD   Úhumanizeé   é„  ©ÚwidthÚheightuS   âœ“ invisible_playwright khá»Ÿi Ä‘á»™ng thÃ nh cÃ´ng vá»›i báº£o vá»‡ vÃ¢n tay C++!)r@   rG   ÚImportErrorr   ÚosÚsystemÚsysÚ
executableÚFIREFOX_STUDIO_PROFILEÚmkdirr;   Ú	__enter__r8   Únew_pager:   Úset_viewport_size)r<   rD   rG   s      r%   rB   z0YouTubeStudioManager._start_invisible_playwrightU   sB  € ð	AØ@Ð@Ð@Ð@Ð@Ð@Ð@øÝð 	Að 	Að 	AÝÐTÑUÔUÐUÝŒI�œÐMÐMÐMÑNÔNÐNØ@Ð@Ð@Ð@Ð@Ð@Ð@Ð@ð	Aøøøõ
 	×$Ò$¨T¸DÐ$ÑAÔAÐAÝÐYÑZÔZÐZÝÐ8Õ 6Ð8Ð8Ñ9Ô9Ð9à.Ð.Ý.ØØð
ñ 
ô 
ˆÔð
 Ô'×1Ò1Ñ3Ô3ˆŒØ”L×)Ò)Ñ+Ô+ˆŒ	ØŒ	×#Ò#¨d¸cÐ$BÐ$BÑCÔCÐCÝÐcÑdÔdÐdØˆts   ‚	 ‰A AÁAc                 ó¨  — 	 dd l }|                     g d¢¦  «        D ]‘}	 |j        d         rjd|j        d                              ¦   «         v rI|j                             d¦  «        pg }t          d„ |D ¦   «         ¦  «        r|                     ¦   «          Œ{# |j        |j        f$ r Y ŒŽw xY wn# t          $ r Y nw xY wddl
m}  |¦   «                              ¦   «         | _        t                               dd¬	¦  «         t!          d
¦  «         t!          dt          › �¦  «         t!          dt"          › �¦  «         ddt"                               ¦   «         › �dt"                               ¦   «         › �ddddddddg}| j        j                             t+          t                               ¦   «         ¦  «        d|d|dg¬¦  «        | _        | j        j        r| j        j        d         n| j                             ¦   «         | _        | j                             dddœ¦  «         | j                             d¦  «         t!          d¦  «         dS ) Nr   )ÚpidÚnameÚcmdliner[   Úchromer\   c              3   óB   K  — | ]}t          t          ¦  «        |v V — Œd S )N)r   ÚCHROME_STUDIO_PROFILE)Ú.0Úcs     r%   ú	<genexpr>z=YouTubeStudioManager._start_chrome_stealth.<locals>.<genexpr>t   s0   è è € ÐLÐLÀ1�sÕ#8Ñ9Ô9¸QÐ>ÐLÐLÐLÐLÐLÐLr1   )Úsync_playwrightTr   uH   [1/3] Khá»Ÿi cháº¡y Google Chrome Stealth vá»›i Profile 'mirsixabcf2'...z      Profile Dir: z      Extension:   ú--profile-directory=Defaultú--load-extension=z--disable-extensions-except=z---disable-blink-features=AutomationControlledz$--exclude-switches=enable-automationú--no-first-runú--no-default-browser-checkz--disable-infobarsz2--disable-features=IsolateOrigins,site-per-processz--lang=en-USz--window-size=1440,900zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36z--enable-automation)Úuser_data_dirÚchannelrD   Ú
user_agentÚargsÚignore_default_argsrJ   rK   rL   a  
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            });
            window.chrome = {
                runtime: {},
                loadTimes: function() {},
                csi: function() {},
                app: {}
            };
            Object.defineProperty(navigator, 'plugins', {
                get: () => [1, 2, 3, 4, 5]
            });
            Object.defineProperty(navigator, 'languages', {
                get: () => ['en-US', 'en', 'vi']
            });
        ul   âœ“ Google Chrome Stealth khá»Ÿi Ä‘á»™ng thÃ nh cÃ´ng vá»›i Extension tá»± lÃ m & chá»‘ng nháº­n diá»‡n Bot!)ÚpsutilÚprocess_iterÚinfoÚlowerÚgetÚanyÚkillÚNoSuchProcessÚAccessDeniedr   Úplaywright.sync_apirc   rE   r7   r_   rU   r   ÚEXTENSION_DIRÚresolveÚchromiumÚlaunch_persistent_contextr   r9   ÚpagesrW   r:   rX   Úadd_init_script)r<   rD   rm   ÚprocÚcmdrc   rk   s          r%   rC   z*YouTubeStudioManager._start_chrome_stealthl   sª  € ð	ØˆMˆMˆMØ×+Ò+Ð,FÐ,FÐ,FÑGÔGð ð �ðØ”y Ô(ð (¨X¸¼À6Ô9J×9PÒ9PÑ9RÔ9RÐ-RÐ-RØ"œiŸmšm¨IÑ6Ô6Ð<¸"˜ÝÐLÐLÈÐLÑLÔLÑLÔLð (Ø ŸIšI™KœK˜KøøØÔ,¨fÔ.AÐBð ð ð Ø�Dðøøøðøõ ð 	ð 	ð 	ØˆDð	øøøð 	8Ð7Ð7Ð7Ð7Ð7Ø)˜/Ñ+Ô+×1Ò1Ñ3Ô3ˆŒå×#Ò#¨D¸4Ð#Ñ@Ô@Ð@ÝÐYÑZÔZÐZÝÐ;Õ$9Ð;Ð;Ñ<Ô<Ð<ÝÐ3¥MÐ3Ð3Ñ4Ô4Ð4ð *Ø9¥× 5Ò 5Ñ 7Ô 7Ð9Ð9ØD­=×+@Ò+@Ñ+BÔ+BÐDÐDØ;Ø2ØØ(Ø Ø@ØØ$ð
ˆð ”Ô/×IÒIÝÕ3×;Ò;Ñ=Ô=Ñ>Ô>ØØð IØØ!6Ð 7ð Jñ 
ô 
ˆŒð .2¬\Ô-?Ð\�D”LÔ& qÔ)Ð)ÀTÄ\×EZÒEZÑE\ÔE\ˆŒ	ØŒ	×#Ò#¨d¸cÐ$BÐ$BÑCÔCÐCð 	Œ	×!Ò!ð #ñ 	ô 	ð 	õ$ 	Ð|Ñ}Ô}Ð}Øˆts5   ‚B0  A7BÂB0 ÂB,Â)B0 Â+B,Â,B0 Â0
B=Â<B=c                 óþ  — ddl }d}t          j                             |¦  «        st          j                             d¦  «        }d}|dt
                               ¦   «         › �ddt                               ¦   «         › �d	d
|g}t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         | 	                    |¦  «        }	 t          d¦  «         n# t          t          f$ r Y nw xY wt          d¦  «         t          dt
          › �¦  «         t          d¦  «         dS )a+  
        Launches official Google Chrome DIRECTLY without any automation flags,
        DevTools, or Playwright hooks.
        This guarantees 100% bypass of Google's 'This browser or app may not be secure' error,
        because it is literally the official Google Chrome running normally.
        r   Nz5C:\Program Files\Google\Chrome\Application\chrome.exez3%LOCALAPPDATA%\Google\Chrome\Application\chrome.exeú�https://accounts.google.com/ServiceLogin?service=youtube&continue=https%3A%2F%2Fstudio.youtube.com%2Fchannel%2FUClZnv08RDTD4vgLOw1jmOuA%2Fvideosz--user-data-dir=rd   re   rf   rg   úG
======================================================================uM   ðŸ”‘ KHá»žI CHáº Y GOOGLE CHROME NGUYÃŠN Báº¢N (100% KHÃ”NG AUTOMATION FLAGS)r?   uT   [*] Ä�ang má»Ÿ Google Chrome chÃ­nh chá»§ Ä‘á»ƒ báº¡n Ä‘Äƒng nháº­p an toÃ n 100%...uZ   [*] Google sáº½ KHÃ”NG THá»‚ phÃ¡t hiá»‡n bot vÃ¬ hoÃ n toÃ n khÃ´ng dÃ¹ng Playwright/CDP!u[   [*] Vui lÃ²ng Ä‘Äƒng nháº­p tÃ i khoáº£n mirsixabcf2@gmail.com trÃªn cá»­a sá»• vá»«a má»Ÿ.uR   [*] Sau khi Ä‘Äƒng nháº­p thÃ nh cÃ´ng vÃ  mÃ n hÃ¬nh hiá»ƒn thá»‹ YouTube Studio:ua       -> Báº¡n chá»‰ cáº§n nháº¥n phÃ­m [ENTER] trÃªn cá»­a sá»• nÃ y hoáº·c Ä‘Ã³ng trÃ¬nh duyá»‡t.zG======================================================================
uX   ðŸ‘‰ Nháº¥n [ENTER] sau khi báº¡n Ä‘Ã£ Ä‘Äƒng nháº­p thÃ nh cÃ´ng vÃ o YouTube Studio...uB   
âœ“ Ä�Ã£ ghi nháº­n phiÃªn Ä‘Äƒng nháº­p há»£p lá»‡ vÃ o profile:z   u\   âœ“ ToÃ n bá»™ Cookie, OAuth Token vÃ  App-Bound Encryption Ä‘Ã£ Ä‘Æ°á»£c lÆ°u vÄ©nh viá»…n!T)Ú
subprocessrP   Úpathr   Ú
expandvarsr_   rx   rw   r   ÚPopenÚinputÚEOFErrorÚKeyboardInterrupt)r<   r‚   Úchrome_pathÚ	login_urlr~   r}   s         r%   Úlogin_flow_nativez&YouTubeStudioManager.login_flow_native³   s¡  € ð 	ÐÐÐØNˆÝŒw�~Š~˜kÑ*Ô*ð 	eÝœ'×,Ò,Ð-cÑdÔdˆKð gˆ	ð Ø@Õ4×<Ò<Ñ>Ô>Ð@Ð@Ø)Ø9¥× 5Ò 5Ñ 7Ô 7Ð9Ð9ØØ(Øð
ˆõ 	ˆoÑÔÐÝÐ]Ñ^Ô^Ð^Ýˆh‰ŒˆÝÐdÑeÔeÐeÝÐjÑkÔkÐkÝÐkÑlÔlÐlÝÐbÑcÔcÐcÝÐqÑrÔrÐrÝˆoÑÔÐà×Ò Ñ$Ô$ˆð	ÝÐlÑmÔmÐmÐmøÝÕ+Ð,ð 	ð 	ð 	ØˆDð	øøøõ 	ÐSÑTÔTÐTÝÐ+Õ)Ð+Ð+Ñ,Ô,Ð,ÝÐlÑmÔmÐmØˆts   Ä!D1 Ä1EÅEé   c                 ó(  — d}t          d¦  «         t          d¦  «         t          d¦  «         t          d|› �¦  «         t          d¦  «         t          d¦  «         | j                             |¦  «         t          j        ¦   «         }|dz  }t          j        ¦   «         |z
  |k     r×| j        j                             ¦   «         }d	|v r‡d
|vrƒt          d¦  «         t          d¦  «         t          d| j        j        › �¦  «         t          d¦  «         t          d¦  «         t          j        d¦  «         |                      d¦  «         dS t          j        d¦  «         t          j        ¦   «         |z
  |k     °×t          d¦  «         dS )zFInteractive login flow for invisible_playwright or Playwright context.r€   r�   uH   ðŸ”‘ THIáº¾T Láº¬P Ä�Ä‚NG NHáº¬P 1 Láº¦N (ONE-TIME AUTHENTICATION SETUP)r?   u#   [*] Ä�ang Ä‘iá»�u hÆ°á»›ng Ä‘áº¿n: uW   [*] Vui lÃ²ng Ä‘Äƒng nháº­p tÃ i khoáº£n mirsixabcf2 trÃªn cá»­a sá»• trÃ¬nh duyá»‡t...ul   [*] Há»‡ thá»‘ng sáº½ tá»± Ä‘á»™ng phÃ¡t hiá»‡n khi báº¡n vÃ o YouTube Studio vÃ  lÆ°u phiÃªn vÄ©nh viá»…n.
é<   zstudio.youtube.comÚsigninue   
ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰u@   âœ“ PHÃ�T HIá»†N Ä�Ä‚NG NHáº¬P THÃ€NH CÃ”NG VÃ€O YOUTUBE STUDIO!u     URL Hiá»‡n Táº¡i: uL   âœ“ PhiÃªn Ä‘Äƒng nháº­p Ä‘Ã£ Ä‘Æ°á»£c ghi nháº­n vÃ o Profile vÄ©nh viá»…n!ud   ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰ðŸŽ‰é   z!downloads/studio_auth_success.pngTé   u/   
[-] Ä�Ã£ quÃ¡ thá»�i gian chá»� Ä‘Äƒng nháº­p.F)r   r:   Úgotor*   Úurlrp   r+   Úcapture_status)r<   Útimeout_minsrŠ   Ú
start_timeÚmax_durationÚcurrent_urls         r%   Ú
login_flowzYouTubeStudioManager.login_flowá   sˆ  € ð gˆ	ÝˆoÑÔÐÝÐXÑYÔYÐYÝˆh‰ŒˆÝÐ?°IÐ?Ð?Ñ@Ô@Ð@ÝÐgÑhÔhÐhÝÐ}Ñ~Ô~Ð~àŒ	�Š�yÑ!Ô!Ð!Ý”Y‘[”[ˆ
Ø# bÑ(ˆåŒi‰kŒk˜JÑ&¨Ò5Ð5Øœ)œ-×-Ò-Ñ/Ô/ˆKØ# {Ð2Ð2°xÀ{Ð7RÐ7RÝÐ(Ñ)Ô)Ð)ÝÐXÑYÔYÐYÝÐ<¨T¬Y¬]Ð<Ð<Ñ=Ô=Ð=ÝÐdÑeÔeÐeÝ�kÑ"Ô"Ð"Ý”
˜1‘”�Ø×#Ò#Ð$GÑHÔHÐHØ�tÝŒJ�q‰MŒMˆMõ Œi‰kŒk˜JÑ&¨Ò5Ð5õ 	Ð@ÑAÔAÐAØˆur1   c                 ó¢  — d}t          d|› d�¦  «         | j                             |dd¬¦  «         t          dd¦  «         | j        j        }d	|v sd
|                     ¦   «         v r/t          d¦  «         t          d¦  «         t          d¦  «         dS t          d| j                             ¦   «         › d| j        j        › d�¦  «         dS )zCNavigates to YouTube Studio Video List and verifies authentication.zBhttps://studio.youtube.com/channel/UClZnv08RDTD4vgLOw1jmOuA/videosu/   
[2/3] Ä�iá»�u hÆ°á»›ng Ä‘áº¿n YouTube Studio: ú...ÚdomcontentloadedéÈ¯  ©Ú
wait_untilÚtimeouté   rŒ   zaccounts.google.comr�   u7   
[!] PHIÃŠN Ä�Ä‚NG NHáº¬P CHÆ¯A CÃ“ TRONG PROFILE NÃ€Y.u>       Vui lÃ²ng cháº¡y: python youtube_studio_manager.py --loginuA       Ä‘á»ƒ hoÃ n táº¥t xÃ¡c thá»±c 1 láº§n duy nháº¥t cho profile.Fu   âœ“ Trang hiá»‡n táº¡i: ú (ú)T)r   r:   r’   r0   r“   rp   Útitle)r<   Ú
studio_urlr˜   s      r%   Úgoto_studioz YouTubeStudioManager.goto_studioÿ   sß   € àYˆ
ÝÐPÀÐPÐPÐPÑQÔQÐQØŒ	�Š�zÐ.@È%ˆÑPÔPÐPÝ�A�qÑÔÐà”i”mˆØ  KÐ/Ð/°8¸{×?PÒ?PÑ?RÔ?RÐ3RÐ3RÝÐLÑMÔMÐMÝÐRÑSÔSÐSÝÐUÑVÔVÐVØ�5åÐN¨¬¯ªÑ):Ô):ÐNÐN¸d¼i¼mÐNÐNÐNÑOÔOÐOØˆtr1   údownloads/studio_status.pngc                 óÆ   — t          j        t           j                             |¦  «        d¬¦  «         | j                             |¬¦  «         t          d|› �¦  «         |S )z6Captures a screenshot of the YouTube Studio dashboard.T)r   )rƒ   u*   ðŸ“¸ Ä�Ã£ chá»¥p áº£nh mÃ n hÃ¬nh Studio: )rP   Úmakedirsrƒ   Údirnamer:   Ú
screenshotr   )r<   Úout_paths     r%   r”   z#YouTubeStudioManager.capture_status  sZ   € å
Œ•B”G—O’O HÑ-Ô-¸Ð=Ñ=Ô=Ð=ØŒ	×Ò (ÐÑ+Ô+Ð+ÝÐE¸8ÐEÐEÑFÔFÐFØˆr1   c           	      ó¼  — t          d¦  «         	 | j                             dd¬¦  «         | j                             d¦  «                             ¦   «         }t          dt          |¦  «        › d�¦  «         t          |dd	…         ¦  «        D ]Œ\  }}	 |                     d
¦  «        j        }|                     ¦   «         r&| 	                    ¦   «          
                    ¦   «         nd}t          d|dz   › d|dd…         › �¦  «         Œ}# t          $ r Y Œ‰w xY wn)# t          $ r}t          d|› �¦  «         Y d}~nd}~ww xY w|                      d¦  «         dS )z5Reads recent video list and statuses from Studio DOM.uA   
[3/3] QuÃ©t danh sÃ¡ch video vÃ  tÃ¬nh tráº¡ng xá»­ lÃ½ kÃªnh...z#row-container, ytcp-video-rowi˜:  ©r    zytcp-video-row, #row-containeru   âœ“ TÃ¬m tháº¥y u'    video trÃªn trang quáº£n trá»‹ Studio.NrŒ   z #video-title, #entity-table-cellzN/Az  [é   z] rŽ   u*   [-] KhÃ´ng thá»ƒ quÃ©t chi tiáº¿t báº£ng: r§   )r   r:   Úwait_for_selectorÚlocatorÚallÚlenÚ	enumerateÚfirstÚ
is_visibleÚ
inner_textÚstripr   r”   )r<   ÚrowsÚir   Útitle_elÚ
title_textr!   s          r%   Úinspect_channelz$YouTubeStudioManager.inspect_channel  s¢  € åÐRÑSÔSÐSð	DàŒI×'Ò'Ð(HÐRWÐ'ÑXÔXÐXØ”9×$Ò$Ð%EÑFÔF×JÒJÑLÔLˆDÝÐW¥S¨¡Y¤YÐWÐWÐWÑXÔXÐXå! $ r¨ r¤(Ñ+Ô+ð ð ‘��1ðØ ŸyšyÐ)KÑLÔLÔR�HØBJ×BUÒBUÑBWÔBWÐ!b ×!4Ò!4Ñ!6Ô!6×!<Ò!<Ñ!>Ô!>Ð!>Ð]b�JÝÐ8  !¡Ð8Ð8 z°#°2°#¤Ð8Ð8Ñ9Ô9Ð9Ð9øÝ ð ð ð Ø�Dðøøøðøõ ð 	Dð 	Dð 	DÝÐB¸qÐBÐBÑCÔCÐCÐCÐCÐCÐCÐCøøøøð	Døøøð 	×ÒÐ9Ñ:Ô:Ð:Ð:Ð:s=   ‘BD ÂA6DÄD Ä
DÄD ÄDÄD Ä
EÄ(D?Ä?Ec           	      ód  — t          ¦   «         }|                     t          |¦  «        ¦  «        }|r|                     d¦  «        st          d|› �¦  «         dS |d         }d|› d�}t          d|› d|› d|› d	�¦  «         | j                             |d
d¬¦  «         t          dd¦  «         dS )z1Navigates to the Studio Edit page for an episode.Úvideo_idu+   [-] KhÃ´ng tÃ¬m tháº¥y video_id cho má»¥c: Fz!https://studio.youtube.com/video/z/editu8   
[*] Ä�iá»�u hÆ°á»›ng Ä‘áº¿n trang chá»‰nh sá»­a video [z] (ID: z): r›   rœ   r�   rž   r¡   rŒ   T)r&   rq   r   r   r:   r’   r0   )r<   Úep_keyÚmetadataÚmetar¿   Úedit_urls         r%   Úgoto_video_editz$YouTubeStudioManager.goto_video_edit,  sÏ   € å ‘?”?ˆØ�|Š|�C ™KœKÑ(Ô(ˆØð 	˜4Ÿ8š8 JÑ/Ô/ð 	ÝÐHÀÐHÐHÑIÔIÐIØ�5à˜
Ô#ˆØF°xÐFÐFÐFˆÝÐsÈ&ÐsÐsÐYaÐsÐsÐfnÐsÐsÐsÑtÔtÐtØŒ	�Š�xÐ,>ÈˆÑNÔNÐNÝ�A�qÑÔÐØˆtr1   c                 ó¾  — t          |¦  «        }t          d|› d�¦  «         d}| j                             ||¦  «        }|                     d¦  «        rOt          d|› d�¦  «         t          dd¦  «         | j                             d	¦  «         t          d
d¦  «         dS t          d|                     d¦  «        › d�¦  «         |                      |¦  «        S )zf
        Triggers the custom Chrome Extension's Auto-fill for a specific episode (or 'full').
        uA   
[*] KÃ­ch hoáº¡t Extension tá»± Ä‘á»™ng Ä‘iá»�n Metadata Má»¥c: r›   a°  
        (targetKey) => {
            const panel = document.getElementById('hv-panel') || document.getElementById('hv-studio-assistant');
            if (!panel) return { found: false, reason: 'panel_missing' };
            
            const select = document.getElementById('hv-preset-select');
            const autofillBtn = document.getElementById('hv-autofill-btn');
            if (!select || !autofillBtn) return { found: false, reason: 'elements_missing' };
            
            select.value = String(targetKey);
            select.dispatchEvent(new Event('change', { bubbles: true }));
            autofillBtn.click();
            return { found: true };
        }
        Úfoundu<   âœ“ Extension Ä‘Ã£ kÃ­ch hoáº¡t 1-Click Auto-Fill cho Táº­p u    thÃ nh cÃ´ng!r¡   rŒ   z°
            () => {
                const thumbBtn = document.getElementById('hv-upload-thumb-btn');
                if (thumbBtn) thumbBtn.click();
            }
            r‘   Tu$   [-] Extension UI chÆ°a sáºµn sÃ ng (Úreasonu*   ). Sá»­ dá»¥ng Playwright trá»±c tiáº¿p...)r   r   r:   Úevaluaterq   r0   Údirect_fill_metadata)r<   rÀ   Úep_strÚscript_checkr"   s        r%   Úauto_apply_extension_metadataz2YouTubeStudioManager.auto_apply_extension_metadata;  sù   € õ �V‘”ˆÝÐ^ÐSYÐ^Ð^Ð^Ñ_Ô_Ð_ðˆð Œi× Ò  ¨vÑ6Ô6ˆØ�7Š7�7ÑÔð 	5ÝÐgÐQWÐgÐgÐgÑhÔhÐhÝ˜˜1ÑÔÐàŒI×Òð  ñ ô ð õ ˜˜1ÑÔÐØ�4åÐv¸¿ºÀÑ9JÔ9JÐvÐvÐvÑwÔwÐwØ×,Ò,¨VÑ4Ô4Ð4r1   c                 ó°  — t          |¦  «        }t          ¦   «         }|                     |¦  «        }|st          d|› �¦  «         dS |                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }t          d|dd	…         › d
�¦  «         t          dt	          |¦  «        › d�¦  «         t          dt	          |¦  «        › d�¦  «         	 | j                             d¦  «        j        }|                     d¬¦  «        rc| 	                    ¦   «          | j        j
                             d¦  «         | j        j
                             |d¬¦  «         t          d¦  «         n)# t          $ r}	t          d|	› �¦  «         Y d}	~	nd}	~	ww xY w	 | j                             d¦  «        j        }
|
                     d¬¦  «        r]|
 	                    ¦   «          | j        j
                             d¦  «         | j                             d|¦  «         t          d¦  «         n)# t          $ r}	t          d|	› �¦  «         Y d}	~	nd}	~	ww xY w|                     d¦  «        }|rt          j                             |¦  «        s9|dk    rt          t$          dz  ¦  «        }nt          t$          d|› d�z  ¦  «        }t          j                             |¦  «        r›	 | j                             d¦  «        j        }|                     ¦   «         d k    r9|                     |¦  «         t          d!t+          |¦  «        j        › �¦  «         n)# t          $ r}	t          d"|	› �¦  «         Y d}	~	nd}	~	ww xY w	 t/          d#d$¦  «         | j                             d%¦  «        j        }|                     d¬¦  «        rW|                     ¦   «         s4| 	                    ¦   «          t          d&¦  «         t/          d#d$¦  «         nt          d'¦  «         n)# t          $ r}	t          d(|	› �¦  «         Y d}	~	nd}	~	ww xY wd)S )*z;Fills metadata directly via Playwright Shadow DOM locators.u+   [-] KhÃ´ng tÃ¬m tháº¥y metadata cho má»¥c: Fr¤   Ú ÚdescriptionÚtagsu     -> TiÃªu Ä‘á»�: NrŽ   r›   u     -> MÃ´ táº£:   u	    kÃ½ tá»±z  -> Tags:    u\   #textbox[aria-label*='tiÃªu Ä‘á»�'], #textbox[aria-label*='title'], #title-textarea #textboxéˆ  r®   z	Control+Aé   )Údelayu+     âœ“ Ä�Ã£ Ä‘iá»�n tiÃªu Ä‘á»� thÃ nh cÃ´ngu!     [-] Lá»—i Ä‘iá»�n tiÃªu Ä‘á»�: ue   #description-textarea #textbox, #textbox[aria-label*='mÃ´ táº£'], #textbox[aria-label*='description']aJ  
                (text) => {
                    const el = document.querySelector('#description-textarea #textbox');
                    if (el) {
                        el.innerText = text;
                        el.dispatchEvent(new Event('input', { bubbles: true }));
                    }
                }
                u6     âœ“ Ä�Ã£ Ä‘iá»�n mÃ´ táº£ kÃ¨m Chapters thÃ nh cÃ´ngu     [-] Lá»—i Ä‘iá»�n mÃ´ táº£: Ú
thumb_pathÚfullzfull_movie_thumb_4k.jpgÚepz_thumb_4k.jpgz6input#file-loader, input[type='file'][accept*='image']r   u#     âœ“ Ä�Ã£ náº¡p Thumbnail 4K UHD: u     [-] Lá»—i upload thumbnail: r¡   rŒ   uP   #save, ytcp-button#save-button, button:has-text('LÆ°u'), button:has-text('Save')u6     âœ“ Ä�Ã£ báº¥m nÃºt [LÆ¯U] thay Ä‘á»•i thÃ nh cÃ´ng!uP     [*] NÃºt LÆ°u Ä‘ang á»Ÿ tráº¡ng thÃ¡i khÃ´ng Ä‘á»•i (Ä‘Ã£ lÆ°u tá»« trÆ°á»›c).u     [-] Lá»—i khi báº¥m LÆ°u: T)r   r&   rq   r   r³   r:   r±   rµ   r¶   ÚclickÚkeyboardÚpressÚtyper   rÈ   rP   rƒ   r   ÚTHUMBNAILS_4K_DIRÚcountÚset_input_filesr   r[   r0   Úis_disabled)r<   rÀ   rÊ   rÁ   rÂ   r¤   ÚdescrÐ   Ú	title_boxr!   Údesc_boxrÔ   Úthumb_inputÚsave_btns                 r%   rÉ   z)YouTubeStudioManager.direct_fill_metadatac  sÕ  € å�V‘”ˆÝ ‘?”?ˆØ�|Š|˜FÑ#Ô#ˆØð 	ÝÐHÀÐHÐHÑIÔIÐIØ�5à—’˜ "Ñ%Ô%ˆØ�xŠx˜ rÑ*Ô*ˆØ�xŠx˜ Ñ#Ô#ˆåÐ2 5¨¨"¨¤:Ð2Ð2Ð2Ñ3Ô3Ð3ÝÐ6¥# d¡)¤)Ð6Ð6Ð6Ñ7Ô7Ð7ÝÐ3�s 4™yœyÐ3Ð3Ð3Ñ4Ô4Ð4ð	;Øœ	×)Ò)ð  +Iñ  Jô  Jô  PˆIØ×#Ò#¨DÐ#Ñ1Ô1ð EØ—’Ñ!Ô!Ð!Ø”	Ô"×(Ò(¨Ñ5Ô5Ð5Ø”	Ô"×'Ò'¨°RÐ'Ñ8Ô8Ð8ÝÐCÑDÔDÐDøøÝð 	;ð 	;ð 	;ÝÐ9°aÐ9Ð9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:øøøøð	;øøøð	8Ø”y×(Ò(ð  *Qñ  Rô  Rô  XˆHØ×"Ò"¨4Ð"Ñ0Ô0ð PØ—’Ñ Ô Ð Ø”	Ô"×(Ò(¨Ñ5Ô5Ð5Ø”	×"Ò"ð $ð ñô ð õ ÐNÑOÔOÐOøøÝð 	8ð 	8ð 	8ÝÐ6°1Ð6Ð6Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7øøøøð	8øøøð —X’X˜lÑ+Ô+ˆ
Øð 	Q¥¤§¢°
Ñ!;Ô!;ð 	Qà˜ÒÐÝ Õ!2Ð5NÑ!NÑOÔO�
�
å Õ!2Ð5O¸&Ð5OÐ5OÐ5OÑ!OÑPÔP�
åŒ7�>Š>˜*Ñ%Ô%ð 	<ð<Ø"œi×/Ò/Ð0hÑiÔiÔo�Ø×$Ò$Ñ&Ô&¨Ò*Ð*Ø×/Ò/°
Ñ;Ô;Ð;ÝÐWÅÀZÑ@PÔ@PÔ@UÐWÐWÑXÔXÐXøøÝð <ð <ð <ÝÐ:°qÐ:Ð:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;øøøøð<øøøð	6Ý˜˜1ÑÔÐØ”y×(Ò(Ð){Ñ|Ô|ô  CˆHØ×"Ò"¨4Ð"Ñ0Ô0ð nØ×+Ò+Ñ-Ô-ð nØ—N’NÑ$Ô$Ð$ÝÐRÑSÔSÐSÝ  1Ñ%Ô%Ð%Ð%åÐlÑmÔmÐmøøÝð 	6ð 	6ð 	6ÝÐ4°Ð4Ð4Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5øøøøð	6øøøð ˆtsd   Ã'BF  Æ 
F&Æ
F!Æ!F&Æ*BH= È=
I#ÉIÉI#Ë5A0M& Í&
NÍ0NÎNÎBP- Ð-
QÐ7QÑQc                 ót  — t          |¦  «        }|                     ¦   «         st          d|› �¦  «         dS |                     ¦   «         j        dz  }t          ddz   ¦  «         t          d|j        › d|d›d	�¦  «         t          d¦  «         |                      ¦   «         sdS 	 | j                             d
¦  «        j	        }| 
                    ¦   «          t          dd¦  «         | j                             d¦  «        j	        }| 
                    ¦   «          t          dd¦  «         | j                             d¦  «        j	        }|                     t          |                     ¦   «         ¦  «        ¦  «         t          d|j        › d�¦  «         | j                             dd¬¦  «         t          d¦  «         t          dd¦  «         |                      |¦  «         | j                             d¦  «        j	        }|                     d¬¦  «        r#| 
                    ¦   «          t          d¦  «         t          dd¦  «         |                      d|› d�¦  «         t          d¦  «         dS # t&          $ r2}	t          d|	› �¦  «         |                      d¦  «         Y d }	~	dS d }	~	ww xY w)!zó
        Automates end-to-end video uploading:
        1. Clicks Create -> Upload videos
        2. Sets video file
        3. Fills metadata (title, desc, tags, thumbnail)
        4. Selects 'Not made for kids'
        5. Saves video
        u#   [-] File video khÃ´ng tá»“n táº¡i: Fi   ú
r?   u+   ðŸ“¤ Báº®T Ä�áº¦U QUY TRÃŒNH UPLOAD VIDEO: r¢   z.1fz MB)uG   #create-icon, button[aria-label*='Create'], button[aria-label*='Táº¡o']r¯   r‘   uY   tp-yt-paper-item:has-text('Upload videos'), tp-yt-paper-item:has-text('Táº£i video lÃªn')r¡   zinput[type='file']u   âœ“ Ä�Ã£ Ä‘Æ°a file u     vÃ o luá»“ng táº£i lÃªn Studio!z#title-textarea, #textboxi`ê  r®   u5   âœ“ Há»™p thoáº¡i chi tiáº¿t video Ä‘Ã£ hiá»ƒn thá»‹.rŒ   zptp-yt-paper-radio-button[name='NOT_MADE_FOR_KIDS'], tp-yt-paper-radio-button[name='VIDEO_MADE_FOR_KIDS_NOT_MFK']rÑ   u?   âœ“ Ä�Ã£ chá»�n: KhÃ´ng dÃ nh cho tráº» em (Not made for kids).zdownloads/upload_progress_ú.pnguE   âœ“ Quy trÃ¬nh upload & Ä‘iá»�n chi tiáº¿t Ä‘Ã£ hoÃ n táº¥t an toÃ n!Tu$   [-] Lá»—i trong quÃ¡ trÃ¬nh upload: zdownloads/upload_error.pngN)r   r   r   ÚstatÚst_sizer[   r¦   r:   r±   rµ   r×   r0   rÝ   r   rx   r°   rÌ   r¶   r”   r   )
r<   Ú
video_pathrÀ   Ú
video_fileÚfile_size_mbÚ
create_btnÚupload_itemÚ
file_inputÚnot_for_kidsr!   s
             r%   Úupload_videoz!YouTubeStudioManager.upload_video´  sí  € õ ˜*Ñ%Ô%ˆ
Ø× Ò Ñ"Ô"ð 	ÝÐD¸
ÐDÐDÑEÔEÐEØ�5à!—’Ñ(Ô(Ô0°KÑ@ˆÝˆe�hÑÑÔÐÝÐe¸J¼OÐeÐeÈ|ÐeÐeÐeÐeÑfÔfÐfÝˆh‰Œˆà×ÒÑ!Ô!ð 	Ø�5ð$	Øœ×*Ò*Ð+tÑuÔuÔ{ˆJØ×ÒÑÔÐÝ˜˜1ÑÔÐàœ)×+Ò+ð  -Hñ  Iô  Iô  OˆKØ×ÒÑÔÐÝ˜˜1ÑÔÐð œ×*Ò*Ð+?Ñ@Ô@ÔFˆJØ×&Ò&¥s¨:×+=Ò+=Ñ+?Ô+?Ñ'@Ô'@ÑAÔAÐAÝÐZ¨¬ÐZÐZÐZÑ[Ô[Ð[ð ŒI×'Ò'Ð(CÈUÐ'ÑSÔSÐSÝÐIÑJÔJÐJÝ˜˜1ÑÔÐð ×.Ò.¨vÑ6Ô6Ð6ð  œ9×,Ò,ð  .`ñ  aô  aô  gˆLØ×&Ò&¨tÐ&Ñ4Ô4ð YØ×"Ò"Ñ$Ô$Ð$ÝÐWÑXÔXÐXå˜˜1ÑÔÐØ×ÒÐ I¸VÐ IÐ IÐ IÑJÔJÐJÝÐYÑZÔZÐZØ�4øåð 	ð 	ð 	ÝÐ<¸Ð<Ð<Ñ=Ô=Ð=Ø×ÒÐ <Ñ=Ô=Ð=Ø�5�5�5�5�5øøøøð	øøøs   Â(GI; É;
J7Ê'J2Ê2J7c                 ó~  — t          d¦  «         	 | j        r| j                             ¦   «          | j        r| j                             ¦   «          t          | d¦  «        r#| j        r| j                             ddd¦  «         t          d¦  «         dS # t          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w)zCloses browser session cleanly.u&   
[*] Ä�ang Ä‘Ã³ng phiÃªn Playwright...r;   Nu0   âœ“ Ä�Ã£ giáº£i phÃ³ng tÃ i nguyÃªn sáº¡ch sáº½.u   [-] Lá»—i khi Ä‘Ã³ng: )	r   r9   Úcloser7   ÚstopÚhasattrr;   Ú__exit__r   )r<   r!   s     r%   rò   zYouTubeStudioManager.closeñ  sæ   € åÐ7Ñ8Ô8Ð8ð		0ØŒ|ð %Ø”×"Ò"Ñ$Ô$Ð$ØŒð 'Ø”×$Ò$Ñ&Ô&Ð&Ý�t˜]Ñ+Ô+ð <°Ô0@ð <ØÔ ×)Ò)¨$°°dÑ;Ô;Ð;ÝÐDÑEÔEÐEÐEÐEøÝð 	0ð 	0ð 	0ÝÐ.¨1Ð.Ð.Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøð	0øøøs   ‘BB Â
B<ÂB7Â7B<N)r4   )F)rŒ   )r§   )Ú__name__Ú
__module__Ú__qualname__r=   rE   rB   rC   r‹   r™   r¦   r”   r½   rÄ   rÌ   rÉ   rð   rò   © r1   r%   r3   r3   ;   s  € € € € € ð ð  ð  ð  ð
8ð 
8ð 
8ð 
8ðð ð ð ð.Eð Eð Eð EðN,ð ,ð ,ð\ð ð ð ð<ð ð ð"ð ð ð ð;ð ;ð ;ð*ð ð ð&5ð &5ð &5ðPOð Oð Oðb;ð ;ð ;ðz0ð 0ð 0ð 0ð 0r1   r3   Ú__main__z*YouTube Studio Autonomous Management Suite)rÏ   z--moder4   r@   z(Browser engine (default: chrome_stealth))ÚchoicesÚdefaultÚhelpz--loginÚ
store_truez7Launch interactive 1-time login to authenticate profile)Úactionrý   z--statusz&Check channel and recent videos statusz--epz4Episode key ('1'..'8' or 'full') to autofill or edit)rÚ   rü   rý   z--uploadz-Upload specified episode ('1'..'8' or 'full')z
--headlessz%Run headlessly without opening window)r6   F)rD   rÕ   z"Forgotten_Battles_1785_Full_4K.mp4rÖ   z_4k.mp4zdownloads/studio_ep_ræ   )r'   r(   )8Ú__doc__rP   rR   r*   r   r,   ÚargparseÚpathlibr   rô   Ústdoutr   Ústderrr   Ú__file__rx   ÚparentÚPROJECT_DIRrw   r   rÛ   ÚTHUMBNAILS_DIRÚVIDEOS_4K_DIRÚPROFILES_DIRrU   r_   rT   r&   r0   r3   rö   ÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsrk   r6   ÚmanagerÚloginr‹   rE   r™   ÚexitrD   ÚuploadrÖ   Úv_pathrð   Ústatusr¦   r½   rÄ   rÌ   r”   rò   rù   r1   r%   ú<module>r     sÃ  ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð ð €7ˆ3Œ:�}Ñ%Ô%ð ðØŒ
×Ò¨ÐÑ0Ô0Ð0ØŒ
×Ò¨ÐÑ0Ô0Ð0Ð0øØð ð ð Øˆðøøøð ˆd�8‰nŒn×$Ò$Ñ&Ô&Ô-€Ø˜kÑ)€Ø Ñ/€Ø )Ñ+¨oÑ=Ð Ø˜yÑ(¨<Ñ7€Ø˜iÑ'¨+Ñ5€Ø˜YÑ&Ð);Ñ;€Ø × Ò ˜4¨$Ð Ñ /Ô /Ð /à$Ð';Ñ;Ð Ø%Ð(;Ñ;Ð ðð ð ð&1ð 1ð 1ð 1ðB0ð B0ð B0ð B0ð B0ñ B0ô B0ð B0ðH ˆzÒÑØ$ˆXÔ$Ð1]Ð^Ñ^Ô^€FØ
×Ò˜Ð+;Ð=SÐ*TÐ^nØGð ñ Iô Ið Ià
×Ò˜	¨,ØVð ñ Xô Xð Xà
×Ò˜
¨<ØEð ñ Gô Gð Gà
×Ò˜ S°$ØSð ñ Uô Uð Uà
×Ò˜
¨°dØLð ñ Nô Nð Nà
×Ò˜¨\ØDð ñ Fô Fð Fà×ÒÑÔ€Dð #Ð"¨¬	Ð2Ñ2Ô2€Gð!àŒ:ð 	ØŒyÐ,Ò,Ð,Ø×)Ò)Ñ+Ô+Ð+Ð+à—’ u�Ñ-Ô-Ð-Ø×"Ò"Ñ$Ô$Ð$ØˆCŒH�Q‰KŒKˆKð 	�Š˜tœ}ˆÑ-Ô-Ð-àŒ;ð 	*Ø”ˆBØ�VŠ|ˆ|Ø&Ð)MÑM��à&Ð)9¨bÐ)9Ð)9Ð)9Ñ9�Ø× Ò    V¡¤¨bÑ1Ô1Ð1Ð1ØŒ[ð 
	*Ø×"Ò"Ñ$Ô$ð *Ø×'Ò'Ñ)Ô)Ð)øØŒWð 	*Ø×&Ò& t¤wÑ/Ô/ð MØ×5Ò5°d´gÑ>Ô>Ð>Ø×&Ò&Ð'K¸d¼gÐ'KÐ'KÐ'KÑLÔLÐLøð ×"Ò"Ñ$Ô$ð *Ø×'Ò'Ñ)Ô)Ð)ð 	�Š‰Œˆˆˆøˆ�Š‰Œˆˆøøøðg Ðs   ³6A* Á*A2Á1A2Ç	E1M ÍM&