§
    ßÊ¯j^�  ã                  óâ  — U d Z ddlmZ ddlZddlmZ ddlZddlZddlZddlm	Z	m
Z
mZmZmZ 	 ddlmZ n# e$ r dZY nw xY wddlmZmZmZ daded	<   d®d„Zd¯d„Zd°d±d„Zd°d±d„ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.d*Z/d+Z0d,Z1d-Z2d.Z3d/Z4d0Z5d1Z6d2Z7d3Z8d4Z9d5Z:d6Z;d7Z<d8Z=d9Z>d:Z?d;Z@d<ZAd=ZBd>ZCd?ZDd@ZEdAZFdBZGdCZHdDZIdEZJdFZKdGZLdHZMdIZNdJZOdZPdZQdKZRdZSdLZTdMZUdZVdZWdZXdZYdNZZdOZ[dPZ\d!Z]dQZ^dRZ_dSZ`dTZadUZbdZcdZddZedZfdZgd!ZhdVZidWZjdXZkdZldZmdZndYZodZZpd[Zqd\Zrd]Zsd^Ztd_Zud`ZvdaZwdZxdZydZzdZ{dZ|ej}        j~        Z G db„ dcej€        ¦  «        Z� G dd„ deej€        ¦  «        Z‚ G df„ dgej€        ¦  «        Zƒ G dh„ diej        ¦  «        Z„ G dj„ dkej€        ¦  «        Z…dZ†ej‡        dlk    r/ejˆ        ej‰        ejŠ        gej‹        _Œ        ejˆ        ej‹        _�        	 	 	 d²d³dp„ZŽ G dq„ drej€        ¦  «        Z�d´dt„Z�	 	 d°dµdx„Z‘	 	 	 d¶d·d|„Z’	 	 	 	 	 d¸d¹d‚„Z“	 	 	 	 	 dºd»dŠ„Z”d°d¼d‹„Z•	 	 	 	 d½d¾dŒ„Z–	 	 	 	 	 d¿dÀd�„Z—	 	 	 	 dÁdÂd•„Z˜	 	 	 	 dÃdÄdœ„Z™dÅdÆdž„ZšdÇdŸ„Z›dÈd¢„Zœ	 dÉdÊd¤„Z�	 	 	 dËdÌd¦„Zž	 	 dÍdÎd§„ZŸ	 	 	 dÏdÐdª„Z 	 	 	 dÑdÒd­„Z¡dS )Óu  AutoPOE2 - ThÆ° viá»‡n Ä‘iá»�u khiá»ƒn Nháº­p liá»‡u Win32 DÃ¹ng Chung (Win32 Input Foundation).

Cung cáº¥p Single Source of Truth (SSoT) cho toÃ n bá»™ thao tÃ¡c chuá»™t vÃ  bÃ n phÃ­m:
- Click chuá»™t trÃ¡i, chuá»™t pháº£i, Ctrl+Click, Hover vá»›i tá»�a Ä‘á»™ tuyá»‡t Ä‘á»‘i.
- Nháº¥n phÃ­m Ä‘Æ¡n, tá»• há»£p phÃ­m vá»›i dwell time tá»± nhiÃªn.
- Di chuyá»ƒn 8 hÆ°á»›ng WASD isometric Ä‘á»“ng thá»�i (True simultaneous keydown).
- TÃ­ch há»£p Focus Interlock báº£o vá»‡ desktop ngÆ°á»�i dÃ¹ng.
- Báº£ng mÃ£ phÃ­m chuáº©n áº£o (VK) vÃ  mÃ£ quÃ©t pháº§n cá»©ng (Scan Code).

TuÃ¢n thá»§ nghiÃªm ngáº·t cÃ¡c báº¥t biáº¿n kiáº¿n trÃºc:
- INV-INPUT-ABS-MOUSE: Tá»�a Ä‘á»™ chuá»™t tuyá»‡t Ä‘á»‘i.
- INV-WASD-NO-BLIND-LMB: KhÃ´ng click mÃ¹ LMB trong cháº¿ Ä‘á»™ WASD.
- INV-KEY-NO-F-FOR-INTERACT: PhÃ­m F lÃ  Skill 8, cáº¥m dÃ¹ng cho tÆ°Æ¡ng tÃ¡c váº­t lÃ½.
- INV-KEY-NO-U-FOR-MAP-DEVICE: PhÃ­m U chá»‰ má»Ÿ Campaign World Map, cáº¥m dÃ¹ng á»Ÿ Hideout.
- INV-WASD-MIN-DWELL: Dwell di chuyá»ƒn tá»‘i thiá»ƒu 300ms, cáº¥m micro-tap < 150ms.
é    )ÚannotationsN)Úwintypes)ÚAnyÚOptionalÚSequenceÚTupleÚUnion)ÚImage)Úis_poe2_window_focusedÚfind_poe2_windowÚensure_window_focusúOptional[bool]Ú_GLOBAL_SIMULATED_FOCUSÚenabledÚreturnÚNonec                ó
   — | a dS )uI  Thiáº¿t láº­p cháº¿ Ä‘á»™ mÃ´ phá»�ng Focus cho táº§ng Win32 Input.
    
    Args:
        enabled: True Ä‘á»ƒ luÃ´n cho phÃ©p input (giáº£ láº­p game Ä‘ang focused),
                 False Ä‘á»ƒ luÃ´n cháº·n input (giáº£ láº­p game máº¥t focus),
                 None Ä‘á»ƒ kiá»ƒm tra thá»±c táº¿ qua GetForegroundWindow().
    N©r   )r   s    ú.C:\Projects\AutoPOE2\src\common\win32_input.pyÚset_input_simulation_moder   &   s   € ð &ÐÐÐó    c                 ó   — t           S )u?   Láº¥y tráº¡ng thÃ¡i cháº¿ Ä‘á»™ mÃ´ phá»�ng Focus hiá»‡n táº¡i.r   © r   r   Úget_input_simulation_moder   2   s   € å"Ð"r   FÚis_simulatedÚboolÚhwndúOptional[int]c                óœ   — | st           �dS |r|dk    r|nd}|€$	 ddlm}  |¦   «         }n# t          $ r d}Y nw xY wt	          |¬¦  «        S )u  Kiá»ƒm tra Ä‘iá»�u kiá»‡n thá»±c táº¿ Ä‘á»ƒ Ä‘Æ°á»£c phÃ©p gá»­i phÃ­m/chuá»™t pháº§n cá»©ng (Hardware Safety Guarantee).
    
    Quy táº¯c báº¥t biáº¿n INV-FOCUS-INTERLOCK-HARDWARE-SAFETY:
    - Náº¿u Ä‘ang á»Ÿ cháº¿ Ä‘á»™ mÃ´ phá»�ng (is_simulated=True hoáº·c _GLOBAL_SIMULATED_FOCUS is not None):
      TUYá»†T Ä�á»�I Cáº¤M gá»­i báº¥t ká»³ tÃ­n hiá»‡u pháº§n cá»©ng nÃ o ra OS Windows (0% leakage, 0 pixel displacement).
    - Chá»‰ cho phÃ©p gá»­i tÃ­n hiá»‡u pháº§n cá»©ng khi game tháº­t Ä‘ang thá»±c sá»± giá»¯ Foreground Focus.
    NFr   ©r   ©r   )r   Úsrc.common.win32_windowr   Ú	Exceptionr   ©r   r   Útargetr   s       r   Ú_is_physical_allowedr&   7   sŽ   € ð ð Õ.Ð:ØˆuØÐ2˜t ašx˜xˆTˆT¨d€FØ€~ð	Ø@Ð@Ð@Ð@Ð@Ð@Ø%Ð%Ñ'Ô'ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøå! vÐ.Ñ.Ô.Ð.s   ›, ¬;º;c                óÄ   — | rdS t           �t          t           ¦  «        S |r|dk    r|nd}|€$	 ddlm}  |¦   «         }n# t          $ r d}Y nw xY wt          |¬¦  «        S )ué   Kiá»ƒm tra Ä‘iá»�u kiá»‡n Focus Interlock logic (cho phÃ©p FSM advance trong tests/simulation).
    
    Returns:
        bool: True náº¿u thao tÃ¡c input logic Ä‘Æ°á»£c cháº¥p thuáº­n (trong simulation hoáº·c khi game focused).
    TNr   r    r!   )r   r   r"   r   r#   r   r$   s       r   Ú_is_focus_allowedr(   K   s�   € ð ð ØˆtÝÐ*ÝÕ+Ñ,Ô,Ð,ØÐ2˜t ašx˜xˆTˆT¨d€FØ€~ð	Ø@Ð@Ð@Ð@Ð@Ð@Ø%Ð%Ñ'Ô'ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøå! vÐ.Ñ.Ô.Ð.s   ¯A  Á AÁAé   é   é   é   é	   é   é   é   é   é   é   é    é%   é&   é'   é(   éA   éB   éC   éD   éE   éF   éG   éI   éM   éO   éP   éQ   éR   éS   éT   éU   éW   é0   é1   é2   é3   é4   é5   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é¾   é¿   é   é   é   é   é   é   é!   é   é9   é   é*   é@   i   i €  é   i  i   i  i  i  i  i  i  c                  ó¢   — e Zd Zdej        fdej        fdej        fdej        fd ej        ej        ¦  «        dk    rej	        nej
        fgZdS )Ú
