§
    FP®jƒ/  ã                  ó(  — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	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dlmZmZ dd	lmZmZmZ dd
lmZmZm Z m!Z! dd„Z"dd„Z#e G d„ d¦  «        ¦   «         Z$ G d„ d¦  «        Z%dS )u  AutoPOE2 - Stash & Inventory Item Matrix (Doc 63 / SSoT 2026).

Quáº£n lÃ½ ma tráº­n tá»�a Ä‘á»™ vÃ  nháº­n diá»‡n váº­t pháº©m trong cÃ¡c Ã´:
- TÃ­nh toÃ¡n tá»�a Ä‘á»™ tÃ¢m cá»§a 60 Ã´ tÃºi Ä‘á»“ cÃ¡ nhÃ¢n (12 cá»™t x 5 hÃ ng).
- TÃ­nh toÃ¡n tá»�a Ä‘á»™ tÃ¢m cá»§a 144 Ã´ lÆ°á»›i hÃ²m Ä‘á»“ thÆ°á»�ng (12 cá»™t x 12 hÃ ng).
- Ä�o Ä‘á»™ sÃ¡ng quang há»�c (Optical Brightness) Ä‘á»ƒ phÃ¡t hiá»‡n Ã´ cÃ³ Ä‘á»“ / Ã´ trá»‘ng siÃªu tá»‘c.
- TrÃ­ch xuáº¥t thÃ´ng tin chi tiáº¿t váº­t pháº©m qua Clipboard (Ctrl+C) káº¿t há»£p UniversalItemParser.
é    )ÚannotationsN)Ú	dataclass)ÚAnyÚDictÚListÚOptionalÚTupleÚUnion)ÚImage)ÚInventoryGridConfigÚStashGridConfigÚStashConfig)ÚStashMemoryReaderÚSlotMemoryData)Úinspect_itemÚItemInspectionReportÚItemCategory)ÚhoverÚ	press_keyÚ
VK_CONTROLÚVK_CÚreturnÚstrc                 óè  — t           j        j        } t           j        j        }|                      d¦  «        sdS 	 d}|                      |¦  «        s	 |                      ¦   «          dS |                      |¦  «        }|s	 |                      ¦   «          dS |                     |¦  «        }|s	 |                      ¦   «          dS 	 t          j	        |¦  «        j
        }|rt          |¦  «        nd	 |                     |¦  «         |                      ¦   «          S # |                     |¦  «         w xY w# t          $ r Y |                      ¦   «          dS w xY w# |                      ¦   «          w xY w)u^   Ä�á»�c ná»™i dung vÄƒn báº£n tá»« Windows Clipboard má»™t cÃ¡ch an toÃ n qua native Win32 API.r   Ú é   )ÚctypesÚwindllÚuser32Úkernel32ÚOpenClipboardÚIsClipboardFormatAvailableÚCloseClipboardÚGetClipboardDataÚ
