+
    öÙ†jÏl  ã            
      óú  a€ 0 t $ ^ RIHt ^ RIt^ RIt^ RIHt ^ RIHtH	t	H
t
 ^RIHtHtHt ^RIHtHtHtHtHt ^RIHt ]P,                  t^RIHtHtHtHt ]! ^4      w  tttR	 R
 lt R R lt!]"! . RNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(N]PF                  R8X  d   R)MR*OR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NR8NR9NR:NR;NR<NR=NR>NR?NR@NRAN]$! ]%]! ^ ^4      4       U u. uF  q R8w  g   K  V R3NK  	  up ,           ]$! ]%]! ^€R4      4       U u. uF  q PM                  4       '       g   K  V R3NK   	  up ,           . RBO,           4      t'R](R&   ]! RR7       ! R R4      4       t)R# u up i u up i )Cé    )ÚannotationsN)Úcontextmanager)Ú	dataclassÚfieldÚfields)ÚcommandsÚconsoleÚinput)ÚwlenÚ	unbracketÚdisp_strÚ
gen_colorsÚTHEME)Útrace)ÚCallbackÚSimpleContextManagerÚKeySpecÚCommandNamec               ó   € V ^8„  d   QhRR/# )é   Úreturnúdict[str, int]© )Úformats   "Ú%/usr/lib/python3.14/_pyrepl/reader.pyÚ__annotate__r   ,   s   € ÷ ñ  >ñ ó    c                 ó  € / p \        \        \        R 4      4       F  p\        W&   K  	  \        \        \        R 4      4       Uu. uF  q"P	                  4       '       g   K  VNK  	  up F  p\
        W&   K  	  \        ;V R&   V R&   V # u upi )é   Ú
Ú )ÚmapÚchrÚrangeÚSYNTAX_SYMBOLÚisalnumÚSYNTAX_WORDÚSYNTAX_WHITESPACE)ÚstÚcÚas      r   Úmake_default_syntax_tabler,   ,   st   € à€BÜ””e˜C“jÖ!ˆÜˆ‹ñ "äœS¤%¨£*Ô-Ó=Ñ-�A·±·�aˆaÑ-Ô=ˆÜˆ‹ñ >ä*Ð*€B€t�Hˆr�#‰wØ€Iùò >s   ÁB
Á"B
c               ó   € V ^8„  d   QhRR/# )r   r   z dict[CommandName, type[Command]]r   )r   s   "r   r   r   7   s   € ÷ ñ Ð?ñ r   c                 ó\  € / p \        \        4      P                  4        Fˆ  p\        V\        4      '       g   K  \        V\        4      '       g   K3  VP                  ^ ,          P                  4       '       g   K\  WVP                  &   WVP                  P                  RR4      &   KŠ  	  V # )r   Ú_Ú-)
Úvarsr   ÚvaluesÚ
isinstanceÚtypeÚ
issubclassÚCommandÚ__name__ÚislowerÚreplace)ÚresultÚvs     r   Úmake_default_commandsr<   7   sy   € Ø/1€FÜ”(‹^×"Ñ"Ö$ˆÜ�aœ×Ô¤:¨a´×#9Ô#9¸a¿j¹jÈ½m×>SÑ>S×>UÔ>UØ!"�1—:‘:ÑØ34�1—:‘:×%Ñ% c¨3Ó/Ó0ñ %ð €Mr   Úwin32úself-insertÚ\r   ú'tuple[tuple[KeySpec, CommandName], ...]Údefault_keymapT)Úslotsc                  ó:  € ] tR t^†t$ RtR]R&   ]! ]R7      tR]R&   ^ t	R]R&   R	t
R
]R&   RtR
]R&   RtR
]R&   RtR
]R&   ]! ]R7      tR]R&   RtR
]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   ]! ]R7      tR]R&   RtR ]R!&   ]! ]R7      tR"]R#&   RtR$]R%&   ]! RR&7      tR']R(&   ]! ]R7      tR)]R*&   ]! ]R7      tR]R+&   ]! RR&7      tR,]R-&   ]! RR&7      tR.]R/&   ]! RR&7      tR.]R0&   ]! ]R7      t R]R1&   Rt!R]R2&   Rt"R3]R4&   ]# ! R5 R64      4       t$]! ]$R7      t%R6]R7&   R8 R9 lt&R: R; lt'R< R= lt(])R> R? l4       t*R€R@ RA llt+R€RB RC llt,R€RD RE llt-R€RF RG llt.RH RI lt/RJ RK lt0R�RL RM llt1RN RO lt2RP RQ lt3RR RS lt4RT RU lt5RV RW lt6RX RY lt7RZ R[ lt8R\ R] lt9R^ R_ lt:R` Ra lt;Rb Rc lt<]=Rd Re l4       t>]=Rf Rg l4       t?Rh Ri lt@R‚Rj Rk lltARl Rm ltBRn Ro ltCRp Rq ltDRr Rs ltERƒRt Ru lltFRv Rw ltGR€Rx Ry lltHRz R{ ltIR| R} ltJR~tKR# )„ÚReaderaÆ  The Reader class implements the bare bones of a command reader,
handling such details as editing and cursor motion.  What it does
not support are such things as completion or history support -
these are implemented elsewhere.

Instance variables of note include:

  * buffer:
    A per-character list containing all the characters that have been
    entered. Does not include color information.
  * console:
    Hopefully encapsulates the OS dependent stuff.
  * pos:
    A 0-based index into 'buffer' for where the insertion point
    is.
  * screeninfo:
    A list of screen position tuples. Each list element is a tuple
    representing information on visible line length for a given line.
    Allows for efficient skipping of color escape sequences.
  * cxy, lxy:
    the position of the insertion point in screen ...
  * syntax_table:
    Dictionary mapping characters to 'syntax class'; read the
    emacs docs to see what this means :-)
  * commands:
    Dictionary mapping command names to command classes.
  * arg:
    The emacs-style prefix argument.  It will be None if no such
    argument has been provided.
  * dirty:
    True if we need to refresh the display.
  * kill_ring:
    The emacs-style kill-ring; manipulated with yank & yank-pop
  * ps1, ps2, ps3, ps4:
    prompts.  ps1 is the prompt for a one-line input; for a
    multiline input it looks like:
        ps2> first line of input goes here
        ps3> second and further
        ps3> lines get ps3
        ...
        ps4> and the last one gets ps4
    As with the usual top-level, you can set these to instances if
    you like; str() will be called on them (once) at the beginning
    of each command.  Don't put really long or newline containing
    strings here, please!
    This is just the default policy; you can change it freely by
    overriding get_prompt() (and indeed some standard subclasses
    do).
  * finished:
    handle1 will set this to a true value if a command signals
    that we're done.