KEYBDINPUTÚwVkÚwScanÚdwFlagsÚtimeÚdwExtraInfor,   N)Ú__name__Ú
__module__Ú__qualname__r   ÚWORDÚDWORDÚctypesÚsizeofÚc_void_pÚc_ulonglongÚc_ulongÚ_fields_r   r   r   rl   rl   Ù   sj   € € € € € à	�”ÐØ	�(”-Ð Ø	�H”NÐ#Ø	�”Ð Ø	¨m¨f¬m¸F¼OÑ.LÔ.LÐPQÒ.QÐ.Q˜Ô*Ð*ÐW]ÔWeÐfð€H€H€Hr   rl   c            	      ó²   — e Zd Zdej        fdej        fdej        fdej        fdej        fd ej        ej        ¦  «        dk    rej	        nej
        fgZdS )	Ú
MOUSEINPUTÚdxÚdyÚ	mouseDataro   rp   rq   r,   N)rr   rs   rt   r   ÚLONGrv   rw   rx   ry   rz   r{   r|   r   r   r   r~   r~   ã   st   € € € € € à	ˆxŒ}ÐØ	ˆxŒ}ÐØ	�h”nÐ%Ø	�H”NÐ#Ø	�”Ð Ø	¨m¨f¬m¸F¼OÑ.LÔ.LÐPQÒ.QÐ.Q˜Ô*Ð*ÐW]ÔWeÐfð€H€H€Hr   r~   c                  óB   — e Zd Zdej        fdej        fdej        fgZdS )ÚHARDWAREINPUTÚuMsgÚwParamLÚwParamHN)rr   rs   rt   r   rv   ru   r|   r   r   r   r„   r„   î   s3   € € € € € à	�”Ð Ø	�H”MÐ"Ø	�H”MÐ"ð€H€H€Hr   r„   c                  ó$   — e Zd ZdefdefdefgZdS )ÚINPUT_UNIONÚmiÚkiÚhiN)rr   rs   rt   r~   rl   r„   r|   r   r   r   r‰   r‰   ö   s-   € € € € € à	ˆzÐØ	ˆzÐØ	ˆ}Ðð€H€H€Hr   r‰   c                  óÈ   — e Zd Z ej        ej        ¦  «        dk    r7dej        f ej        ej        ¦  «        dk    r	dej        fndej        fdefgndej        fdefgZ	dS )ÚINPUTr,   ÚtypeÚ_padÚiN)
rr   rs   rt   rw   rx   ry   r   rv   r‰   r|   r   r   r   rŽ   rŽ   þ   s•   € € € € € ð
 
ˆŒ�v”Ñ	'Ô	'¨1Ò	,Ð	,ð 
�”Ð Ø$1 F¤M°&´/Ñ$BÔ$BÀaÒ$GÐ$Gˆ�”Ð Ð ÈfÐV^ÔVdÐMeØ	ˆkÐðð ð
 
�”Ð Ø	ˆkÐð3ð	 €H€Hr   rŽ   ÚntÚkeysúSequence[Tuple[int, int]]Úis_upc                ód  — | rt           j        dk    rd S 	 ddlm}  |¦   «          n# t          $ r Y nw xY w|st          ||¬¦  «        sd S 	 t          | ¦  «        }t          |dz  z  ¦   «         }t          | ¦  «        D �]0\  }\  }}	t          |rt          ndz  }
t          ||dz           _        d||dz           j        j        _        |	||dz           j        j        _        |
||dz           j        j        _        d||dz           j        j        _        |rt          nd}t          ||dz  dz            _        |||dz  dz            j        j        _        |	||dz  dz            j        j        _        |||dz  dz            j        j        _        d||dz  dz            j        j        _        �Œ2t&                               |dz  |t+          j        t          ¦  «        ¦  «        }|dk    r0| D ]/\  }}	|rt          nd}t&                               ||	|d¦  «         Œ.d S d S # t          $ r Y d S w xY w)Nr’   r   ©Úattach_to_default_desktopr!   r*   r)   )ÚosÚnamer"   r˜   r#   r&   ÚlenrŽ   Ú	enumerateÚKEYEVENTF_SCANCODEÚKEYEVENTF_KEYUPÚINPUT_KEYBOARDr�   r‘   r‹   rm   rn   ro   rp   Ú_user32Ú	SendInputrw   rx   Úkeybd_event)r“   r•   r   r   r˜   ÚnÚ	input_arrr‘   ÚvkÚscÚsc_flagsÚvk_flagsÚretÚflags_vks                 r   Ú_send_input_keysr«     s  € ð ð •2”7˜d’?�?ØˆðØEÐEÐEÐEÐEÐEØ!Ð!Ñ#Ô#Ð#Ð#øÝð ð ð Øˆðøøøð
 ð Õ-¨lÀÐFÑFÔFð ØˆðÝ�‰IŒIˆõ ˜a !™e‘_Ñ'Ô'ˆ	Ý$ T™?œ?ð 	/ñ 	/‰KˆA‰x��Bå)ÀÐ-L­_¨_È1ÑMˆHÝ$2ˆI�a˜!‘eÔÔ!Ø()ˆI�a˜!‘eÔÔÔ!Ô%Ø*,ˆI�a˜!‘eÔÔÔ!Ô'Ø,4ˆI�a˜!‘eÔÔÔ!Ô)Ø)*ˆI�a˜!‘eÔÔÔ!Ô&ð +0Ð6•�°QˆHÝ(6ˆI�a˜!‘e˜a‘iÔ Ô%Ø,.ˆI�a˜!‘e˜a‘iÔ Ô"Ô%Ô)Ø.0ˆI�a˜!‘e˜a‘iÔ Ô"Ô%Ô+Ø08ˆI�a˜!‘e˜a‘iÔ Ô"Ô%Ô-Ø-.ˆI�a˜!‘e˜a‘iÔ Ô"Ô%Ô*Ñ*å×Ò  A¡ yµ&´-ÅÑ2FÔ2FÑGÔGˆØ�!Š8ˆ8àð 9ð 9‘��BØ.3Ð:�?˜?¸�Ý×#Ò# B¨¨H°aÑ8Ô8Ð8Ð8ð	 ˆ8ð9ð 9øõ ð ð ð Øˆˆðøøøs   –' §