GlobalLockÚ	c_wchar_pÚvaluer   ÚGlobalUnlockÚ	Exception)r   r    ÚCF_UNICODETEXTÚh_glbÚptrÚvals         úBC:\Projects\AutoPOE2\src\assistant_tool\stash\stash_item_matrix.pyÚget_clipboard_text_win32r/   %   s¨  € åŒ]Ô!€FÝŒ}Ô%€Hà×Ò Ñ"Ô"ð Øˆrð ØˆØ×0Ò0°Ñ@Ô@ð 	Øð 	×ÒÑÔÐÐÐð ×'Ò'¨Ñ7Ô7ˆØð 	Øð 	×ÒÑÔÐÐÐð ×!Ò! %Ñ(Ô(ˆØð 	Øð 	×ÒÑÔÐÐÐð	)ÝÔ" 3Ñ'Ô'Ô-ˆCØ"Ð*•3�s‘8”8�8¨Ð*à×!Ò! %Ñ(Ô(Ð(ð 	×ÒÑÔÐÐøð	 ×!Ò! %Ñ(Ô(Ð(Ð(øøøøÝð ð ð Øà×ÒÑÔÐÐÐðøøøøð 	×ÒÑÔÐÐøøøsG   »D6 Á)D6 ÂD6 Ã+D Ã2D6 ÄD3Ä3D6 Ä6
EÅ E ÅEÅE ÅE1ÚtextÚboolc                ó&  — t           j        j        }t           j        j        }|                     d¦  «        sdS 	 |                     ¦   «          | s	 |                     ¦   «          dS |                      d¦  «        dz   }d}|                     |t          |¦  «        ¦  «        }|s	 |                     ¦   «          dS | 
                    |¦  «        }|rgt          j        ||t          |¦  «        ¦  «         |                     |¦  «         d}|                     ||¦  «         	 |                     ¦   «          dS n%# t          $ r Y |                     ¦   «          dS w xY w	 |                     ¦   «          n# |                     ¦   «          w xY wdS )u5   XÃ³a hoáº·c Ä‘áº·t vÄƒn báº£n vÃ o Windows Clipboard.r   FTz	utf-16-les     é   r   )r   r   r   r    r!   ÚEmptyClipboardr#   ÚencodeÚGlobalAllocÚlenr%   Úmemmover(   ÚSetClipboardDatar)   )r0   r   r    ÚdataÚGMEM_MOVEABLEr+   r,   r*   s           r.   Úset_clipboard_text_win32r<   B   sÃ  € åŒ]Ô!€FÝŒ}Ô%€Hà×Ò Ñ"Ô"ð Øˆuð Ø×ÒÑÔÐØð 	Øð  	×ÒÑÔÐÐÐð �{Š{˜;Ñ'Ô'¨+Ñ5ˆØˆØ×$Ò$ ]µC¸±I´IÑ>Ô>ˆØð 	Øð 	×ÒÑÔÐÐÐð ×!Ò! %Ñ(Ô(ˆØð 	ÝŒN˜3 ¥c¨$¡i¤iÑ0Ô0Ð0Ø×!Ò! %Ñ(Ô(Ð(ØˆNØ×#Ò# N°EÑ:Ô:Ð:Øð 	×ÒÑÔÐÐÐð	øõ ð ð ð Øà×ÒÑÔÐÐÐðøøøð	ð 	×ÒÑÔÐÐøˆ×ÒÑÔÐÐøøøØˆ5s6   »D= Á(?D= Â>A'D= Ä<E8 Ä=