zconsole.Consoler	   ©Údefault_factoryú	list[str]ÚbufferÚintÚposz->> ÚstrÚps1z/>> Úps2z|.. Úps3z\__ Úps4zlist[list[str]]Ú	kill_ringÚ ÚmsgNú
int | NoneÚargFÚboolÚdirtyÚfinishedÚ
paste_modezdict[str, type[Command]]r   ztype[Command] | NoneÚlast_commandr   Úsyntax_tableztuple[tuple[str, str], ...]Úkeymap©Úinitúinput.KeymapTranslatorÚinput_transzlist[input.KeymapTranslator]Úinput_trans_stackÚscreenúlist[tuple[int, list[int]]]Ú
screeninfoútuple[int, int]ÚcxyÚlxyÚscheduled_commandsÚcan_colorizeúCallback | NoneÚthreading_hookc                  óò   € ] tR t^Ût$ ]! ]R7      tR]R&   ]! RR7      tR]R&   ]! ]R7      t	R]R	&   ]! RR7      t
R
]R&   ]! RR7      tR]R&   ]! RR7      tR]R&   RtR]R&   R R ltR R ltR R ltRtR# )ÚReader.RefreshCacherE   rG   ra   Fr\   rb   rc   z	list[int]Úline_end_offsetsrI   rJ   rd   re   Ú
dimensionsrU   Úinvalidatedc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   ÚreaderrD   ra   rG   rc   rb   r   ÚNoner   )r   s   "r   r   Ú Reader.RefreshCache.__annotate__å   s1   € ÷ 
	%ñ 
	%Ø!'ð
	%à!*ð
	%ð &Að
	%ð ñ	
	%r   c                	ó  € VP                  4       V n        VP                  4       V n        VP                  V n        VP                  V n        VP
                  P                  VP
                  P                  3V n        R V n	        R# ©FN)
Úcopyra   rc   rJ   re   r	   ÚwidthÚheightrn   ro   )Úselfrq   ra   rc   s   &&&&r   Úupdate_cacheÚ Reader.RefreshCache.update_cacheå   s]   € ð
 !Ÿ+™+›-ˆDŒKØ(Ÿo™oÓ/ˆDŒOØ—z‘zˆDŒHØ—z‘zˆDŒHØ$Ÿn™n×2Ñ2°F·N±N×4IÑ4IÐIˆDŒOØ$ˆDÖr   c               ó    € V ^8„  d   QhRRRR/# )r   rq   rD   r   rU   r   )r   s   "r   r   rs   ñ   s   € ÷ 	*ñ 	* ð 	*¨4ñ 	*r   c                	ó¬   € V P                   '       d   R # VP                  P                  VP                  P                  3pW P                  8g  pV'       * # ©F)ro   r	   rw   rx   rn   )ry   rq   rn   Údimensions_changeds   &&  r   ÚvalidÚReader.RefreshCache.validñ   sE   € Ø××ÐÙØŸ™×-Ñ-¨v¯~©~×/DÑ/DÐDˆJØ!+¯©Ñ!>ÐØ)Ô)Ð)r   c               ó    € V ^8„  d   QhRRRR/# )r   rq   rD   r   rd   r   )r   s   "r   r   rs   ø   s   € ÷ 	,ñ 	,¨fð 	,¸ñ 	,r   c                	ó   € V P                   '       d   \        R 4      h^ p\        VP                  V P                  4      p\	        V P
                  4      pV^ 8”  d0   V P
                  V^,
          ,          pW28”  d    W$3# V^,          pK6  ^ pW$3# )zCache is invalidated)ro   Ú
ValueErrorÚminrJ   Úlenrm   )ry   rq   ÚoffsetÚearliest_common_posÚnum_common_liness   &&   r   Úget_cached_locationÚ'Reader.RefreshCache.get_cached_locationø   s’   € Ø××ÐÜ Ð!7Ó8Ð8ØˆFÜ"% f§j¡j°$·(±(Ó";ÐÜ" 4×#8Ñ#8Ó9ÐØ" QÔ&Ø×.Ñ.Ð/?À!Õ/CÕD�Ø&Ô/Øð Ð+Ð+ð ! AÕ%Ò à�ØÐ+Ð+r   )re   rn   ro   rJ   ra   rc   N)r7   Ú
__module__Ú__qualname__Ú__firstlineno__r   Úlistra   Ú__annotations__rc   rm   rJ   re   rn   ro   rz   r€   rŠ   Ú__static_attributes__r   r   r   ÚRefreshCacherl   Û   s|   ‡ á!°$Ô7ˆ�	Ó7Ù27¸UÔ2Cˆ
Ð/ÓCÙ&+¸DÔ&AÐ˜)ÓAÙ˜eÔ$ˆˆSÓ$Ù$¨%Ô0ˆˆ_Ó0Ù&+°Ô&7ˆ
�OÓ7Ø!ˆ�TÓ!õ
	%õ	*÷	,ñ 	,r   r’   Úlast_refresh_cachec               ó   € V ^8„  d   QhRR/# ©r   r   rr   r   )r   s   "r   r   ÚReader.__annotate__	  s   € ÷ 4ñ 4˜tñ 4r   c                	óÜ  € V P                  4       V n        \        P                  ! V P                  R RR7      V n        ^ . 3.V n        V P                  4       V n        V P                  ^ 3V n	        \        P                  ! 4       V n        V P
                  V P                  n        V P                  V P                  n        V P                  V P                  n        RV P                  n        R# )úinvalid-keyr>   ©Úinvalid_clsÚcharacter_clsN)r   r   )Úcollect_keymapr[   r
   ÚKeymapTranslatorr_   rc   Úpos2xyre   rJ   rf   Ú	_colorizerh   r“   rn   ©ry   s   &r   Ú__post_init__ÚReader.__post_init__	  s²   € ð ×)Ñ)Ó+ˆŒÜ ×1Ò1Ø�K‰K ]À-ô