4³4ÁGH! È!
H/È.H/c                  ó2   — e Zd Zdej        fdej        fgZdS )ÚPOINTÚxÚyN)rr   rs   rt   r   r‚   r|   r   r   r   r­   r­   C  s&   € € € € € Ø�h”mÐ$ s¨H¬MÐ&:Ð;€H€H€Hr   r­   úTuple[int, int]c                 óÆ   — t          ¦   «         } t                               t          j        | ¦  «        ¦  «         t          | j        ¦  «        t          | j        ¦  «        fS )uJ   Láº¥y tá»�a Ä‘á»™ con trá»� chuá»™t hiá»‡n táº¡i trÃªn mÃ n hÃ¬nh desktop.)r­   r    ÚGetCursorPosrw   ÚbyrefÚintr®   r¯   )Úpts    r   Úget_cursor_posr¶   G  sD   € å	‰Œ€BÝ×Ò�œ bÑ)Ô)Ñ*Ô*Ð*ÝˆrŒt‰9Œ9•c˜"œ$‘i”iÐÐr   r®   r´   r¯   c           
     óD  — t          ||¬¦  «        sdS t          j        dk    r"	 ddlm}  |¦   «          n# t
          $ r Y nw xY wt          t                               t          t          | ¦  «        ¦  «        t          t          |¦  «        ¦  «        ¦  «        ¦  «        S )u	  Ä�áº·t con trá»� chuá»™t vÃ o vá»‹ trÃ­ pixel tuyá»‡t Ä‘á»‘i (x, y).
    
    KhÃ³a an toÃ n: Tá»« chá»‘i di chuyá»ƒn chuá»™t náº¿u game khÃ´ng cÃ³ Foreground Focus
    Ä‘á»ƒ khÃ´ng cÆ°á»›p chuá»™t cá»§a ngÆ°á»�i dÃ¹ng Ä‘ang lÃ m viá»‡c (0 pixel displacement).
    r!   Fr’   r   r—   )r&   r™   rš   r"   r˜   r#   r   r    ÚSetCursorPosr´   Úround)r®   r¯   r   r   r˜   s        r   Úset_cursor_posrº   N  s¨   € õ   °4Ð8Ñ8Ô8ð ØˆuÝ	„w�$‚€ð	ØIÐIÐIÐIÐIÐIØ%Ð%Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	ØˆDð	øøøå•×$Ò$¥S­¨q©¬¡]¤]µC½¸a¹¼±M´MÑBÔBÑCÔCÐCs   ¥6 ¶
AÁAçš™™™™™©?Údelay_afterÚfloatc                óÂ   — t          ||¬¦  «        sdS t          ||¬¦  «        s|st          �dS dS t          | |||¬¦  «         |dk    rt	          j        |¦  «         dS )uc   Di chuyá»ƒn chuá»™t tá»›i pixel tuyá»‡t Ä‘á»‘i mÃ  KHÃ”NG báº¥m phÃ­m nÃ o (INV-WASD-NO-BLIND-LMB).r!   FNT©r   r   r   )r(   r&   r   rº   rp   Úsleep)r®   r¯   r¼   r   r   s        r   ÚhoverrÁ   d  s€   € õ ˜\°Ð5Ñ5Ô5ð ØˆuÝ °4Ð8Ñ8Ô8ð Øð 	Õ2Ð>Ø�4ØˆuÝ�1�a l¸Ð>Ñ>Ô>Ð>Ø�Q‚€ÝŒ
�;ÑÔÐØˆ4r   Úleftçš™™™™™¹?ÚbuttonÚstrÚhold_msc                ó0  — t          ||¬¦  «        sdS t          ||¬¦  «        s|st          �dS dS t          | |||¬¦  «         t	          j        d¦  «         |dk    rt          t          }}n8|dk    rt          t          }}n#|d	k    rt          t          }}nt          t          }}t                               |d
d
d
d
¦  «         |d
k    rt	          j        |¦  «         t                               |d
d
d
d
¦  «         |d
k    rt	          j        |¦  «         dS )uˆ  Di chuyá»ƒn chuá»™t tá»›i (x, y) vÃ  thá»±c hiá»‡n click cÃ³ chá»§ Ä‘Ã­ch.
    
    Báº£o vá»‡ Focus Interlock: Tá»« chá»‘i click náº¿u game khÃ´ng giá»¯ Foreground focus.
    
    @param x: Tá»�a Ä‘á»™ mÃ n hÃ¬nh X
    @param y: Tá»�a Ä‘á»™ mÃ n hÃ¬nh Y
    @param button: 'left', 'right', hoáº·c 'middle'
    @param hold_ms: Thá»�i gian giá»¯ chuá»™t tÃ­nh theo giÃ¢y (máº·c Ä‘á»‹nh 50ms)
    @param delay_after: Thá»�i gian chá»� sau khi nháº£ chuá»™t (máº·c Ä‘á»‹nh 100ms)
    @param is_simulated: Bá»� qua kiá»ƒm tra focus cho mÃ´i trÆ°á»�ng kiá»ƒm thá»­
    @return: True náº¿u click thÃ nh cÃ´ng, False náº¿u bá»‹ cháº·n do máº¥t focus.
    r!   FNTr¿   ç{®Gáz¤?rÂ   ÚrightÚmiddler   )r(   r&   r   rº   rp   rÀ   ÚMOUSEEVENTF_LEFTDOWNÚMOUSEEVENTF_LEFTUPÚMOUSEEVENTF_RIGHTDOWNÚMOUSEEVENTF_RIGHTUPÚMOUSEEVENTF_MIDDLEDOWNÚMOUSEEVENTF_MIDDLEUPr    Úmouse_event)	r®   r¯   rÄ   rÆ   r¼   r   r   Ú	down_flagÚup_flags	            r   ÚclickrÔ   x  s0  € õ* ˜\°Ð5Ñ5Ô5ð ØˆuÝ °4Ð8Ñ8Ô8ð Øð 	Õ2Ð>Ø�4Øˆuå�1�a l¸Ð>Ñ>Ô>Ð>Ý„JˆtÑÔÐà�ÒÐÝ1Õ3E�7ˆ	ˆ	Ø	�7Ò	Ð	Ý2Õ4G�7ˆ	ˆ	Ø	�8Ò	Ð	Ý3Õ5I�7ˆ	ˆ	å1Õ3E�7ˆ	å×Ò˜	 1 a¨¨AÑ.Ô.Ð.Ø�‚{€{ÝŒ
�7ÑÔÐÝ×Ò˜  A q¨!Ñ,Ô,Ð,à�Q‚€ÝŒ
�;ÑÔÐØˆ4r   çš™™™™™Ù?Ústart_xÚstart_yÚend_xÚend_yÚstepsÚdurationc	                ó”  — t          ||¬¦  «        sdS t          ||¬¦  «        s|st          �dS dS |dk    rt          t          }
}	n8|dk    rt
          t          }
}	n#|dk    rt          t          }
}	nt          t          }
}	t          | |¦  «         t          j        d¦  «         t                               |	d	d	d	d	¦  «         t          j        d
¦  «         | |}}t          d|t          d|¦  «        z  ¦  «        }t          d|dz   ¦  «        D ]ô}t          ||¬¦  «        s!t                               |
d	d	d	d	¦  «          dS |t!          |¦  «        z  }t#          t%          | || z
  |z  z   ¦  «        ¦  «        }t#          t%          |||z
  |z  z   ¦  «        ¦  «        }||z
  }||z
  }||}}|d	k    s|d	k    r#t                               t&          ||d	d	¦  «         t          ||||¬¦  «         t          j        |¦  «         Œõt          j        d