EÅE8 ÅEÅE8 Å8Fc                  óf   — e Zd ZU dZded<   ded<   ded<   ded<   dZded	<   d
Zded<   dZded<   dS )ÚSlotItemInfou(   ThÃ´ng tin má»™t Ã´ chá»©a váº­t pháº©m.ÚintÚcolÚrowÚcenter_xÚcenter_yFr1   Úis_occupiedç        ÚfloatÚavg_rgbNúOptional[ItemInspectionReport]Úitem_report)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__rD   rG   rI   © ó    r.   r>   r>   a   so   € € € € € € à2Ð2Ø€H€H�HØ€H€H�HØ€M€M�MØ€M€M�MØ€KÐÐÐÑØ€GÐÐÐÑØ26€KÐ6Ð6Ð6Ñ6Ð6Ð6rP   r>   c                  ór   — e Zd ZdZ	 	 	 	 	 d+d,d„Zd-d„Zd.d„Zd/d„Zd/d„Z	 d0d1d"„Z	d2d$„Z
d2d%„Z	 	 	 d3d4d*„ZdS )5ÚStashItemMatrixu^   Bá»™ tÃ­nh toÃ¡n tá»�a Ä‘á»™ lÆ°á»›i vÃ  quÃ©t ma tráº­n váº­t pháº©m trong Stash & Inventory.é 
  é   NFÚscreen_wr?   Úscreen_hÚconfigúOptional[StashConfig]Úmemory_readerúOptional[StashMemoryReader]Úis_simulatedr1   c                óV  — || _         || _        |pt          ¦   «         | _        || _        || _        | j        €| j        j        rt          ¦   «         | _        |dk    r|dz  nd| _        |dk    r|dz  nd| _	        t          ¦   «         | _        t          ¦   «         | _        d | _        d S )Nr   ç      ž@g      ð?g     à�@)rU   rV   r   rW   rY   r[   Úenable_ram_readingr   Úscale_xÚscale_yr   Úinv_cfgr   Ú	stash_cfgÚ_calibrated_inv_origin)ÚselfrU   rV   rW   rY   r[   s         r.   Ú__init__zStashItemMatrix.__init__p   s­   € ð !ˆŒØ ˆŒØÐ-¥¡¤ˆŒØ*ˆÔØ(ˆÔàÔÐ%¨$¬+Ô*HÐ%Ý!2Ñ!4Ô!4ˆDÔà,4°qªL¨L�x &Ñ(Ð(¸cˆŒØ,4°qªL¨L�x &Ñ(Ð(¸cˆŒå*Ñ,Ô,ˆŒÝ(Ñ*Ô*ˆŒØSWˆÔ#Ð#Ð#rP   Ú	img_inputúUnion[str, Image.Image]r   c                óþ   — |                       |¦  «        }|€dS 	 ddlm}  ||d¦  «        }|r=|\  }}| j        dz  }| j        dz  }|d|z  z
  }	|d	|z  z   }
d
|z  }|}|	|
||f| _        dS n# t          $ r Y nw xY wdS )u}   Tá»± Ä‘á»™ng hiá»‡u chuáº©n tá»�a Ä‘á»™ lÆ°á»›i tÃºi Ä‘á»“ tá»« áº£nh chá»¥p thá»±c táº¿ (Commercial-Grade Multi-Resolution).NFr   )Úfind_button_by_textÚ	INVENTORYg     ”’@g     Ø‹@g     Ðp@g     }@g
×£p=ª@@T)Ú	_load_pilÚsrc.common.vision_ocrri   rU   rV   rc   r)   )rd   rf   Úimgri   Úinv_posÚinv_xÚinv_yÚscale_wÚscale_hÚoxÚoyÚcwÚchs                r.   Úcalibrate_from_imagez$StashItemMatrix.calibrate_from_imageˆ   sÛ   € à�nŠn˜YÑ'Ô'ˆØˆ;Ø�5ð	ØAÐAÐAÐAÐAÐAØ)Ð)¨#¨{Ñ;Ô;ˆGØð 
Ø&‘��uàœ-¨&Ñ0�Øœ-¨%Ñ/�Ø˜e g™oÑ.�Ø˜e g™oÑ.�Ø˜W‘_�Ø�Ø/1°2°r¸2Ð.>�Ô+Ø�tð
øõ ð 	ð 	ð 	ØˆDð	øøøàˆus   ›AA- Á-
A:Á9A:úOptional[Image.Image]c                ó8  — |€d S t          |t          ¦  «        rZt          j                             |¦  «        sd S 	 t          j        |¦  «                             d¦  «        S # t          $ r Y d S w xY w	 |                     d¦  «        S # t          $ r |cY S w xY w)NÚRGB)	Ú
isinstancer   ÚosÚpathÚexistsr   ÚopenÚconvertr)   )rd   rf   s     r.   rk   zStashItemMatrix._load_pilŸ   s¿   € ØÐØ�4Ý�i¥Ñ%Ô%ð 	Ý”7—>’> )Ñ,Ô,ð Ø�tðÝ”z )Ñ,Ô,×4Ò4°UÑ;Ô;Ð;øÝð ð ð Ø�t�tðøøøð	Ø×$Ò$ UÑ+Ô+Ð+øÝð 	ð 	ð 	ØÐÐÐð	øøøs#   ¼&A# Á#
A1Á0A1Á5B
 Â
BÂBr@   rA   úTuple[int, int]c                óv  — | j         �\| j         \  }}}}t          t          |||z  z   |dz  z   ¦  «        ¦  «        t          t          |||z  z   |dz  z   ¦  «        ¦  «        fS | j        dk    r| j        | j        z  nd}|dk     r•| j        dz  }| j        j        |z  }	d|dz  z  }
| j        |
z
  | j        j        |	z  z
  }| j        d	z  }t          t          |||	z  z   |	dz  z   ¦  «        ¦  «        t          t          |||	z  z   |	dz  z   ¦  «        ¦  «        fS | j        j        || j        j        z  z   | j        j        dz  z   }| j        j	        || j        j
        z  z   | j        j
        dz  z   }t          t          || j        z  ¦  «        ¦  «        t          t          || j        z  ¦  «        ¦  «        fS )