ˆÔð ˜r˜7˜)ˆŒØ—;‘;“=ˆŒØ—H‘H˜a�=ˆŒÜ%×2Ò2Ó4ˆÔà-1¯_©_ˆ×ÑÔ*Ø&*§h¡hˆ×ÑÔ#Ø&*§h¡hˆ×ÑÔ#Ø-3ˆ×ÑÖ*r   c               ó   € V ^8„  d   QhRR/# )r   r   r@   r   )r   s   "r   r   r–     s   € ÷ ñ Ð Gñ r   c                	ó   € \         # ©N)rA   r    s   &r   rœ   ÚReader.collect_keymap  s   € ÜÐr   c               ó   € V ^8„  d   QhRR/# )r   r   rG   r   )r   s   "r   r   r–     s   € ÷ gñ g˜Yñ gr   c                ó2	  € ^ p^ pV P                   P                  V 4      '       d   V P                   P                  V 4      w  r!V P                   P                  pW1R1 V P                   P                  pWAR1 V P                   P
                  pWQR1 V P                  pWb,          pT;'       d    V P                  V^,
          ,          R8g  pV P                  '       d$   \        \        V P                  4       4      4      pMRp\        RVR7       RP                  V P                  VR 4      P                  R4      p	Rp
^ p\        W‘4       EF·  w  rÍ\!        V4      p^ Tu;8:  d   V8:  d   M MWl3V n        Rp
M.V
'       d'   V^,          pW°P$                  P&                  8”  d    EM`V'       d   RpRpM%T P)                  YÎTu;8¬  ;'       d    ^ 8¬  Mu 4      pRV9   dM   VP+                  R4      w  pppVP-                  V4       VP-                  V4       VP-                  ^ . 34       KS  Wn^,           ,          pV P/                  V4      w  pp\1        WØV4      w  pp\3        V4      V,           V P$                  P4                  ,          pV^ 8X  g	   V'       g^   W.^,           ,          pVP-                  V4       VP-                  VRP                  V4      ,           4       VP-                  VV34       EK¬  TpTp\7        V^,           4       Fñ  p^ p^ pV F@  pVV,           V,           V P$                  P4                  8¼  d    MV^,          pVV,          pKB  	  \!        V4      V8”  d   VV,          pRp^.pMVV^,           ,          pRp. pVP-                  V4       VRP                  VRV 4      ,           V,           pVRV V,           pVP-                  V4       VP-                  VV34       VVR pVVR pRp^ pKó  	  EKº  	  W@n        V P9                  4       V n        V P<                  '       dG   V P<                  P                  R4       F'  p VP-                  V 4       VP-                  ^ . 34       K)  	  V P                   P?                  WV4       V# )	zETranslate changes in self.buffer into changes in self.console.screen.Nr    zcolors = {colors})ÚcolorsrQ   FTr?   ) r“   r€   rŠ   ra   rc   rm   rJ   rH   rh   r�   r   Úget_unicoder   ÚjoinÚsplitÚ	enumerater†   rf   r	   rx   Ú
get_promptÚ	partitionÚappendÚprocess_promptr   Úsumrw   r$   rž   re   rR   rz   )!ry   r‰   r‡   ra   rc   Úlast_refresh_line_end_offsetsrJ   Úprompt_from_cacher©   ÚlinesÚcursor_foundÚlines_beyond_cursorÚlnÚlineÚline_lenÚpromptÚ
pre_promptr/   Ú
prompt_lenÚcharsÚchar_widthsÚ	wrapcountÚpreÚprelenÚwrapÚindex_to_wrap_beforeÚcolumnÚ
char_widthÚpostÚafterÚrenderÚrender_widthsÚmlines!   &                                r   Úcalc_screenÚReader.calc_screen  s*  € ð ÐØˆØ×"Ñ"×(Ñ(¨×.Ò.Ø'+×'>Ñ'>×'RÑ'RÐSWÓ'XÑ$ˆFà×(Ñ(×/Ñ/ˆØÑ$Ð%à×,Ñ,×7Ñ7ˆ
ØÑ(Ð)à(,×(?Ñ(?×(PÑ(PÐ%Ø)Ñ*;Ð<à�h‰hˆØ�ˆà#×GÐG¨¯©°F¸QµJÕ(?À4Ñ(GÐà××ÐÜœ* T×%5Ñ%5Ó%7Ó8Ó9‰FàˆFÜÐ!¨&Õ1Ø—‘˜Ÿ™ F GÐ,Ó-×3Ñ3°DÓ9ˆØˆØÐÜ! %×:‰HˆBÜ˜4“yˆHØ�CÖ#˜8×#Ø˜7�”Ø#‘ßØ# qÕ(Ð#Ø&¯©×)<Ñ)<Ô<ò ß à$)Ð!Ø‘àŸ™¨¸×-AÔ-AÀÔ-AÓB�Ø˜&”.Ø(.×(8Ñ(8¸Ó(>Ñ%�
˜A˜vØ-×4Ñ4°VÔ<Ø—‘˜jÔ)Ø×!Ñ! 1 b 'Ö*Ø˜a•<ÕˆCØ!%×!4Ñ!4°VÓ!<ÑˆF�JÜ!)¨$¸Ó!?ÑˆE�;Ü˜[Ó)¨JÕ6¸4¿<¹<×;MÑ;MÕMˆIØ˜AŒ~§[Ø Q�,Õ&�Ø-×4Ñ4°VÔ<Ø—‘˜f r§w¡w¨u£~Õ5Ô6Ø×!Ñ! :¨{Ð";×<à�Ø#�Ü! )¨a¥-Ö0�DØ+,Ð(Ø�FÛ&1˜
Ø! JÕ.°Õ7¸4¿<¹<×;MÑ;MÔMÙ!Ø,°Õ1Ð,Ø *Õ,šñ	 '2ô
 ˜5“zÐ$8Ô8ØÐ"6Õ6˜Ø#˜Ø!" ™àÐ"6¸Õ":Õ:˜Ø!˜Ø "˜Ø1×8Ñ8¸Ô@Ø  2§7¡7¨5Ð1FÐ2FÐ+GÓ#HÕHÈ4ÕO�FØ$/Ð0EÐ1EÐ$FÈÕ$N�MØ—M‘M &Ô)Ø×%Ñ% v¨}Ð&=Ô>Ø!Ð"6Ð"7Ð8�EØ"-Ð.BÐ.CÐ"D�KØ�CØ’Fô1 1ñE ;ðv %ŒØ—;‘;“=ˆŒØ�8�8ˆ8ØŸ™Ÿ™¨Ö-�Ø—‘˜eÔ$Ø×!Ñ! 1 b 'Ö*ñ .ð 	×Ñ×,Ñ,¨T¸:ÔFØˆr   c               ó    € V ^8„  d   QhRRRR/# )r   r»   rK   r   ztuple[str, int]r   )r   s   "r   r   r–   ˆ  s   € ÷ 	0ñ 	0˜sð 	0 ñ 	0r   c                óP   € \        V RR7      p\        V RR7      pV\        V4      3# )zõReturn a tuple with the prompt string and its visible length.

The prompt string has the zero-width brackets recognized by shells
(\x01 and \x02) removed.  The length ignores anything between those
brackets as well as any ANSI escape sequences.
F)Úincluding_contentT)r   r   )r»   Ú
out_promptÚvisible_prompts   &  r   r±   ÚReader.process_prompt‡  s,   € ô ˜v¸Ô?ˆ
Ü" 6¸TÔBˆØœ4 Ó/Ð/Ð/r   c               ó    € V ^8„  d   QhRRRR/# ©r   ÚprS   r   rI   r   )r   s   "r   r   r–   “  s   € ÷ ñ �Zð ¨3ñ r   c                óR  € Vf   V P                   pV P                  pV P                  pV^,          pV^ 8¼  d1   VP                  W1,          \        4      \        8w  d   V^,          pK7  V^ 8¼  d1   VP                  W1,          \        4      \        8X  d   V^,          pK7  V^,           # )z™Return the 0-based index of the word break preceding p most
immediately.

p defaults to self.pos; word boundaries are determined using
self.syntax_table.)rJ   rZ   rH   Úgetr'   ©ry   rÖ   r)   Úbs   &&  r   ÚbowÚ
Reader.bow“  s€   € ð Š9Ø—‘ˆAØ×ÑˆØ�K‰KˆØ	ˆQ�ˆØ�1Œf˜Ÿ™ ¥¤kÓ2´kÔAØ��FŠAØ�1Œf˜Ÿ™ ¥¤kÓ2´kÔAØ��FŠAØ�1�uˆr   c               ó    € V ^8„  d   QhRRRR/# rÕ   r   )r   s   "r   r   r–   ¤  s   € ÷ ñ �Zð ¨3ñ r   c                óV  € Vf   V P                   pV P                  pV P                  pV\        V4      8  d1   VP	                  W1,          \
        4      \
        8w  d   V^,          pK@  V\        V4      8  d1   VP	                  W1,          \
        4      \
        8X  d   V^,          pK@  V# )z™Return the 0-based index of the word break following p most
immediately.

p defaults to self.pos; word boundaries are determined using
self.syntax_table.)rJ   rZ   rH   r†   rØ   r'   rÙ   s   &&  r   ÚeowÚ
Reader.eow¤  s{   € ð Š9Ø—‘ˆAØ×ÑˆØ�K‰KˆØ”#�a“&Œj˜RŸV™V A¥D¬+Ó6¼+ÔEØ��FŠAØ”#�a“&Œj˜RŸV™V A¥D¬+Ó6¼+ÔEØ��FŠAØˆr   c               ó    € V ^8„  d   QhRRRR/# rÕ   r   )r   s   "r   r   r–   ´  s   € ÷ ñ �Zð ¨3ñ r   c                óœ   € Vf   V P                   pV P                  pV^,          pV^ 8¼  d   W!,          R8w  d   V^,          pK  V^,           # )zaReturn the 0-based index of the line break preceding p most
immediately.

p defaults to self.pos.r    )rJ   rH   ©ry   rÖ   rÚ   s   && r   ÚbolÚ
Reader.bol´  sE   € ð
 Š9Ø—‘ˆAØ�K‰KˆØ	ˆQ�ˆØ�1Œf˜� œØ��FŠAØ�1�uˆr   c               ó    € V ^8„  d   QhRRRR/# rÕ   r   )r   s   "r   r   r–   Á  s   € ÷ 
ñ 
�Zð 
¨3ñ 
r   c                óŽ   € Vf   V P                   pV P                  pV\        V4      8  d   W!,          R8w  d   V^,          pK(  V# )zaReturn the 0-based index of the line break following p most
immediately.

p defaults to self.pos.r    )rJ   rH   r†   rã   s   && r   ÚeolÚ
Reader.eolÁ  s<   € ð
 Š9Ø—‘ˆAØ�K‰KˆØ”#�a“&Œj˜Q�T Tœ\Ø��FŠAØˆr   c               ó    € V ^8„  d   QhRRRR/# )r   ÚyrI   r   r   )r   s   "r   r   r–   Í  s   € ÷ Bñ B˜Cð B Cñ Br   c                ó†   € V P                   V,          ^ ,          \        V P                   V,          ^,          4      ,           # )z#Return the last x-offset for line y)rc   r²   )ry   rë   s   &&r   Ú
max_columnÚReader.max_columnÍ  s.   € à�‰˜qÕ! !Õ$¤s¨4¯?©?¸1Õ+=¸aÕ+@Ó'AÕAÐAr   c               ó   € V ^8„  d   QhRR/# )r   r   rI   r   )r   s   "r   r   r–   Ñ  s   € ÷ (ñ (˜ñ (r   c                	ó:   € \        V P                  4      ^,
          # ©é   )r†   rc   r    s   &r   Úmax_rowÚReader.max_rowÑ  s   € Ü�4—?‘?Ó# aÕ'Ð'r   c               ó    € V ^8„  d   QhRRRR/# )r   ÚdefaultrI   r   r   )r   s   "r   r   r–   Ô  s   € ÷ ñ ˜sð ¨3ñ r   c                ó:   € V P                   f   V# V P                   # )zmReturn any prefix argument that the user has supplied,
returning 'default' if there is None.  Defaults to 1.
)rT   )ry   rö   s   &&r   Úget_argÚReader.get_argÔ  s   € ð �8‰8ÒØˆNØ�x‰xˆr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚlinenorI   Úcursor_on_linerU   r   rK   r   )r   s   "r   r   r–   Ü  s!   € ÷ ñ  ð °dð ¸sñ r   c                óæ  € V P                   e   V'       d   RV P                    R2pM‘V P                  '       d   RpM|RV P                  9   d`   V^ 8X  d   V P                  pMWV P                  '       d-   WP                  P                  R4      8X  d   V P                  pMV P                  pMV P                  pV P                  '       d'   \        4       pVP                   V VP                   2pV# )z@Return what should be in the left-hand margin for line
'lineno'.z(arg: z) z(paste) r    )rT   rX   rH   rM   rO   ÚcountrN   rL   rh   r   r»   Úreset)ry   rû   rü   r»   Úts   &&&  r   r®   ÚReader.get_promptÜ  s¶   € ð �8‰8Ò§NØ˜dŸh™h˜Z rÐ*‰FØ�_�_ˆ_Ø‰FØ�T—[‘[Ô Ø˜Œ{ØŸ™‘Ø——�˜f¯©×(9Ñ(9¸$Ó(?Ô?ØŸ™‘àŸ™‘à—X‘XˆFà××ÐÜ“ˆAØŸ™�z & ¨!¯'©'¨Ð3ˆFØˆr   c               ó    € V ^8„  d   QhRRRR/# )r   Úitransr^   r   rr   r   )r   s   "r   r   r–   ò  s   € ÷ "ñ "Ð'=ð "À$ñ "r   c                	ó\   € V P                   P                  V P                  4       Wn        R # r¥   )r`   r°   r_   )ry   r  s   &&r   Úpush_input_transÚReader.push_input_transò  s"   € Ø×Ñ×%Ñ% d×&6Ñ&6Ô7Ø!Ör   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   ö  s   € ÷ 8ñ 8 ñ 8r   c                	óD   € V P                   P                  4       V n        R # r¥   )r`   Úpopr_   r    s   &r   Úpop_input_transÚReader.pop_input_transö  s   € Ø×1Ñ1×5Ñ5Ó7ˆÖr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚxrI   rë   r   rr   r   )r   s   "r   r   r–   ù  s!   € ÷ ñ  ð ¨ð °ñ r   c                ó8  € ^ p^ pWB8  d|   V P                   V,          w  rV\        V4      pV\        V4      ,           V P                  P                  8¬  pV'       d   W7^,
          ,          pMW7^,           ,          pV^,          pK�  ^ p	V P                   V,          ^ ,          p
W¡8  dm   V P                   V,          ^,          V	,          ^ 8X  d   V	^,          p	K7  W P                   V,          ^,          V	,          ,          p
V	^,          p	V^,          pKr  W0n        R# )z%Set pos according to coordinates x, yN)rc   r†   r²   r	   rw   rJ   )ry   r  rë   rJ   Úir½   r¿   r‡   Úin_wrapped_lineÚjÚcur_xs   &&&        r   Úsetpos_from_xyÚReader.setpos_from_xyù  sä   € àˆØˆØŒeØ&*§o¡o°aÕ&8Ñ#ˆJÜ˜Ó%ˆFØ(¬3¨{Ó+;Õ;¸t¿|¹|×?QÑ?QÑQˆOßØ •zÕ!‘à •zÕ!�Ø��FŠAàˆØ—‘ Õ" 1Õ%ˆØŒiØ�‰˜qÕ! !Õ$ QÕ'¨1Ô,Ø�Q•�ÙØ—_‘_ QÕ'¨Õ*¨1Õ-Õ-ˆEØ��FˆAØ�1�HŠCàŽr   c               ó   € V ^8„  d   QhRR/# )r   r   rd   r   )r   s   "r   r   r–     s   € ÷ 6ñ 6˜ñ 6r   c                óš  € ^ ^ r!. pV P                   p^ Tu;8:  d   \        V P                  4      8:  g   Q h Q hV\        V P                  4      8X  d`   \        V P                  4      ^ 8”  dF   \        V P                  4      ^,
          pV P                  V,          w  rV\	        V4      ,           V3# V P                   Ft  w  r\        V4      pV\	        V4      ,           V P
                  P                  8¬  pV'       d
   V^,          pWT8¼  d    M&V'       g
   V^,          pWE,          pV^,          pKv  	  V\	        VRV 4      ,           V3# )z.Return the x, y coordinates of position 'pos'.N)rJ   r†   rH   rc   r²   r	   rw   )ry   r½   rë   r¿   rJ   r‡   r  s   &      r   rž   ÚReader.pos2xy  s  € ð ˜1�AØ!#ˆØ�h‰hˆØ�CÖ+œ3˜tŸ{™{Ó+Ô+Ð+Ñ+Ð+Ð+ð ”#�d—k‘kÓ"Ô"¤s¨4¯?©?Ó';¸aÔ'?Ü�D—O‘OÓ$ qÕ(ˆAØ&*§o¡o°aÕ&8Ñ#ˆJØ¤ KÓ 0Õ0°!Ð3Ð3à'+§¤Ñ#ˆJÜ˜Ó%ˆFØ(¬3¨{Ó+;Õ;¸t¿|¹|×?QÑ?QÑQˆOßØ˜!•�àŒ}Ùç"Ø˜!•�à�MˆCØ��FŠAñ (7ð œC ¨D¨SÐ 1Ó2Õ2°AÐ5Ð5r   c               ó    € V ^8„  d   QhRRRR/# )r   Útextzstr | list[str]r   rr   r   )r   s   "r   r   r–   1  s   € ÷ ñ ˜?ð ¨tñ r   c                ó°   € \        V4      V P                  V P                  V P                  % V ;P                  \        V4      ,          un        RV n        R# )z%Insert 'text' at the insertion point.TN)r�   rH   rJ   r†   rV   )ry   r  s   &&r   ÚinsertÚReader.insert1  s7   € ä+/°«:ˆ�‰�D—H‘H˜tŸx™xÐ(Ø�Š”C˜“IÕ�ØˆŽ
r   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   7  s   € ÷ ,ñ ,˜tñ ,r   c                ó¼   € V P                  4       V n        \        RV P                  V P                  R7       V P                  P
                  ! V P                  !   R# )z.Move the cursor to reflect changes in self.poszupdate_cursor({pos}) = {cxy})rJ   re   N)rž   re   r   rJ   r	   Úmove_cursorr    s   &r   Úupdate_cursorÚReader.update_cursor7  s:   € à—;‘;“=ˆŒÜÐ,°$·(±(ÀÇÁÕIØ�‰× Ò  $§(¡(Ô+r   c               ó    € V ^8„  d   QhRRRR/# )r   Úcmdr6   r   rr   r   )r   s   "r   r   r–   =  s   € ÷ ñ  ð ¨Tñ r   c                óh   € \        VRR4      '       d   V P                  e   RV n        RV n        R# R# )z6This function is called to allow post command cleanup.Úkills_digit_argTN)ÚgetattrrT   rV   ©ry   r#  s   &&r   Úafter_commandÚReader.after_command=  s/   € ä�3Ð)¨4×0Ò0Ø�x‰xÒ#Ø!�”
ØˆDŽHñ 1r   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   D  s   € ÷ #ñ #˜ñ #r   c                ó~  €  V P                   P                  4        RV n        RV n        V P                  R ^ V n        RV n        RV n        V P                  4        T P                  '       d0   T P                  P                  4       pT P                  T. 34       KA  R#   \         d    T P                  4        h i ; i)z~Get ready to run.  Call restore when finished.  You must not
write to the console in between the calls to prepare and
restore.NF:NNNT)r	   ÚpreparerT   rW   rH   rJ   rV   rY   rÌ   ÚBaseExceptionÚrestorerg   r	  Údo_cmdr'  s   & r   r,  ÚReader.prepareD  s¦   € ð	Ø�L‰L× Ñ Ô"ØˆDŒHØ!ˆDŒMØ—‘˜A�ØˆDŒHØˆDŒJØ $ˆDÔØ×ÑÔð
 ×%×%Ð%Ø×)Ñ)×-Ñ-Ó/ˆCØ�K‰K˜˜b˜	Ö"ñ &øô	 ô 	Ø�L‰LŒNØð	ús   ‚AB ÂB<c               ó    € V ^8„  d   QhRRRR/# )r   Úclsr4   r   rU   r   )r   s   "r   r   r–   Y  s   € ÷ 2ñ 2 4ð 2¨Dñ 2r   c                	óT   € V P                   '       g   R # \        WP                   4      # r~   )rY   r5   )ry   r2  s   &&r   Úlast_command_isÚReader.last_command_isY  s"   € Ø× × Ð ÙÜ˜#×0Ñ0Ó1Ð1r   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   ^  s   € ÷ ñ ˜ñ r   c                ó:   € V P                   P                  4        R# )zClean up after a run.N)r	   r.  r    s   &r   r.  ÚReader.restore^  s   € à�‰×ÑÖr   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r–   c  s   € ÷ 	ñ 	Ð-ñ 	r   c           	   #  óf  "  € \        V 4       Uu/ uF"  qP                  \        WP                  4      bK$  	  pp V P                  4        Rx € R F  p\	        WW#,          4       K  	  V P                  4        R# u upi   R F  p\	        YY#,          4       K  	  T P                  4        i ; i5i)z0A context manager to delegate to another reader.N)rR   rL   rM   rN   rO   rX   )r   Únamer&  r.  Úsetattrr,  )ry   ÚfÚ
prev_staterT   s   &   r   ÚsuspendÚReader.suspendb  s‹   é € ô >DÀD¼\ÓJ¹\¸—f‘fœg d¯F©FÓ3Ò3¹\ˆ
ÐJð	Ø�L‰LŒNÛãH�Ü˜ :¥?Ö3ñ Ià�L‰LŽNùò Køó
 I�Ü˜ :¥?Ö3ñ Ià�L‰L�Nüs&   ‚B1�(A<¸B1»B Á2B1Â-B.Â.B1c               ó   € V ^8„  d   QhRR/# r:  r   )r   s   "r   r   r–   o  s   € ÷ 1ñ 1Ð&:ñ 1r   c              #  	ób   "  €  V P                   pR V n         Rx € Wn         R#   XT n         i ; i5iru   )rh   )ry   Úold_can_colorizes   & r   Úsuspend_colorizationÚReader.suspend_colorizationn  s0   é € ð	1Ø#×0Ñ0ÐØ %ˆDÔÛà 0ÖøÐ 0ˆDÕüs   ‚/„# ›/£	,¬/c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   x  s   € ÷ ñ ˜ñ r   c                ó   € R# )z2Called when a command signals that we're finished.Nr   r    s   &r   ÚfinishÚReader.finishx  s   € ár   c               ó    € V ^8„  d   QhRRRR/# )r   rR   rK   r   rr   r   )r   s   "r   r   r–   |  s   € ÷ ñ ˜ð ¨$ñ r   c                	ór   € R V,           R,           V n         RV n        V P                  P                  4        R# )z! r!   TN)rR   rV   r	   Úbeep)ry   rR   s   &&r   ÚerrorÚReader.error|  s)   € Ø˜#•: Õ#ˆŒØˆŒ
Ø�‰×ÑÖr   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   �  s   € ÷ ñ ˜tñ r   c                	óN   € V P                   '       d   V P                  4        R # R # r¥   )rV   Úrefreshr    s   &r   Úupdate_screenÚReader.update_screen�  s   € Ø�:�:ˆ:Ø�L‰LŽNñ r   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   …  s   € ÷ ñ ˜ñ r   c                óž   € V P                  4       V n        V P                  P                  V P                  V P                  4       RV n        R# )z#Recalculate and refresh the screen.FN)rÌ   ra   r	   rR  re   rV   r    s   &r   rR  ÚReader.refresh…  s7   € ð ×&Ñ&Ó(ˆŒØ�‰×Ñ˜TŸ[™[¨$¯(©(Ô3ØˆŽ
r   c               ó    € V ^8„  d   QhRRRR/# )r   r#  ztuple[str, list[str]]r   rr   r   )r   s   "r   r   r–   Œ  s   € ÷ ñ Ð/ð °Dñ r   c                óÈ  € \        RVR7       \        V^ ,          \        4      '       d3   V P                  P	                  V^ ,          \        P
                  4      pM)\        V^ ,          \        4      '       d   V^ ,          pMR# V! V .VO5!  pVP                  4        V P                  V4       V P                  '       d   V P                  4        MV P                  4        \        V\        P                  4      '       g   W n        \        VP                  4      V n        V P                   '       d-   V P"                  P                  4        V P                  4        R# R# )z¥`cmd` is a tuple of "event_name" and "event", which in the current
implementation is always just the "buffer" which happens to be a list
of single-character strings.zreceived command {cmd})r#  N)r   r3   rK   r   rØ   Úinvalid_commandr4   Údor(  rV   rR  r   Ú	digit_argrY   rU   rI  rW   r	   )ry   r#  Úcommand_typeÚcommands   &&  r   r/  ÚReader.do_cmdŒ  sñ   € ô
 	Ð&¨CÕ0Ü�c˜!•fœc×"Ò"ØŸ=™=×,Ñ,¨S°­V´X×5MÑ5MÓN‰LÜ˜˜A�¤×%Ò%Ø˜q�6‰Láá˜tÐ* cÓ*ˆØ�
‰
Œà×Ñ˜7Ô#à�:�:ˆ:Ø�L‰L�Nà×ÑÔ ä˜#œx×1Ñ1×2Ò2Ø ,Ôä˜WŸ^™^Ó,ˆŒØ�=�=ˆ=Ø�L‰L×ÑÔ!Ø�K‰KŽMñ r   c               ó   € V ^8„  d   QhRR/# r•   r   )r   s   "r   r   r–   «  s   € ÷ ñ ˜4ñ r   c                	ó  € V P                   pVf$   R\        P                  9   d   ^RIHp V! V 4       Ve	    V! 4        V P                  P                  pV'       d    V! 4        R # R #   \
         d     L7i ; i  \
         d     R # i ; i)NÚ	threading)Úinstall_threading_hook)rj   ÚsysÚmodulesÚ_threading_handlerrc  Ú	Exceptionr	   Ú
input_hook)ry   rj   rc  rh  s   &   r   Ú	run_hooksÚReader.run_hooks«  s„   € Ø×,Ñ,ˆØÒ! k´S·[±[Ô&@ÝBÙ" 4Ô(ØÒ%ðÙÔ ð —\‘\×,Ñ,ˆ
ßðÙ–ñ øô	 ô Ùðûô ô Úðús#   ¹A* ÁA; Á*A8Á7A8Á;B
Â	B
c               ó    € V ^8„  d   QhRRRR/# )r   ÚblockrU   r   r   )r   s   "r   r   r–   ½  s   € ÷ )ñ )˜Tð )¨Tñ )r   c                ó¢  € V P                   '       d   RV n         RV n         V P                  4        V P                  P	                  ^d4       V P                  P                  RR7      pV'       g   V'       d   KZ  R# RpVP                  R8X  d   V P                  P                  V4       MFVP                  R8X  d   V P                  4        M$VP                  R8X  d   V P                  4        MRpV'       d   V P                  P                  4       pMVP                  VP                  .pVf   V'       d   EK  R# V P                  V4       R# )zHandle a single event.  Wait as long as it takes if block
is true (the default), otherwise return False if no event is
pending.rQ   TF©rl  ÚkeyÚscrollÚresize)rR   rV   ri  r	   ÚwaitÚ	get_eventÚevtr_   ÚpushrR  rØ   Údatar/  )ry   rl  ÚeventÚ	translater#  s   &&   r   Úhandle1ÚReader.handle1½  s÷   € ð
 �8�8ˆ8ØˆDŒHØˆDŒJàà�N‰NÔØ�L‰L×Ñ˜cÔ"Ø—L‘L×*Ñ*°Ð*Ó7ˆEßßÙÙàˆIà�y‰y˜EÔ!Ø× Ñ ×%Ñ% eÕ,Ø—‘˜hÔ&Ø—‘•Ø—‘˜hÔ&Ø—‘•à!�	çØ×&Ñ&×*Ñ*Ó,‘à—y‘y %§*¡*Ð-�àŠ{ßÚÙà�K‰K˜ÔÙr   c               ó    € V ^8„  d   QhRRRR/# )r   Úcharzint | bytesr   rr   r   )r   s   "r   r   r–   è  s   € ÷ "ñ "˜kð "¨dñ "r   c                	ó`   € V P                   P                  V4       V P                  R R7       R# )Frn  N)r	   Ú	push_charry  )ry   r|  s   &&r   r~  ÚReader.push_charè  s"   € Ø�‰×Ñ˜tÔ$Ø�‰˜5ˆÖ!r   c               ó    € V ^8„  d   QhRRRR/# )r   Ústartup_hookri   r   rK   r   )r   s   "r   r   r–   ì  s   € ÷ ñ  _ð Àñ r   c                ó  € V P                  4         Ve   V! 4        V P                  4        V P                  '       g   V P                  4        K$  V P	                  4       V P                  4        #   T P                  4        i ; i)z|Read a line.  The implementation of this method also shows
how to drive Reader if you want more control over the event
loop.)r,  rR  rW   ry  rª   r.  )ry   r�  s   &&r   ÚreadlineÚReader.readlineì  sY   € ð 	�‰Œð		ØÒ'Ù”Ø�L‰LŒNØ—m—m�mØ—‘–Ø×#Ñ#Ó%ð �L‰L�NøˆD�L‰L�Nús   ’,A1 ¿!A1 Á1Bc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úspecr   r^  r   r   rr   r   )r   s   "r   r   r–   ü  s!   € ÷ 
ñ 
˜ð 
¨;ð 
¸4ñ 
r   c                	óŠ   € V P                   W33,           V n         \        P                  ! V P                   R RR7      V n        R# )r˜   r>   r™   N)r[   r
   r�   r_   )ry   r†  r^  s   &&&r   ÚbindÚReader.bindü  s5   € Ø—k‘k d _Ð$6Õ6ˆŒÜ ×1Ò1Ø�K‰K ]À-ô
ˆÖr   c               ó   € V ^8„  d   QhRR/# )r   r   rK   r   )r   s   "r   r   r–     s   € ÷ $ñ $˜Sñ $r   c                ó8   € RP                  V P                  4      # )z.Return the current buffer as a unicode string.rQ   )r«   rH   r    s   &r   rª   ÚReader.get_unicode  s   € à�w‰w�t—{‘{Ó#Ð#r   )rT   rh   re   rV   rW   r_   r[   rY   rf   rR   rJ   ra   rc   r   r¥   rñ   )Únone)T)Lr7   rŒ   r�   rŽ   Ú__doc__r�   r   r�   rH   rJ   rL   rM   rN   rO   rP   rR   rT   rV   rW   rX   r<   r   rY   r,   rZ   r[   r_   r`   ra   rc   re   rf   rg   rh   rj   r   r’   r“   r¡   rœ   rÌ   Ústaticmethodr±   rÛ   rß   rä   rè   rí   ró   rø   r®   r  r
  r  rž   r  r   r(  r,  r4  r.  r   r@  rE  rI  rN  rS  rR  r/  ri  ry  r~  rƒ  rˆ  rª   r‘   r   r   r   rD   rD   †   s\  ‡ ñ3ðj Óñ ¨dÔ3€FˆIÓ3Ø€CˆƒLØ€CˆÓØ€CˆÓØ€CˆÓØ€CˆÓÙ!&°tÔ!<€IˆÓ<Ø€CˆƒMØ€CˆÓØ€Eˆ4ÓØ€HˆdÓØ€J�ÓÙ).Ð?TÔ)U€HÐ&ÓUØ)-€LÐ&Ó-Ù#(Ð9RÔ#S€L�.ÓSØ*,€FÐ'Ó,Ù*/°UÔ*;€KÐ'Ó;Ù6;ÈDÔ6QÐÐ3ÓQÙ¨dÔ3€FˆIÓ3Ù.3¸Ô.?€JÐ+Ó?Ù  eÔ,€CˆÓ,Ù  eÔ,€CˆÓ,Ù$)¸$Ô$?Ð˜	Ó?Ø€L�$ÓØ&*€N�OÓ*ð ÷),ð ),ó ð),ñV (-¸\Ô'JÐ˜ÓJõ4õ$õgðR ô	0ó ð	0÷÷"÷ ÷