¦  «         t                               |
d	d	d	d	¦  «         t          j        d¦  «         dS )u  KÃ©o chuá»™t tá»« (start_x, start_y) Ä‘áº¿n (end_x, end_y) vá»›i ná»™i suy mÆ°á»£t.
    
    Báº£o vá»‡ Focus Interlock: Tá»« chá»‘i drag náº¿u game khÃ´ng giá»¯ Foreground focus.
    Phá»¥c vá»¥ kÃ©o cuá»™n báº£n Ä‘á»“ Atlas (Atlas Panning) hoáº·c di chuyá»ƒn váº­t pháº©m.
    r!   FNTrÂ   rÉ   rÊ   ç{®Gáz´?r   ç¸…ëQ¸®?ç{®Gázt?r)   r¿   rÃ   )r(   r&   r   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rº   rp   rÀ   r    rÑ   ÚmaxÚranger½   r´   r¹   ÚMOUSEEVENTF_MOVE)rÖ   r×   rØ   rÙ   rÚ   rÛ   rÄ   r   r   rÒ   rÓ   Úcur_xÚcur_yÚstep_intervalr‘   ÚtÚcxÚcyr   r€   s                       r   Údragré   ª  sg  € õ  ˜\°Ð5Ñ5Ô5ð ØˆuÝ °4Ð8Ñ8Ô8ð Øð 	Õ2Ð>Ø�4Øˆuà�ÒÐÝ1Õ3E�7ˆ	ˆ	Ø	�7Ò	Ð	Ý2Õ4G�7ˆ	ˆ	Ø	�8Ò	Ð	Ý3Õ5I�7ˆ	ˆ	å1Õ3E�7ˆ	å�7˜GÑ$Ô$Ð$Ý„JˆtÑÔÐÝ×Ò˜	 1 a¨¨AÑ.Ô.Ð.Ý„JˆtÑÔÐà˜Gˆ5€EÝ˜˜x­#¨a°©-¬-Ñ7Ñ8Ô8€MÝ�1�e˜a‘iÑ Ô ð "ð "ˆÝ# L°tÐ<Ñ<Ô<ð 	Ý×Ò ¨¨A¨q°!Ñ4Ô4Ð4Ø�5�5Ø•�e‘”ÑˆÝ•�w %¨'¡/°QÑ!6Ñ6Ñ7Ô7Ñ8Ô8ˆÝ•�w %¨'¡/°QÑ!6Ñ6Ñ7Ô7Ñ8Ô8ˆØ�%‰ZˆØ�%‰ZˆØ˜2ˆuˆØ�Š7ˆ7�b˜A’g�gÝ×ÒÕ 0°"°b¸!¸QÑ?Ô?Ð?Ý�r˜2¨L¸tÐDÑDÔDÐDÝŒ
�=Ñ!Ô!Ð!Ð!å„JˆtÑÔÐÝ×Ò˜  A q¨!Ñ,Ô,Ð,Ý„Jˆs�O„O€OØˆ4r   c           	     ó  — t           j        dk    r"	 ddlm}  |¦   «          n# t          $ r Y nw xY wt
          t          ft          t          ft          t          ft          t          ft          t          ft          t           ft"          dft$          t&          fg}t)          | |¬¦  «        rxt+          |d| |¬¦  «         |D ]b\  }}	 t,                               ||t0          d¦  «         t,                               d|t2          t0          z  d¦  «         ŒS# t          $ r Y Œ_w xY w|r[t,                               |¦  «        rC|D ]B\  }}	 t,                               |t8          ||dz  d	z  ¦  «         Œ/# t          $ r Y Œ;w xY wd
S d
S d
S )u™   CÆ°á»¡ng cháº¿ nháº£ toÃ n bá»™ phÃ­m WASD vÃ  Modifier Ä‘á»ƒ ngÄƒn cháº·n trÃ´i dáº¡t nhÃ¢n váº­t khi máº¥t focus (INV-FOCUS-INTERLOCK-HARDWARE-SAFETY).r’   r   r—   é8   r¿   T©r•   r   r   r/   ì       N)r™   rš   r"   r˜   r#   ÚVK_WÚSC_WÚVK_AÚSC_AÚVK_SÚSC_SÚVK_DÚSC_DÚ
VK_CONTROLÚ
SC_CONTROLÚVK_SHIFTÚSC_SHIFTÚVK_MENUÚVK_SPACEÚSC_SPACEr&   r«   r    r¢   rž   r�   ÚIsWindowÚPostMessageWÚWM_KEYUP)r   r   r˜   Ú	wasd_keysr¥   r¦   s         r   Úemergency_release_wasd_keysr  æ  sÓ  € å	„w�$‚€ð	ØIÐIÐIÐIÐIÐIØ%Ð%Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	ØˆDð	øøøõ 
�tˆ•t�T�l¥T­4 Lµ4½°,Ý	•ZÐ ¥8­XÐ"6½À$¸Í(ÕT\ÐI]ð€Iõ ¨¸DÐAÑAÔAð Ý˜¨$¸\ÐPTÐUÑUÔUÐUØð 	ð 	‰FˆB�ðÝ×#Ò# B¨­O¸QÑ?Ô?Ð?Ý×#Ò# A rÕ+=ÅÑ+OÐQRÑSÔSÐSÐSøÝð ð ð Ø�ðøøøàð •× Ò  Ñ&Ô&ð Øð 	ð 	‰FˆB�ðÝ×$Ò$ T­8°R¸"À¹(ÀjÑ9PÑQÔQÐQÐQøÝð ð ð Ø�ðøøøð	ð ð ð ð	ð 	s1   ’# £
0¯0ÃADÄ
DÄDÅ(E.Å.
E;Å:E;c           	     ó  — t          ||¬¦  «        sdS |€|sddlm}  |¦   «         }t          ||¬¦  «        }|r;t                               t          t          dd¦  «         t          j	        d¦  «         t          | |d|d||¬	¦  «        }|r,t                               t          t          t          d¦  «         |r0dd
lm}	  |	|¦  «        \  }
}}}t          || |
z
  ||z
  |d¬¦  «         |dk    rt          j	        |¦  «         |S )u¶   Thá»±c hiá»‡n Ctrl+Click (thao tÃ¡c nhanh trong tÃºi Ä‘á»“ / hÃ²m Ä‘á»“ / Map Device).
    
    Báº£o vá»‡ Focus Interlock: Tá»« chá»‘i náº¿u game khÃ´ng giá»¯ Foreground focus.
    r!   FNr   r    rÈ   rÂ   rÞ   )rÄ   rÆ   r¼   r   r   )Úget_client_rect©rÆ   r¼   )r(   r"   r   r&   r    r¢   rö   r÷   rp   rÀ   rÔ   rž   r  Úpost_message_ctrl_click)r®   r¯   rÆ   r¼   r   r   r   Úallow_physicalÚresr  ÚclÚctÚ_s                r   Ú
ctrl_clickr    s>  € õ ˜\°Ð5Ñ5Ô5ð ØˆuØ€|˜L€|Ø<Ð<Ð<Ð<Ð<Ð<ØÐÑ!Ô!ˆÝ)¨,¸TÐBÑBÔB€NØð Ý×Ò�J­
°A°qÑ9Ô9Ð9ÝŒ
�4ÑÔÐÝ
��1˜V¨WÀ$ÐUaÐhlÐ
mÑ
mÔ
m€CØð HÝ×Ò�J­
µOÀQÑGÔGÐGØð YØ;Ð;Ð;Ð;Ð;Ð;Ø&� tÑ,Ô,‰ˆˆB��1Ý  a¨"¡f¨a°"©f¸gÐSWÐXÑXÔXÐXØ�Q‚€ÝŒ
�;ÑÔÐØ€Jr   r¥   Úscanc                óÄ  — t          ||¬¦  «        sdS |€|sddlm}  |¦   «         }t          ||¬¦  «        }|dk    r|n't	          t
                               | d¦  «        ¦  «        }|r3t          | |fgd||¬¦  «         t
                               | |dd¦  «         |r(t
           	                    |t          | |dz  dz  ¦  «         |dk    rt          j        |¦  «         |r8t          | |fgd	||¬¦  «         t
                               | |t          d¦  «         |r(t
           	                    |t          | |dz  d
z  ¦  «         |dk    rt          j        |¦  «         d	S )u¨   Nháº¥n vÃ  nháº£ má»™t phÃ­m Win32 vá»›i dwell time an toÃ n.
    
    Báº£o vá»‡ Focus Interlock: Tá»« chá»‘i bÆ¡m phÃ­m náº¿u game khÃ´ng giá»¯ Foreground focus.
    r!   FNr   r    rì   r/   r)   Trí   )r(   r"   r   r&   r´   r    ÚMapVirtualKeyWr«   r¢   rþ   Ú
WM_KEYDOWNrp   rÀ   rž   rÿ   )	r¥   r  rÆ   r¼   r   r   r   r  Úactual_scans	            r   Ú	press_keyr  #  s˜  € õ ˜\°Ð5Ñ5Ô5ð ØˆuØ€|˜L€|Ø<Ð<Ð<Ð<Ð<Ð<ØÐÑ!Ô!ˆÝ)¨,¸TÐBÑBÔB€NØ š(˜(�$�$­­G×,BÒ,BÀ2ÀqÑ,IÔ,IÑ(JÔ(J€KØð 3Ý˜2˜{Ð+Ð,°EÈÐ[_Ð`Ñ`Ô`Ð`Ý×Ò˜B ¨Q°Ñ2Ô2Ð2Øð LÝ×Ò˜T¥:¨r°KÀ2Ñ4EÈÑ3JÑKÔKÐKØ�‚{€{ÝŒ
�7ÑÔÐØð AÝ˜2˜{Ð+Ð,°DÀ|ÐZ^Ð_Ñ_Ô_Ð_Ý×Ò˜B ­_¸aÑ@Ô@Ð@Øð SÝ×Ò˜T¥8¨R°+ÀÑ2CÀzÑ1QÑRÔRÐRØ�Q‚€ÝŒ
�;ÑÔÐØˆ4r   çš™™™™™É?Úcount_or_imgúUnion[int, str, Any, None]ÚimgúOptional[Union[str, Any]]c                óæ  — t          | t          t          �t          j        ndf¦  «        st          | t          ¦  «        s| �| }d}n|}t          | t          ¦  «        r| nd}|�A	 ddlm}  ||¦  «        rt          t          t          dd|¬¦  «         n# t          $ r Y nw xY wt          |¦  «        D ] }t          t          t          dd	|¬¦  «         Œ!|dk    rt          j        |¦  «         dS dS )
uj  Ä�Ã³ng cÃ¡c báº£ng giao diá»‡n (modals/panels) báº±ng phÃ­m Spacebar / ESC chuáº©n ngÆ°á»�i chÆ¡i POE2.

    TÃ­ch há»£p Fast-Path is_center_modal_present (< 0.1ms):
    Náº¿u phÃ¡t hiá»‡n modal dialog / menu che trung tÃ¢m mÃ n hÃ¬nh, gá»­i ESC Ä‘á»ƒ giáº£i phÃ³ng tá»©c thá»�i.
    Sau Ä‘Ã³ gá»­i phÃ­m Spacebar Ä‘á»ƒ Ä‘Ã³ng cÃ¡c panel cÃ²n tá»“n Ä‘á»�ng.
    Nr   r)   r   )Úis_center_modal_presentrÈ   g333333Ã?)rÆ   r¼   r   rÝ   )Ú