uï   TÃ­nh toÃ¡n tá»�a Ä‘á»™ pixel tuyá»‡t Ä‘á»‘i tÃ¢m cá»§a Ã´ tÃºi Ä‘á»“ (col: 0..11, row: 0..4).
        
        Há»— trá»£ 100% Ä‘á»™ phÃ¢n giáº£i chuáº©n (1080p, 1440p, 4K) láº«n cháº¿ Ä‘á»™ Windowed chia mÃ n hÃ¬nh (4:3, 16:10).
        Nç      à?r   g;ßO�—nü?gš™™™™™ù?r]   g      b@gþš¬QÑã?gbX9´Èâ?)rc   r?   ÚroundrV   rU   ra   Úcell_wÚcolsÚorigin_xÚorigin_yÚcell_hr_   r`   )rd   r@   rA   rs   rt   ru   rv   ÚaspectÚscaleÚ	cell_sizeÚpouch_marginÚraw_xÚraw_ys                r.   Úget_inventory_slot_centerz)StashItemMatrix.get_inventory_slot_center®   sß  € ð
 Ô&Ð2Ø!Ô8‰NˆB��B˜Ý•u˜R 3¨¡8™_°°S±Ñ9Ñ:Ô:Ñ;Ô;½SÅÀrÈSÐSUÉXÁÐZ\Ð_bÑZbÑGcÑAdÔAdÑ=eÔ=eÐeÐeð 59´MÀAÒ4EÐ4E�$”- $¤-Ñ/Ð/È5ˆØ�DŠ=ˆ=Ø”M FÑ*ˆEØœÔ+¨eÑ3ˆIØ  E¨G¡OÑ4ˆLØ” Ñ-°´Ô1BÀYÑ1NÑOˆBØ” Ñ&ˆBÝ•u˜R 3¨¡?Ñ3°yÀ3±ÑGÑHÔHÑIÔIÍ3ÍuÐUWÐ[^ÐajÑ[jÑUkÐoxÐ{~Ño~ÑUñ  PAô  PAñ  LBô  LBð  Bð  Bà”Ô%¨¨t¬|Ô/BÑ)BÑCÀtÄ|ÔGZÐ]`ÑG`ÑaˆØ”Ô%¨¨t¬|Ô/BÑ)BÑCÀtÄ|ÔGZÐ]`ÑG`ÑaˆÝ•5˜ ¤Ñ-Ñ.Ô.Ñ/Ô/µµU¸5À4Ä<Ñ;OÑ5PÔ5PÑ1QÔ1QÐQÐQrP   c                óB  — | j         j        || j         j        z  z   | j         j        dz  z   }| j         j        || j         j        z  z   | j         j        dz  z   }t          t          || j        z  ¦  «        ¦  «        t          t          || j        z  ¦  «        ¦  «        fS )u_   TÃ­nh toÃ¡n tá»�a Ä‘á»™ pixel tuyá»‡t Ä‘á»‘i tÃ¢m cá»§a Ã´ hÃ²m Ä‘á»“ (col: 0..11, row: 0..11).rƒ   )	rb   r‡   r…   rˆ   r‰   r?   r„   r_   r`   )rd   r@   rA   rŽ   r�   s        r.   Úget_stash_slot_centerz%StashItemMatrix.get_stash_slot_centerÅ   s�   € à”Ô'¨3°´Ô1FÑ+FÑGÈ4Ì>ÔK`ÐcfÑKfÑgˆØ”Ô'¨3°´Ô1FÑ+FÑGÈ4Ì>ÔK`ÐcfÑKfÑgˆÝ•5˜ ¤Ñ-Ñ.Ô.Ñ/Ô/µµU¸5À4Ä<Ñ;OÑ5PÔ5PÑ1QÔ1QÐQÐQrP   é   Úrgb_imgúImage.ImagerB   rC   ÚradiusrF   c           	     ó`  — t          dt          t          || j        z  ¦  «        ¦  «        ¦  «        }||z
  ||z
  ||z   ||z   f}	 |                     |¦  «        }|                     ¦   «         }|sdS t          |¦  «        t          t          |¦  «        ¦  «        z  S # t          $ r Y dS w xY w)u6   Ä�o Ä‘á»™ sÃ¡ng trung bÃ¬nh táº¡i tÃ¢m vÃ¹ng Ã´ pixel.é   rE   )