õBõ(÷õõ,"õ8õõ46õ<õ,õõ#õ*2õ
ð ô	ó ð	ð ô1ó ð1õ÷õ
õõõ>÷$)õV"÷õ 
÷$ñ $r   rD   )z\C-aúbeginning-of-line)z\C-bÚleft)z\C-cÚ	interrupt)z\C-dÚdelete)z\C-eúend-of-line)z\C-fÚright)z\C-gÚcancel)z\C-hÚ	backspace)z\C-jÚaccept)z	\<return>r˜  )z\C-kz	kill-line)z\C-lzclear-screen)z\C-mr˜  )z\C-tztranspose-characters)z\C-uzunix-line-discard)z\C-wzunix-word-rubout)z\C-x\C-uzupcase-region)z\C-yÚyankr   ))z\C-zr@  )z\M-búbackward-word)z\M-czcapitalize-word)z\M-dz	kill-word)z\M-fúforward-word)z\M-lzdowncase-word)z\M-tztranspose-words)z\M-uzupcase-word)z\M-yzyank-pop)z\M--ú	digit-arg)z\M-0rœ  )z\M-1rœ  )z\M-2rœ  )z\M-3rœ  )z\M-4rœ  )z\M-5rœ  )z\M-6rœ  )z\M-7rœ  )z\M-8rœ  )z\M-9rœ  )z\M-\nr˜  )z\\r>   )z	\x1b[200~zperform-bracketed-paste)z\x03zctrl-c))z\<up>Úup)z\<down>Údown)z\<left>r‘  )z
\C-\<left>rš  )z\<right>r•  )z\C-\<right>r›  )z	\<delete>r“  )z\x1b[3~r“  )z\<backspace>r—  )z\M-\<backspace>zbackward-kill-word)z\<end>r”  )z\<home>r�  )z\<f1>Úhelp)z\<f2>zshow-history)z\<f3>z
paste-mode)z\EOFÚend)z\EOHÚhome)*Ú__conditional_annotations__Ú
__future__r   rd  rŸ   Ú
contextlibr   Údataclassesr   r   r   rQ   r   r	   r
   Úutilsr   r   r   r   r   r   r6   Útypesr   r   r   r   r$   r(   r'   r%   r,   r<   ÚtupleÚplatformr"   r#   ÚisalpharA   r�   rD   )r*   r¢  s   0@r   Ú<module>r«     sä  øð÷, #Ð "ã 
Û å %ß 0Ñ 0ç &Ñ &ß ?Õ ?Ý ð ×
Ñ
€ß GÓ Gñ 16°a³Ñ -Ð �; õõñ ;@ð+Ø&ð+àð+ð 	ð+ð 	ð	+ð
 	!ð+ð 	ð+ð 	ð+ð 	ð+ð 	ð+ð 	!ð+ð 	ð+ð 	"ð+ð 	ð+ð 	*ð+ð 	'ð+ð  	&ð!+ð" 	'ð#+ð$ 	ð%+ð& —‘ Ô'‰"Ð-Eð'+ð( 	#ð)+ð* 	%ð++ð, 	ð-+ð. 	"ð/+ð0 	#ð1+ð2 	%ð3+ð4 	!ð5+ð6 	ð7+ð8 	ð9+ð: 	ð;+ð< 	ð=+ð> 	ð?+ð@ 	ðA+ðB 	ðC+ðD 	ðE+ðF 	ðG+ðH 	ðI+ðJ 	ðK+ðL 	ðM+ðN 	ðO+ðP 	 ðQ+ðR 	2ðS+ðT 	ðU+ñX $' s©E°"°c«NÔ#;ÓIÑ#;˜aÀD¹yÔˆˆ=ÓÑ#;ÑIõY,JñZ $' s©E°#°s«OÔ#<ÓLÑ#<˜aÇ	Á	ÇÔˆˆ=ÓÑ#<ÑLõ[-Mò\õ]AóC;€Ð7ó CñL �Ô÷}	$ð }	$ó ò}	$ùò5 JùÚLs   Ã-E3
Ã:E3
ÄE8
Ä8E8