isinstancerÅ   r
   r´   Úsrc.common.vision_ocrr  r  Ú	VK_ESCAPEÚ	SC_ESCAPEr#   rá   rû   rü   rp   rÀ   )r  r¼   r   r  Ú
target_imgÚcountr  r
  s           r   Údismiss_modalsr  G  s1  € õ �,¥µUÐ5F¥e¤k kÈBÐ OÑPÔPð EÝ�|¥SÑ)Ô)ðEØ.:Ð.Fà!ˆ
Øˆˆàˆ
Ý *¨<½Ñ =Ô =ÐD��À1ˆàÐð	ØEÐEÐEÐEÐEÐEà&Ð& zÑ2Ô2ð kÝ�)¥Y¸È$Ð]iÐjÑjÔjÐjøøÝð 	ð 	ð 	ØˆDð	øøøõ �5‰\Œ\ð að aˆÝ•(�H¨dÀÐS_Ð`Ñ`Ô`Ð`Ð`Ø�Q‚€ÝŒ
�;ÑÔÐÐÐð €s   Á%/B Â
B"Â!B"çffffffÖ?çR¸…ëQØ?r   r€   Údwell_msÚ	thresholdc           
     ó2
  — t           j        dk    r"	 ddlm}  |¦   «          n# t          $ r Y nw xY wt          ||¬¦  «        st          ||¬¦  «         dS |€|sddlm}  |¦   «         }t          j	        | | z  ||z  z   ¦  «        }|d	k     rd
S | |z  }	||z  }
d}|	|
z
  |z  }|	|
z   |z  }g }||k    r"| 
                    t          t          f¦  «         n(|| k     r!| 
                    t          t          f¦  «         ||k    r"| 
                    t          t           f¦  «         n(|| k     r!| 
                    t"          t$          f¦  «         t'          ||¬¦  «        }d
}	 t)          dt+          |¦  «        ¦  «        }|rZt-          |d||¬¦  «         |D ]D\  }}t.                               ||dd¦  «         t.                               d|t2          d¦  «         ŒE|rJt.                               |¦  «        r0|D ]-\  }}t.                               |t8          ||dz  dz  ¦  «         Œ.t;          j        ¦   «         |z   }t;          j        ¦   «         }t;          j        ¦   «         |k     ræ|t;          j        ¦   «         z
  }|dk    rnÉt=          |¬¦  «        st          ||¬¦  «         d}d
}n£t;          j        ¦   «         }|rUt.                               |¦  «        r;||z
  dk    r2|D ]-\  }}t.                               |t8          ||dz  dz  ¦  «         Œ.|}t;          j        tA          d|¦  «        ¦  «         t;          j        ¦   «         |k     °æ|rxt-          |d
||¬¦  «         |D ]b\  }}	 t.                               ||tB          d¦  «         t.                               d|t2          tB          z  d¦  «         ŒS# t          $ r Y Œ_w xY w|r[t.                               |¦  «        rA|D ]>\  }}	 t.                               |tD          ||dz  dz  ¦  «         Œ/# t          $ r Y Œ;w xY wnÞ# |rxt-          |d
||¬¦  «         |D ]b\  }}	 t.                               ||tB          d¦  «         t.                               d|t2          tB          z  d¦  «         ŒS# t          $ r Y Œ_w xY w|r[t.                               |¦  «        rB|D ]@\  }}	 t.                               |tD          ||dz  dz  ¦  «         Œ/# t          $ r Y Œ;w xY ww w w xY wt;          j        d¦  «         |S )uV  Gá»­i phÃ­m di chuyá»ƒn 8 hÆ°á»›ng WASD Isometric Ä‘á»“ng thá»�i (True simultaneous keydown).
    
    TuÃ¢n thá»§ INV-WASD-MIN-DWELL: Dwell tá»‘i thiá»ƒu >= 300ms, cáº¥m micro-tap < 150ms.
    Chiáº¿u vectÆ¡ chÃªnh lá»‡ch tháº¿ giá»›i sang gÃ³c nhÃ¬n Isometric 45 Ä‘á»™.
    
    Báº£o vá»‡ Focus Interlock: Náº¿u cá»­a sá»• POE2 khÃ´ng cÃ³ focus, Tá»ª CHá»�I BÆ M PHÃ�M vÃ  cÆ°á»¡ng cháº¿
    nháº£ toÃ n bá»™ phÃ­m WASD Ä‘á»ƒ ngÄƒn cháº·n trÃ´i dáº¡t nhÃ¢n váº­t vÃ  khÃ´ng gÃµ phÃ­m ra desktop.
    
    @return: True náº¿u di chuyá»ƒn thÃ nh cÃ´ng, False náº¿u bá»‹ cháº·n do máº¥t focus.
    r’   r   r—   r!   r¿   FNr    gü©ñÒMbP?Tgß'Üež æ?ç333333Ó?rì   r/   r)   g
×£p=
§?ç{®Gáz”?rí   rÈ   )#r™   rš   r"   r˜   r#   r(   r  r   ÚmathÚsqrtÚappendrî   rï   rò   ró   rô   rõ   rð   rñ   r&   rà   r½   r«   r    r¢   r�   rý   rþ   r  rp   r   rÀ   Úminrž   rÿ   )r   r€   r"  r#  r   r   r˜   r   ÚdistÚndxÚndyÚ	inv_sqrt2Úscreen_xÚscreen_yr“   r  ÚsuccessÚactual_dwellr¥   r¦   Út_endÚlast_pm_timeÚ	remainingÚnows                           r   Úsend_wasd_directionr7  k  s  € õ$ 
„w�$‚€ð	ØIÐIÐIÐIÐIÐIØ%Ð%Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	ØˆDð	øøøõ ˜\°Ð5Ñ5Ô5ð Ý#°ÀDÐIÑIÔIÐIØˆuà€|˜L€|Ø<Ð<Ð<Ð<Ð<Ð<ØÐÑ!Ô!ˆåŒ9�R˜"‘W˜r B™wÑ&Ñ'Ô'€DØˆe‚|€|Øˆtà
ˆt‰)€CØ
ˆt‰)€CØ€IØ�c‘	˜YÑ&€HØ�c‘	˜YÑ&€Hà€DØ�)ÒÐØ�Š•T�4�LÑ!Ô!Ð!Ð!Ø	�Y�JÒ	Ð	Ø�Š•T�4�LÑ!Ô!Ð!à�)ÒÐØ�Š•T�4�LÑ!Ô!Ð!Ð!Ø	�Y�JÒ	Ð	Ø�Š•T�4�LÑ!Ô!Ð!å)¨,¸TÐBÑBÔB€NØ€Gð4å˜4¥ x¡¤Ñ1Ô1ˆØð 	BÝ˜T¨¸\ÐPTÐUÑUÔUÐUØð Bð B‘��BÝ×#Ò# B¨¨A¨qÑ1Ô1Ð1Ý×#Ò# A rÕ+=¸qÑAÔAÐAÐAàð 	K•G×$Ò$ TÑ*Ô*ð 	KØð Kð K‘��BÝ×$Ò$ T­:°r¸BÀ"¹HÈ¹>ÑJÔJÐJÐJõ ”	‘”˜lÑ*ˆÝ”y‘{”{ˆÝŒi‰kŒk˜EÒ!Ð!Ø¥¤	¡¤Ñ+ˆIØ˜AŠ~ˆ~ØÝ)¨tÐ4Ñ4Ô4ð å+¸ÈDÐQÑQÔQÐQØ!&�Ø�Øå”)‘+”+ˆCØð #�×(Ò(¨Ñ.Ô.ð #°C¸,Ñ4FÈ%Ò4OÐ4OØ"ð Oð O‘F�B˜Ý×(Ò(¨­z¸2ÀÀbÁÈA¹~ÑNÔNÐNÐNØ"�åŒJ•s˜4 Ñ+Ô+Ñ,Ô,Ð,õ# Œi‰kŒk˜EÒ!Ð!ð( ð 	Ý˜T¨¸LÈtÐTÑTÔTÐTØð ð ‘��BðÝ×'Ò'¨¨BµÀÑCÔCÐCÝ×'Ò'¨¨2Õ/AÅOÑ/SÐUVÑWÔWÐWÐWøÝ ð ð ð Ø�Dðøøøàð 	•G×$Ò$ TÑ*Ô*ð 	Øð ð ‘��BðÝ×(Ò(¨­x¸¸bÀB¹hÈ*Ñ=TÑUÔUÐUÐUøÝ ð ð ð Ø�Dðøøøøøð ð 	Ý˜T¨¸LÈtÐTÑTÔTÐTØð ð ‘��BðÝ×'Ò'¨¨BµÀÑCÔCÐCÝ×'Ò'¨¨2Õ/AÅOÑ/SÐUVÑWÔWÐWÐWøÝ ð ð ð Ø�Dðøøøàð 	•G×$Ò$ TÑ*Ô*ð 	Øð ð ‘��BðÝ×(Ò(¨­x¸¸bÀB¹hÈ*Ñ=TÑUÔUÐUÐUøÝ ð ð ð Ø�Dðøøøð		ð 	ðøøøõ 	„JˆtÑÔÐØ€Ns‡   ’# £
0¯0Å"G+P% Í*AN7Î7
OÏOÏ+(PÐ
P!Ð P!Ð%T ÑARÒT Ò
R	ÒT ÒR	Ò&T Ó(S-Ó,T Ó-
S:	Ó7T Ó9S:	Ó:T Údelta_clicksc                óŽ   — | dz  }t                                t          dd|d¦  «         |dk    rt          j        |¦  «         dS dS )uM   Cuá»™n chuá»™t giá»¯a Ä‘á»ƒ phÃ³ng to/thu nhá»� camera (1 click = 120 units).rX   r   N)r    rÑ   ÚMOUSEEVENTF_WHEELrp   rÀ   )r8  r¼   Úwheel_amounts      r   Úmouse_wheelr<  Ý  sO   € à #Ñ%€LÝ×ÒÕ)¨1¨a°¸qÑAÔAÐAØ�Q‚€ÝŒ
�;ÑÔÐÐÐð €r   c                 ó(  — t           t          ft          t          ft          t
          ft          t          ft          t          ft          t          ffD ]b\  } }	 t                               | |t          d¦  «         t                               d|t          t          z  d¦  «         ŒS# t           $ r Y Œ_w xY wt                               t$          dddd¦  «         t                               t&          dddd¦  «         t)          t*          ddd¬¦  «         dS )u¯   [INV-F8-MUTES-BRAIN]
    KÃ­ch hoáº¡t F8 táº¡m dá»«ng toÃ n bá»™ há»‡ thá»‘ng tá»± hÃ nh vÃ  cÆ°á»¡ng cháº¿ nháº£ táº¥t cáº£ cÃ¡c phÃ­m W, A, S, D, Space, Ctrl, LMB, RMB.
    r   r:   rÝ   rÃ   r  N)rî   rï   rð   rñ   rò   ró   rô   rõ   rö   r÷   rû   rü   r    r¢   rž   r�   r#   rÑ   rÌ   rÎ   r  ÚVK_F8)r¥   r¦   s     r   Ú"emergency_f8_pause_and_release_allr?  å  s   € õ 
�tˆÝ	�tˆÝ	�tˆÝ	�tˆÝ	•ZÐ Ý	•8Ððð ð ‰ˆˆBð	Ý×Ò  B­¸Ñ;Ô;Ð;Ý×Ò  2Õ'9½OÑ'KÈQÑOÔOÐOÐOøÝð 	ð 	ð 	ØˆDð	øøøõ ×ÒÕ*¨A¨q°!°QÑ7Ô7Ð7Ý×ÒÕ+¨Q°°1°aÑ8Ô8Ð8å�e�T 4°SÐ9Ñ9Ô9Ð9Ð9Ð9s   ÁAB$Â$
B1Â0B1Úclient_xÚclient_yc                óL  — | rt                                | ¦  «        s8t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        fS t	          t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        ¦  «        }t                                | t          j        |¦  «        ¦  «        r(t          |j        ¦  «        t          |j	        ¦  «        fS t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        fS )uj   Chuyá»ƒn Ä‘á»•i tá»�a Ä‘á»™ tá»« Client Area sang tá»�a Ä‘á»™ Desktop tuyá»‡t Ä‘á»‘i (cho Physical Mouse).)
r    rý   r´   r¹   r­   ÚClientToScreenrw   r³   r®   r¯   )r   r@  rA  rµ   s       r   Úclient_to_screen_posrD    sÕ   € àð :•w×'Ò'¨Ñ-Ô-ð :Ý•5˜‘?”?Ñ#Ô#¥S­¨x©¬Ñ%9Ô%9Ð9Ð9Ý	�s•5˜‘?”?Ñ#Ô#¥S­¨x©¬Ñ%9Ô%9Ñ	:Ô	:€BÝ×Ò˜d¥F¤L°Ñ$4Ô$4Ñ5Ô5ð $Ý�2”4‰yŒy�#˜bœd™)œ)Ð#Ð#Ý�u�X‰ŒÑÔ¥¥U¨8¡_¤_Ñ!5Ô!5Ð5Ð5r   rÈ   c                ó>  — | rt                                | ¦  «        sdS t          t          |¦  «        ¦  «        dz  dz  t          t          |¦  «        ¦  «        dz  z  }t                                | t
          d|¦  «         |dk    rt          j        |¦  «         dS )ui   Di chuyá»ƒn chuá»™t áº£o ngáº§m tá»›i tá»�a Ä‘á»™ Client mÃ  KHÃ”NG di chuyá»ƒn con trá»� chuá»™t tháº­t.Féÿÿ  r/   r   T)r    rý   r´   r¹   rþ   ÚWM_MOUSEMOVErp   rÀ   )r   r@  rA  r¼   ÚlParams        r   Úpost_message_hoverrI    s“   € ð ð •w×'Ò'¨Ñ-Ô-ð ØˆuÝ•5˜‘?”?Ñ#Ô# fÑ,°Ñ3½½EÀ(¹O¼OÑ8LÔ8LÈvÑ8UÑV€FÝ×Ò˜�|¨Q°Ñ7Ô7Ð7Ø�Q‚€ÝŒ
�;ÑÔÐØˆ4r   rÞ   c                óà  — | rt                                | ¦  «        sdS t          t          |¦  «        ¦  «        dz  dz  t          t          |¦  «        ¦  «        dz  z  }t                                | t
          d|¦  «         t          j        d¦  «         |dk    rt          t          t          }	}}nM|dk    rt          t          t          }	}}n1|dk    rt          t          t           }	}}nt          t          t          }	}}t                                | ||	|¦  «         |dk    rt          j        |¦  «         t                                | |d|¦  «         |dk    rt          j        |¦  «         d	S )
uo   Gá»­i click chuá»™t áº£o ngáº§m trá»±c tiáº¿p tá»›i HWND cá»­a sá»• game khÃ´ng cÆ°á»›p chuá»™t ngÆ°á»�i dÃ¹ng.FrF  r/   r   r&  rÂ   rÉ   rÊ   T)r    rý   r´   r¹   rþ   rG  rp   rÀ   ÚWM_LBUTTONDOWNÚWM_LBUTTONUPÚ
MK_LBUTTONÚWM_RBUTTONDOWNÚWM_RBUTTONUPÚ
MK_RBUTTONÚWM_MBUTTONDOWNÚWM_MBUTTONUPÚ
MK_MBUTTON)
r   r@  rA  rÄ   rÆ   r¼   rH  Údown_msgÚup_msgÚmk_btns
             r   Úpost_message_clickrW    sK  € ð ð •w×'Ò'¨Ñ-Ô-ð ØˆuÝ•5˜‘?”?Ñ#Ô# fÑ,°Ñ3½½EÀ(¹O¼OÑ8LÔ8LÈvÑ8UÑV€FÝ×Ò˜�|¨Q°Ñ7Ô7Ð7Ý„JˆtÑÔÐà�ÒÐÝ#1µ<Å˜&�&ˆˆØ	�7Ò	Ð	Ý#1µ<Å˜&�&ˆˆØ	�8Ò	Ð	Ý#1µ<Å˜&�&ˆˆå#1µ<Å˜&�&ˆå×Ò˜˜x¨°Ñ8Ô8Ð8Ø�‚{€{ÝŒ
�7ÑÔÐÝ×Ò˜˜v q¨&Ñ1Ô1Ð1à�Q‚€ÝŒ
�;ÑÔÐØˆ4r   c           	     ó  — | rt                                | ¦  «        sdS t          t          |¦  «        ¦  «        dz  dz  t          t          |¦  «        ¦  «        dz  z  }t	          | ¬¦  «        }|r't                                t          t          dd¦  «         t                                | t          t          t          dz  dz  ¦  «         t          j        d¦  «         	 t                                | t          t          |¦  «         t          j        d¦  «         t                                | t          t          t          z  |¦  «         |dk    rt          j        |¦  «         t                                | t           t          |¦  «         t          j        d¦  «         |r,t                                t          t          t"          d¦  «         t                                | t$          t          t          dz  dz  ¦  «         ne# |r,t                                t          t          t"          d¦  «         t                                | t$          t          t          dz  dz  ¦  «         w xY w|dk    rt          j        |¦  «         d	S )
uj  Gá»­i Ctrl+Click áº£o ngáº§m tá»›i HWND game (thao tÃ¡c nhanh cáº¥t/rÃºt Ä‘á»“ Stash & Inventory).
    
    Tá»± Ä‘á»™ng kÃ­ch hoáº¡t tráº¡ng thÃ¡i phÃ­m VK_CONTROL qua keybd_event trong thá»�i gian cá»±c ngáº¯n (~40ms)
    Ä‘á»ƒ Ä‘áº£m báº£o GetAsyncKeyState cá»§a game client nháº­n diá»‡n Ä‘Æ°á»£c Quick Move mÃ  khÃ´ng dá»‹ch chuyá»ƒn con trá»� chuá»™t.
    FrF  r/   r!   r   r)   r&  rí   T)r    rý   r´   r¹   r   r¢   rö   r÷   rþ   r  rp   rÀ   rG  Ú
MK_CONTROLrK  rM  rL  rž   rÿ   )r   r@  rA  rÆ   r¼   rH  Úneed_physical_ctrls          r   r  r  >  s  € ð ð •w×'Ò'¨Ñ-Ô-ð ØˆuÝ•5˜‘?”?Ñ#Ô# fÑ,°Ñ3½½EÀ(¹O¼OÑ8LÔ8LÈvÑ8UÑV€Fõ 0°TÐ:Ñ:Ô:ÐØð :Ý×Ò�J­
°A°qÑ9Ô9Ð9Ý×Ò˜�z­:½
ÀbÑ8HÈAÑ7MÑNÔNÐNÝ„JˆtÑÔÐðZå×Ò˜T¥<µ¸VÑDÔDÐDÝŒ
�4ÑÔÐõ 	×Ò˜T¥>µ:Å
Ñ3JÈFÑSÔSÐSØ�QŠ;ˆ;ÝŒJ�wÑÔÐÝ×Ò˜T¥<µ¸VÑDÔDÐDÝŒ
�4ÑÔÐð ð 	LÝ×Ò¥
­J½ÈÑKÔKÐKÝ×Ò˜T¥8­Z½*ÈÑ:JÈjÑ9XÑYÔYÐYÐYøð ð 	LÝ×Ò¥
­J½ÈÑKÔKÐKÝ×Ò˜T¥8­Z½*ÈÑ:JÈjÑ9XÑYÔYÐYÐYøøøà�Q‚€ÝŒ
�;ÑÔÐØˆ4s   Ã!B?H ÈA"I#é   r%  c                ó¤  — | rt                                | ¦  «        sdS |dk    rt          nt          }|dk    rt          nt
          }	|dk    rt          nt          }
t          t          |¦  «        ¦  «        dz  dz  t          t          |¦  «        ¦  «        dz  z  }t            
                    | t          d|¦  «         t          j        d¦  «         t            
                    | ||
|¦  «         t          j        d¦  «         t          d|¦  «        }t          d||z  ¦  «        }t          d	|d	z   ¦  «        D ]¢}|t!          |¦  «        z  }t          t          |||z
  |z  z   ¦  «        ¦  «        }t          t          |||z
  |z  z   ¦  «        ¦  «        }|dz  dz  |dz  z  }t            
                    | t          |
|¦  «         t          j        |¦  «         Œ£t          t          |¦  «        ¦  «        dz  dz  t          t          |¦  «        ¦  «        dz  z  }t            
                    | |	d|¦  «         t          j        d
¦  «         dS )u^   Gá»­i drag chuá»™t áº£o ngáº§m tá»›i HWND game qua PostMessageW khÃ´ng chiáº¿m chuá»™t tháº­t.FrÂ   rF  r/   r   r&  r*   rß   r)   rÈ   T)r    rý   rK  rN  rL  rO  rM  rP  r´   r¹   rþ   rG  rp   rÀ   rà   rá   r½   )r   rÖ   r×   rØ   rÙ   rÚ   rÛ   rÄ   rT  rU  rV  Ústart_lparamÚactual_stepsÚ
step_delayr‘   ÚalphaÚcurr_xÚcurr_yÚmove_lparamÚ
end_lparams                       r   Úpost_message_dragre  k  s(  € ð ð •w×'Ò'¨Ñ-Ô-ð ØˆuØ!'¨6Ò!1Ð!1�~ˆ~µ~€HØ# vÒ-Ð-�\ˆ\µ<€FØ! VÒ+Ð+�ZˆZµ€Få�˜w™œÑ(Ô(¨6Ñ1°bÑ8½SÅÀwÁÄÑ=PÔ=PÐSYÑ=YÑZ€LÝ×Ò˜�|¨Q°Ñ=Ô=Ð=Ý„JˆtÑÔÐÝ×Ò˜˜x¨°Ñ>Ô>Ð>Ý„JˆtÑÔÐå�q˜%‘=”=€LÝ�U˜H |Ñ3Ñ4Ô4€JÝ�1�l QÑ&Ñ'Ô'ð ð ˆØ•E˜,Ñ'Ô'Ñ'ˆÝ•U˜7 e¨g¡o¸Ñ%>Ñ>Ñ?Ô?Ñ@Ô@ˆÝ•U˜7 e¨g¡o¸Ñ%>Ñ>Ñ?Ô?Ñ@Ô@ˆØ ™¨BÑ.°6¸F±?ÑCˆÝ×Ò˜T¥<°¸ÑEÔEÐEÝŒ
�:ÑÔÐÐå•u˜U‘|”|Ñ$Ô$ vÑ-°"Ñ4½½UÀ5¹\¼\Ñ9JÔ9JÈVÑ9SÑT€JÝ×Ò˜˜v q¨*Ñ5Ô5Ð5Ý„JˆtÑÔÐØˆ4r   Úvk_codeÚ	scan_codec                óŒ  — | rt                                | ¦  «        sdS |pt                                |d¦  «        }|dz  dz  }|dz  dz  }t                                | t          ||¦  «         |dk    rt          j        |¦  «         t                                | t          ||¦  «         |dk    rt          j        |¦  «         dS )uW   Gá»­i phÃ­m báº¥m áº£o ngáº§m tá»›i HWND game khÃ´ng lÃ m giÃ¡n Ä‘oáº¡n ngÆ°á»�i dÃ¹ng.Fr   r/   r)   rí   T)r    rý   r  rþ   r  rp   rÀ   rÿ   )r   rf  rg  r"  r¼   r¦   Údown_lparamÚ	up_lparams           r   Úpost_message_keyrk  ’  sÆ   € ð ð •w×'Ò'¨Ñ-Ô-ð ØˆuØ	Ð	8•g×,Ò,¨W°aÑ8Ô8€BØ˜‘8˜q‘.€KØ�r‘˜ZÑ'€IÝ×Ò˜�z¨7°KÑ@Ô@Ð@Ø�!‚|€|ÝŒ
�8ÑÔÐÝ×Ò˜�x¨°)Ñ<Ô<Ð<Ø�Q‚€ÝŒ
�;ÑÔÐØˆ4r   )r   r   r   r   )r   r   )FN)r   r   r   r   r   r   )FFN)
r“   r”   r•   r   r   r   r   r   r   r   )r   r°   )
r®   r´   r¯   r´   r   r   r   r   r   r   )r»   FN)r®   r´   r¯   r´   r¼   r½   r   r   r   r   r   r   )rÂ   r»   rÃ   FN)r®   r´   r¯   r´   rÄ   rÅ   rÆ   r½   r¼   r½   r   r   r   r   r   r   )ra   rÕ   rÂ   FN)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Ã   FN)r®   r´   r¯   r´   rÆ   r½   r¼   r½   r   r   r   r   r   r   )r   r»   rÃ   FN)r¥   r´   r  r´   rÆ   r½   r¼   r½   r   r   r   r   r   r   )r)   r  FN)
r  r  r¼   r½   r   r   r  r  r   r   )r   r!  FN)r   r½   r€   r½   r"  r½   r#  r½   r   r   r   r   r   r   )r»   )r8  r´   r¼   r½   r   r   )r   r   )r   r´   r@  r´   rA  r´   r   r°   )rÈ   )
r   r´   r@  r´   rA  r´   r¼   r½   r   r   )rÂ   rÈ   rÞ   )r   r´   r@  r´   rA  r´   rÄ   rÅ   rÆ   r½   r¼   r½   r   r   )rÈ   rÞ   )r   r´   r@  r´   rA  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   )r   r»   r»   )r   r´   rf  r´   rg  r´   r"  r½   r¼   r½   r   r   )¢Ú__doc__Ú
__future__r   rw   r   r'  r™   rp   Útypingr   r   r   r   r	   ÚPILr
   ÚImportErrorr"   r   r   r   r   Ú__annotations__r   r   r&   r(   Ú
VK_LBUTTONÚ
VK_RBUTTONÚ
VK_MBUTTONÚVK_BACKÚVK_TABÚ	VK_RETURNrø   rö   rú   ÚVK_PAUSEr  rû   ÚVK_LEFTÚVK_UPÚVK_RIGHTÚVK_DOWNrð   ÚVK_BÚVK_Crô   ÚVK_EÚVK_FÚVK_GÚVK_IÚVK_MÚVK_OÚVK_PÚVK_QÚVK_Rrò   ÚVK_TÚVK_Urî   ÚVK_0ÚVK_1ÚVK_2ÚVK_3ÚVK_4ÚVK_5ÚVK_F1ÚVK_F2ÚVK_F3ÚVK_F4ÚVK_F5ÚVK_F6ÚVK_F7r>  ÚVK_F9ÚVK_F10ÚVK_F11ÚVK_F12ÚVK_OEM_PERIODÚVK_OEM_2r  ÚSC_1ÚSC_2ÚSC_3ÚSC_4ÚSC_5ÚSC_Qrï   ÚSC_EÚSC_RÚSC_Trñ   ró   rõ   ÚSC_FÚSC_Irü   r÷   rù   râ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   r:  ÚMOUSEEVENTF_ABSOLUTEÚKEYEVENTF_EXTENDEDKEYrž   r�   r  rÿ   rG  rK  rL  rN  rO  rQ  rR  rM  rP  ÚMK_SHIFTrY  rS  ÚwindllÚuser32r    Ú	Structurerl   r~   r„   r‰   rŽ   rŸ   rš   ÚUINTry   Úc_intr¡   ÚargtypesÚrestyper«   r­   r¶   rº   rÁ   rÔ   ré   r  r  r  r  r7  r<  r?  rD  rI  rW  r  re  rk  r   r   r   ú<module>r²     s=  ððð ð ð" #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðØÐÐÐÐÐÐøØð ð ð Ø€E€E€Eðøøøð bÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aÐ að +/Ð Ð .Ð .Ð .Ñ .ð	&ð 	&ð 	&ð 	&ð#ð #ð #ð #ð
/ð /ð /ð /ð /ð(/ð /ð /ð /ð /ð, €
Ø€
Ø€
à
€Ø	€Ø€	Ø€Ø€
Ø
€Ø€Ø€	Ø€ð €Ø€Ø€Ø
€ð €Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€ð €Ø€Ø€Ø€Ø€Ø€ð 	€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø	€Ø	€Ø	€ð €Ø€ð €	Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€
Ø€ð Ð ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ ØÐ àÐ Ø€ØÐ ð €
Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€Ø€
Ø€
Ø€Ø€
Ø€
à
Œ-Ô
€ðð ð ð ð �Ô!ñ ô ð ðð ð ð ð �Ô!ñ ô ð ðð ð ð ð �FÔ$ñ ô ð ðð ð ð ð �&”,ñ ô ð ðð ð ð ð ˆFÔñ ô ð ð €à„7ˆd‚?€?Ø"*¤-°´À&Ä,Ð!O€GÔÔØ (¤€GÔÔð
 ØØð	0ð 0ð 0ð 0ð 0ðf<ð <ð <ð <ð <ˆFÔñ <ô <ð <ð ð  ð  ð  ð Øð	Dð Dð Dð Dð Dð2 ØØðð ð ð ð ð. ØØØØð/ð /ð /ð /ð /ðn ØØØØð9ð 9ð 9ð 9ð 9ðxð ð ð ð ð> ØØØðð ð ð ð ðF ØØØØð!ð !ð !ð !ð !ðJ 01ØØØ%)ð	! ð ! ð ! ð ! ð ! ðN ØØØðoð oð oð oð oðd ð  ð  ð  ð  ð:ð :ð :ð :ð:6ð 6ð 6ð 6ð ð	ð ð ð ð ð( ØØðð ð ð ð ðL Øð*ð *ð *ð *ð *ðf ØØð$ð $ð $ð $ð $ðT ØØðð ð ð ð ð ð s   ¯6 ¶A ¿A 