Úmaxr?   r„   r_   ÚcropÚtobytesÚsumrF   r7   r)   )	rd   r”   rB   rC   r–   ÚrÚboxÚsampleÚraws	            r.   Úmeasure_brightnessz"StashItemMatrix.measure_brightnessË   s¹   € õ �•3•u˜V d¤lÑ2Ñ3Ô3Ñ4Ô4Ñ5Ô5ˆØ˜!‰|˜X¨™\¨8°a©<¸ÀA¹ÐFˆð	Ø—\’\ #Ñ&Ô&ˆFØ—.’.Ñ"Ô"ˆCØð Ø�sÝ�s‘8”8�e¥C¨¡H¤H™oœoÑ-Ð-øÝð 	ð 	ð 	Ø�3�3ð	øøøs   Á+B Á3+B Â
B-Â,B-úList[SlotItemInfo]c                ó¾  — |                       |¦  «        }|€g S g }t          | j        j        ¦  «        D ]†}t          | j        j        ¦  «        D ]j}|                      ||¦  «        \  }}|                      |||¦  «        }|| j        j        k    }	| 	                    t          |||||	|¬¦  «        ¦  «         ŒkŒ‡| j        r| j                             |¦  «         |S )u´   
        QuÃ©t nhanh 60 Ã´ tÃºi Ä‘á»“ Ä‘á»ƒ xÃ¡c Ä‘á»‹nh cÃ¡c Ã´ cÃ³ chá»©a váº­t pháº©m.
        Tráº£ vá»� danh sÃ¡ch 60 SlotItemInfo vá»›i cá»� is_occupied vÃ  avg_rgb.
        N©r@   rA   rB   rC   rD   rG   )rk   Úrangera   Úrowsr†   r�   r¡   rW   Úbrightness_threshold_itemÚappendr>   rY   Úsync_with_optical_matrix©
rd   rf   rm   ÚresultsrA   r@   ÚcxÚcyÚ
brightnessÚis_occs
             r.   Úscan_inventory_occupancyz(StashItemMatrix.scan_inventory_occupancyÞ   s  € ð �nŠn˜YÑ'Ô'ˆØˆ;ØˆIà&(ˆÝ˜œÔ*Ñ+Ô+ð 	ð 	ˆCÝ˜Tœ\Ô.Ñ/Ô/ð ð �Ø×7Ò7¸¸SÑAÔA‘��BØ!×4Ò4°S¸"¸bÑAÔA�
Ø# d¤kÔ&KÒK�à—’�|ØØØØØ &Ø&ð ñ  ô  ñ ô ð ð ðð Ôð 	AØÔ×7Ò7¸Ñ@Ô@Ð@àˆrP   c                ó|  — |                       |¦  «        }|€g S g }t          | j        j        ¦  «        D ]†}t          | j        j        ¦  «        D ]j}|                      ||¦  «        \  }}|                      |||¦  «        }|| j        j        k    }	| 	                    t          |||||	|¬¦  «        ¦  «         ŒkŒ‡|S )u{   
        QuÃ©t nhanh 144 Ã´ trong lÆ°á»›i Stash thÆ°á»�ng (12x12).
        Tráº£ vá»� danh sÃ¡ch 144 SlotItemInfo.
        Nr¤   )rk   r¥   rb   r¦   r†   r’   r¡   rW   r§   r¨   r>   rª   s
             r.   Úscan_stash_occupancyz$StashItemMatrix.scan_stash_occupancyÿ   så   € ð �nŠn˜YÑ'Ô'ˆØˆ;ØˆIà&(ˆÝ˜œÔ,Ñ-Ô-ð 	ð 	ˆCÝ˜Tœ^Ô0Ñ1Ô1ð ð �Ø×3Ò3°C¸Ñ=Ô=‘��BØ!×4Ò4°S¸"¸bÑAÔA�
Ø# d¤kÔ&KÒK�à—’�|ØØØØØ &Ø&ð ñ  ô  ñ ô ð ð ðð ˆrP   çš™™™™™É?úOptional[int]Údelay_hoverrH   c                óÀ  — | j         rdS t          d¦  «         t          |||| j         ¬¦  «         t          j        j        }|                     t          ddd¦  «         t          j	        d¦  «         |                     t          ddd¦  «         t          j	        d¦  «         |                     t          ddd¦  «         |                     t          ddd¦  «         t          j	        d	¦  «         t          ¦   «         }|rd
|vrd|vrdS t          |¦  «        }|rA| j        r:|�8|�6| j                             ||d|j        p|j        |j        j        d¬¦  «         |S )u  
        Di chuá»™t tá»›i tÃ¢m Ã´ vÃ  trÃ­ch xuáº¥t tháº» váº­t pháº©m qua Clipboard (Ctrl+C).
        100% User Mode, khÃ´ng ghi bá»™ nhá»› game, khÃ´ng nguy cÆ¡ ban (Doc 38).
        Tá»± Ä‘á»™ng cáº­p nháº­t thuá»™c tÃ­nh vÃ o RAM Cache náº¿u cÃ³ col, row.
        Nr   )Údelay_afterr[   é   r   gš™™™™™©?é.   r3   g{®Gáz´?zItem Class:zRarity:T)r@   rA   rD   Ú	item_nameÚcategoryÚtier)r[   r<   r   r   r   r   Úkeybd_eventr   ÚtimeÚsleepr   r/   r   rY   Úupdate_slotrº   Ú	base_typer»   r'   )	rd   rB   rC   r@   rA   rµ   r   Úraw_textÚreports	            r.   Úinspect_slot_item_livez&StashItemMatrix.inspect_slot_item_live  s‚  € ð Ôð 	Ø�4õ 	! Ñ$Ô$Ð$õ 	ˆh˜¨kÈÔHYÐZÑZÔZÐZõ ”Ô%ˆØ×Ò�: t¨Q°Ñ2Ô2Ð2ÝŒ
�4ÑÔÐØ×Ò�4  q¨!Ñ,Ô,Ð,ÝŒ
�4ÑÔÐØ×Ò�4  v¨qÑ1Ô1Ð1Ø×Ò�: t¨V°QÑ7Ô7Ð7ÝŒ
�4ÑÔÐå+Ñ-Ô-ˆØð 	˜M°Ð9Ð9¸iÈxÐ>WÐ>WØ�4å˜hÑ'Ô'ˆð ð 	�dÔ(ð 	¨S¨_ÀÀØÔ×*Ò*ØØØ Ø Ô*Ð>¨fÔ.>ØœÔ.Øð +ñ ô ð ð ˆrP   )rS   rT   NNF)
rU   r?   rV   r?   rW   rX   rY   rZ   r[   r1   )rf   rg   r   r1   )rf   rg   r   rx   )r@   r?   rA   r?   r   r�   )r“   )
r”   r•   rB   r?   rC   r?   r–   r?   r   rF   )rf   rg   r   r¢   )NNr³   )rB   r?   rC   r?   r@   r´   rA   r´   rµ   rF   r   rH   )rJ   rK   rL   rM   re   rw   rk   r�   r’   r¡   r°   r²   rÄ   rO   rP   r.   rR   rR   m   s  € € € € € ØhÐhð ØØ(,Ø59Ø"ðXð Xð Xð Xð Xð0ð ð ð ð.ð ð ð ðRð Rð Rð Rð.Rð Rð Rð Rð ðð ð ð ð ð&ð ð ð ðBð ð ð ðB "Ø!Ø!ð1ð 1ð 1ð 1ð 1ð 1ð 1rP   rR   )r   r   )r0   r   r   r1   )&rM   Ú
__future__r   r   r|   r¾   Údataclassesr   Útypingr   r   r   r   r	   r
   ÚPILr   ÚImportErrorÚ(src.assistant_tool.stash.stash_constantsr   r   r   Ú,src.assistant_tool.stash.stash_memory_readerr   r   Ú!src.assistant_tool.item_inspectorr   r   r   Úsrc.common.win32_inputr   r   r   r   r/   r<   r>   rR   rO   rP   r.   ú<module>rÎ      sü  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðØÐÐÐÐÐÐøØð ð ð Ø€E€E€Eðøøøðð ð ð ð ð ð ð ð ð ð
 [Ð ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ Zðð ð ð ð ð ð ð ð ð ð
 FÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eð ð  ð  ð  ð:ð ð ð ð> ð7ð 7ð 7ð 7ð 7ñ 7ô 7ñ „ð7ð`ð `ð `ð `ð `ñ `ô `ð `ð `ð `s   ¬3 ³=¼=