§
    ¥”jA  ã                   óÌ   — d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ dd	lmZmZ dd
lmZ ddlmZ ddlmZmZ d„ Zd„ Zdd„Z G d„ de¦  «        Z G d„ d¦  «        ZdS )aa  Transform a "before layout" box tree into an "after layout" tree.

Break boxes across lines and pages; determine the size and dimension of each
box fragement.

Boxes in the new tree have *used values* in their ``position_x``,
``position_y``, ``width`` and ``height`` attributes, amongst others.

See https://www.w3.org/TR/CSS21/cascade.html#used-value

é    )Údefaultdict)Úpartial)Úinfé   )ÚboxesÚbuild)ÚPROGRESS_LOGGERé   )Úabsolute_box_layoutÚabsolute_layout)Úlayout_backgrounds)Úblock_level_layout)Úmake_all_pagesÚmake_margin_boxesc                 óv  — g | _         |j        d         }|dk    rd}nJ|dk    rd}nA|dk    r|j        d         dk    }n)|d	k    r|j        d         d
k    }n|j        d         dk    }d}d|                     ¦   «         d         dœ}dgddgidhgg f}ddg g dœ}| j                              |||||f¦  «         dS )zoInitialize ``context.page_maker``.

    Collect the pagination's states required for page based counters.

    Úbreak_beforeÚrightTÚleftFÚrectoÚ	directionÚltrÚversoÚrtlNÚanyr   )ÚbreakÚpageÚpages)Úcontent_changedÚpages_wantedÚanchorsÚcontent_lookups)Ú
page_makerÚstyleÚpage_valuesÚappend)ÚcontextÚroot_boxÚ
page_breakÚ
right_pageÚ	resume_atÚ	next_pageÚ
page_stateÚremake_states           úi/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/weasyprint/layout/__init__.pyÚinitialize_page_makerr/      s(  € ð €GÔð ” Ô/€Jð �WÒÐØˆ
ˆ
Ø	�vÒ	Ð	Øˆ
ˆ
Ø	�wÒ	Ð	Ø”^ KÔ0°EÒ9ˆ
ˆ
Ø	�wÒ	Ð	Ø”^ KÔ0°EÒ9ˆ
ˆ
à”^ KÔ0°EÒ9ˆ
Ø€IØ¨×)=Ò)=Ñ)?Ô)?ÀÔ)BÐCÐC€Ið 
ˆØ	�1�#ˆØ
ˆˆØ
ð€Jð !ØØØð	ð €Lð Ô×ÒØ�9˜j¨*°lðDñ Eô Eð Eð Eð Eó    c              #   ó  K  — |D ]†}|j         D ]|}t          |t          j        ¦  «        r|                     ¦   «         }g }t          | |||t           d¬¦  «        \  }}|V — |r&g }|D ]}t          | |||t           d¬¦  «         Œ|}|°&Œ}Œ‡dS )zBLay out and yield fixed boxes of ``pages`` on ``containing_page``.N)Úbottom_spaceÚ
skip_stack)Úfixed_boxesÚ
isinstancer   ÚReplacedBoxÚcopyr   r   r   )	r&   r   Úcontaining_pager   ÚboxÚabsolute_boxesÚabsolute_boxÚ_Únew_absolute_boxess	            r.   Úlayout_fixed_boxesr>   N   só   è è € àð 4ð 4ˆØÔ#ð 	4ð 	4ˆCõ ˜#�uÔ0Ñ1Ô1ð !Ø—h’h‘j”j�ð  ˆNÝ1Ø˜˜o¨~Ý!˜T¨dð4ñ 4ô 4‰OˆL˜!ð ÐÐÐØ ð 4Ø%'Ð"Ø)ð <ð <�CÝ#Ø  oÐ7IÝ&) T°dð<ñ <ô <ð <ð <ð "4�ð !ð 4øð	4ð4ð 4r0   é   c           
   #   ó   K  — t          ||¦  «         g }g }d}t          |¦  «        D ]Ç}|dk    r.t          j        d|¦  «         |                     ¦   «         |_        |}|dk    r|j                             ¦   «         }t          t          ||| |¦  «        ¦  «        }t          |¦  «        }d}	d}
|j	        D ]0}|\  }}}}}|d         }|g|d<   |d         rd}	|d         r||k    }
Œ1|	s|
s nŒÈg }g }g }t          |¦  «        D �]a\  }}|j	        |dz            \  }}}}}|d         }|                     ¦   «         D �]'}|j        rg|j                             d	¦  «        r|}n|j                             d
¦  «        r|}n|}|j        |v rd|_        n|                     |j        ¦  «         |j        rm|j        j                             ¦   «         D ]N\  \  }}}|j        |k    r;|dk    r5|dk    r|j        sŒ'|                     |¦  «         |dk    r|j        |_        ŒO|j        }|r9|dk    r3|D ]0}|\  }}|j        |         |dz                                 |¦  «         Œ1�Œ)�Œct          |¦  «        D �]\  }}g }|j        \  }} |                     t3          ||d|…         |¦  «        ¦  «         |                     |j        ¦  «         |                     t3          |||dz   d…         |¦  «        ¦  «         ||_        |dz   |_        |j	        |j                 d         }!|f|_        | j        r|xj        | fz  c_        |xj        t7          t9          |||!¦  «        ¦  «        z  c_        t;          ||j        ¦  «         |V — �ŒdS )a¦  Lay out the whole document.

    This includes line breaks, page breaks, absolute size and position for all
    boxes. Page based counters might require multiple passes.

    :param root_box:
        Root of the box tree (formatting structure of the HTML). The page boxes
        are created from that tree, this structure is not lost during
        pagination.
    :returns:
        A list of laid out Page objects.

    r   z+Step 5 - Creating layout - Repagination #%dFr
   r   r   Tr   z::beforez::afterÚ Úcontentzbookmark-labelÚnoneNé   )r/   Úranger	   Úinfor7   Ú	footnotesÚlistr   Úlenr"   Ú	enumerateÚdescendantsÚbookmark_labelÚelement_tagÚendswithÚelementr%   Úmissing_linkÚtarget_collectorÚcounter_lookup_itemsÚitemsÚparse_againÚ
string_setÚchildrenÚextendr>   Úcurrent_pageÚtupler   r   Úget_image_from_uri)"Úhtmlr'   r&   Ú	max_loopsr   Úoriginal_footnotesÚactual_total_pagesÚloopÚinitial_total_pagesÚreloop_contentÚreloop_pagesÚ	page_datar<   r,   r-   Úpage_counter_valuesÚwatch_elementsÚwatch_elements_beforeÚwatch_elements_afterÚir   ÚchildÚ	checklistr9   Ú	css_tokenÚitemÚstring_setsrU   Ústring_nameÚtextÚroot_childrenÚrootÚfootnote_areaÚstates"                                     r.   Úlayout_documentrt   g   s}  è è € õ ˜' 8Ñ,Ô,Ð,Ø€EØÐØÐå�iÑ Ô ð ð ˆØ�!Š8ˆ8ÝÔ Ø=¸tñEô Eð Eà 2× 7Ò 7Ñ 9Ô 9ˆGÔà0ÐØ�1Š9ˆ9Ø!(Ô!2×!7Ò!7Ñ!9Ô!9ÐÝ•^ G¨X°t¸UÑCÔCÑDÔDˆÝ  ™ZœZÐð ˆØˆØ Ô+ð 	Ið 	IˆIà09Ñ-ˆAˆq�!�Z Ø",¨Q¤-ÐØ,>Ð+?Ð Ñ(ØÐ-Ô.ð &Ø!%�Ø˜NÔ+ð IØ2Ð6HÒH�øð ð 	 lð 	ØˆEøð €NØÐØÐÝ˜UÑ#Ô#ð %Fñ %F‰ˆˆ4à!(Ô!3°A¸±EÔ!:Ñˆˆ1ˆa�˜QØ(¨œmÐà×%Ò%Ñ'Ô'ð  	Fñ  	FˆEàÔ#ð 
4ØÔ$×-Ò-¨jÑ9Ô9ð /Ø 5�I�IØÔ&×/Ò/°	Ñ:Ô:ð /Ø 4�I�Ià .�IØ”= IÐ-Ð-Ø+-�EÔ(Ð(à×$Ò$ U¤]Ñ3Ô3Ð3àÔ!ð FàÔ0ÔE×KÒKÑMÔMðFð FÑ*Ñ$�S˜) dàÔ)¨SÒ0Ð0°YÀ)Ò5KÐ5KØ%Ð)9Ò9Ð9Ø$)Ô$8ð :ð %Ø×(Ò(Ð)<Ñ=Ô=Ð=ð %Ð(8Ò8Ð8Ø36Ô3E˜EÔ0øàÔ*ˆKØð F˜{¨fÒ4Ð4Ø"-ð Fð F�JØ(2Ñ%�K ØÔ& {Ô3°A°a±CÔ8×?Ò?ÀÑEÔEÐEÐEùñA 	FõF ˜UÑ#Ô#ð ñ ‰ˆˆ4ØˆØ"œmÑˆˆmØ×ÒÕ/°¸¸rÀ¸r¼ÀDÑIÔIÑJÔJÐJØ×Ò˜Tœ]Ñ+Ô+Ð+Ø×ÒÕ/°¸¸qÀ1¹u¸v¸v¼ÈÑMÔMÑNÔNÐNØ%ˆŒØ  1™uˆÔð Ô" 7Ô#7Ô8¸Ô;ˆØ˜ˆŒØÔ!ð 	.ØˆMŒM˜mÐ-Ñ-ˆMŒMØˆŒ�Õ0°¸$ÀÑFÔFÑGÔGÑGˆŒÝ˜4 Ô!;Ñ<Ô<Ð<Øˆ
ˆ
ˆ
‰
ð!ð r0   c                   ó   — e Zd ZdZd„ ZdS )ÚFakeListu)   List in which you canâ€™t append objects.c                 ó   — d S ©N© )Úselfrl   s     r.   r%   zFakeList.appendÝ   s   € Øˆr0   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   ry   r0   r.   rv   rv   Û   s)   € € € € € Ø3Ð3ðð ð ð ð r0   rv   c                   ó¶   — e Zd Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zej	        d„ ¦   «         Zdd„Z
dd„Zd	„ Zd
„ Zd„ Zdd„Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚLayoutContextc                 ó‚  — || _         t          || ¬¦  «        | _        || _        || _        || _        g | _        i | _        g | _        i | _	        g | _
        g | _        d | _        d | _        t          d„ ¦  «        | _        t          d„ ¦  «        | _        d | _        d| _        i | _        d| _        i | _        i | _        d S )N)r&   c                  ó*   — t          t          ¦  «        S rx   ©r   rH   ry   r0   r.   ú<lambda>z(LayoutContext.__init__.<locals>.<lambda>ñ   s   € ­k½$Ñ.?Ô.?€ r0   c                  ó*   — t          t          ¦  «        S rx   rƒ   ry   r0   r.   r„   z(LayoutContext.__init__.<locals>.<lambda>ò   s   € µKÅÑ4EÔ4E€ r0   F)Ú	style_forr   rZ   Úfont_configÚcounter_stylerQ   Ú_excluded_shapes_root_boxesÚ_excluded_shapesrG   Úpage_footnotesÚcurrent_page_footnotesÚreported_footnotesÚcurrent_footnote_areaÚpage_bottomr   rU   Úrunning_elementsrX   Úforced_breakÚbroken_out_of_flowÚ	in_columnÚtablesÚdictionaries)rz   r†   rZ   r‡   rˆ   rQ   s         r.   Ú__init__zLayoutContext.__init__â   sÓ   € à"ˆŒÝ")Ð*<ÀdÐ"KÑ"KÔ"KˆÔØ&ˆÔØ*ˆÔØ 0ˆÔØ+-ˆÔ(Ø "ˆÔØˆŒØ ˆÔØ&(ˆÔ#Ø"$ˆÔØ%)ˆÔ"ØˆÔÝ%Ð&?Ð&?Ñ@Ô@ˆŒÝ +Ð,EÐ,EÑ FÔ FˆÔØ ˆÔØ!ˆÔØ"$ˆÔØˆŒð ˆŒØˆÔÐÐr0   c                 ó>   — |                       | j        |z
  |¦  «        S rx   )Ú	overflowsr�   )rz   r2   Ú
position_ys      r.   Úoverflows_pagezLayoutContext.overflows_pageü   s   € Ø�~Š~˜dÔ.°Ñ=¸zÑJÔJÐJr0   c                 ó   — || dz  k    S )Ng0¸D   ð?ry   )Úbottomr™   s     r.   r˜   zLayoutContext.overflowsÿ   s   € ð ˜F hÑ/Ò/Ð/r0   c                 ó2   — | j         | j        d                  S ©Néÿÿÿÿ©rŠ   r‰   )rz   s    r.   Úexcluded_shapeszLayoutContext.excluded_shapes  s   € àÔ$ TÔ%EÀbÔ%IÔJÐJr0   c                 ó0   — || j         | j        d         <   d S rž   r    )rz   r¡   s     r.   r¡   zLayoutContext.excluded_shapes	  s   € àFUˆÔ˜dÔ>¸rÔBÑCÐCÐCr0   Nc                 ó‚   — || j         vsJ ‚| j                              |¦  «         || j        vr|€g n|| j        |<   d S d S rx   )r‰   r%   rŠ   )rz   r'   Únew_lists      r.   Úcreate_block_formatting_contextz-LayoutContext.create_block_formatting_context  s_   € Ø˜tÔ?Ð?Ð?Ð?Ð?ØÔ(×/Ò/°Ñ9Ô9Ð9Ø˜4Ô0Ð0Ð0Ø4<Ð4D¨b¨bÈ(ˆDÔ! (Ñ+Ð+Ð+ð 1Ð0r0   c                 ó>  — |ri|j         d         dk    rX| j        rQ|                     ¦   «         |j        z   }t	          d„ | j        D ¦   «         |gz   ¦  «        }|xj        ||z
  z  c_        | j                             | j                             ¦   «         ¦  «         d S )NÚheightÚautoc                 óF   — g | ]}|j         |                     ¦   «         z   ‘ŒS ry   )r™   Úmargin_height)Ú.0Úshapes     r.   ú
<listcomp>zALayoutContext.finish_block_formatting_context.<locals>.<listcomp>  s<   € ð $3ð $3ð $3àð Ô  5×#6Ò#6Ñ#8Ô#8Ñ8ð$3ð $3ð $3r0   )r#   r¡   Úcontent_box_yr§   ÚmaxrŠ   Úpopr‰   )rz   r'   Ú
box_bottomÚmax_shape_bottoms       r.   Úfinish_block_formatting_contextz-LayoutContext.finish_block_formatting_context  s»   € àð 	=˜œ xÔ0°FÒ:Ð:¸tÔ?SÐ:Ø!×/Ò/Ñ1Ô1°H´OÑCˆJÝ"ð $3ð $3à!Ô1ð$3ñ $3ô $3à6@°\ñ$Bñ  Cô  CÐð ˆOŒOÐ/°*Ñ<Ñ<ˆOŒOØÔ×!Ò! $Ô"B×"FÒ"FÑ"HÔ"HÑIÔIÐIÐIÐIr0   c                 óJ   — |                       |t          ¦   «         ¦  «         d S rx   )r¥   rv   ©rz   r'   s     r.   Úcreate_flex_formatting_contextz,LayoutContext.create_flex_formatting_context  s"   € Ø×,Ò,¨Xµx±z´zÑBÔBÐBÐBÐBr0   c                 ó0   — |                       |¦  «         d S rx   )r³   rµ   s     r.   Úfinish_flex_formatting_contextz,LayoutContext.finish_flex_formatting_context   s   € Ø×,Ò,¨XÑ6Ô6Ð6Ð6Ð6r0   c                 ó8   — ||| j         d         |f| j        |<   d S rž   )r‰   r’   )rz   Únew_boxr9   Úcontaining_blockr*   s        r.   Úadd_broken_out_of_flowz$LayoutContext.add_broken_out_of_flow#  s*   € àÐ! 4Ô#CÀBÔ#GÈð,TˆÔ Ñ(Ð(Ð(r0   Úfirstc                 ó<   — |                       | j        |||¦  «        S )z!Resolve value of string function.)Úget_string_or_element_forrU   ©rz   r   ÚnameÚkeywords       r.   Úget_string_set_forz LayoutContext.get_string_set_for'  s%   € à×-Ò-ØŒO˜T 4¨ñ2ô 2ð 	2r0   c                 ó<   — |                       | j        |||¦  «        S )z"Resolve value of element function.)r¿   r�   rÀ   s       r.   Úget_running_element_forz%LayoutContext.get_running_element_for,  s&   € à×-Ò-ØÔ! 4¨¨wñ8ô 8ð 	8r0   c                 óÎ  — | j         ||         v r™||         | j                  d         }||         | j                  d         }|dk    r|S |dk    rI|}|rD|j        d         dk    r|j        d         D ]\  }}	||k    r|c S Œ|j        r|j        d         }ŒE	 n|dk    r|S |dk    rd	S t          | j         d
z
  dd¦  «        D ]"}
|
||         v r||         |
         d         c S Œ#d	S )aZ  Resolve value of string or element function.

        We'll have something like this that represents all assignments on a
        given page:

        {1: ['First Header'], 3: ['Second Header'],
         4: ['Third Header', '3.5th Header']}

        Value depends on current page.
        https://drafts.csswg.org/css-gcpm/#funcdef-string

        :param dict store:
            Dictionary where the resolved value is stored.
        :param page:
            Current page.
        :param str name:
            Name of the named string or running element.
        :param str keyword:
            Indicates which value of the named string or running element to
            use. Default is the first assignment on the current page else the
            most recent assignment.
        :returns:
            Text for string set, box for running element.

        r   rŸ   r½   ÚstartrU   rC   Úlastzfirst-exceptNr
   )rX   r#   rV   rE   )rz   Ústorer   rÁ   rÂ   Úfirst_stringÚlast_stringrO   rn   r<   Úprevious_pages              r.   r¿   z'LayoutContext.get_string_or_element_for1  sO  € ð4 Ô  d¤Ð+Ð+à  œ; tÔ'8Ô9¸!Ô<ˆLØ œ+ dÔ&7Ô8¸Ô<ˆKØ˜'Ò!Ð!Ø#Ð#Ø˜GÒ#Ð#Ø�Øð Ø”} \Ô2°fÒ<Ð<Ø07´¸lÔ0Kð 4ð 4Ñ,˜[¨!Ø*¨dÒ2Ð2Ø'3Ð 3Ð 3Ð 3ð  3àÔ'ð !Ø")Ô"2°1Ô"5˜Ø ØøØ˜FÒ"Ð"Ø"Ð"Ø˜NÒ*Ð*Ø�å" 4Ô#4°qÑ#8¸!¸RÑ@Ô@ð 	6ð 	6ˆMØ  d¤Ð+Ð+Ø˜T”{ =Ô1°"Ô5Ð5Ð5Ð5ð ,ð	6ð 	6r0   c                 ó’   — | j                              |¦  «         | j                             |¦  «         |                      ¦   «         S )z+Add a footnote to the layout for this page.)rG   ÚremoverŒ   r%   Ú_update_footnote_area©rz   Úfootnotes     r.   Úlayout_footnotezLayoutContext.layout_footnotee  sA   € àŒ×Ò˜hÑ'Ô'Ð'ØÔ#×*Ò*¨8Ñ4Ô4Ð4Ø×)Ò)Ñ+Ô+Ð+r0   c                 ó  — || j         vrw| j                              |¦  «         || j        v r| j                             |¦  «         n#|| j        v r| j                             |¦  «         |                      ¦   «          dS dS )z@Remove a footnote from the layout and return it to the waitlist.N)rG   r%   rŒ   rÎ   r�   rÏ   rÐ   s     r.   Úunlayout_footnotezLayoutContext.unlayout_footnotek  s”   € ð ˜4œ>Ð)Ð)ØŒN×!Ò! (Ñ+Ô+Ð+Ø˜4Ô6Ð6Ð6ØÔ+×2Ò2°8Ñ<Ô<Ð<Ð<Ø˜TÔ4Ð4Ð4ØÔ'×.Ò.¨xÑ8Ô8Ð8Ø×&Ò&Ñ(Ô(Ð(Ð(Ð(ð *Ð)r0   c                 ó–   — | j                              |¦  «         | j                             |¦  «         |                      ¦   «          dS )z0Mark a footnote as being moved to the next page.N)rŒ   rÎ   r�   r%   rÏ   rÐ   s     r.   Úreport_footnotezLayoutContext.report_footnotew  sH   € àÔ#×*Ò*¨8Ñ4Ô4Ð4ØÔ×&Ò& xÑ0Ô0Ð0Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$r0   c                 ó  — | j         j        dk    r.| j        s'| xj        | j                              ¦   «         z  c_        | j        | j         _        | j         j        rët          j        | j          	                    ¦   «         ¦  «        }t          | |t           d| j         j        ¦  «        d         }|j        | j         _        | j        s"| xj        |                     ¦   «         z  c_        |j        d         }|j        |                     ¦   «         z   |j        z
  }|j        |                     ¦   «         z   |j        z
  }||k    }|S d| j         _        | j        s'| xj        | j                              ¦   «         z  c_        dS )z9Update the page bottom size and our footnote area height.r¨   Nr   rŸ   F)rŽ   r§   r“   r�   rª   rŒ   rV   r   Úcreate_anonymous_boxesÚdeepcopyr   r   r   r™   Úmargin_bottom)rz   rr   Ú
last_childÚlast_child_bottomÚfootnote_area_bottomÚoverflows         r.   rÏ   z#LayoutContext._update_footnote_area}  s�  € àÔ%Ô,°Ò6Ð6¸t¼~Ð6ØÐÔ Ô :× HÒ HÑ JÔ JÑJÐÔØ.2Ô.IˆÔ"Ô+ØÔ%Ô.ð 	Ý!Ô8ØÔ*×3Ò3Ñ5Ô5ñ7ô 7ˆMå.Ø�m¥c T¨4ØÔ*Ô/ñ1ô 1à12ô4ˆMð 1>Ô0DˆDÔ&Ô-Ø”>ð BØÐ Ô  M×$?Ò$?Ñ$AÔ$AÑAÐ Ô Ø&Ô/°Ô3ˆJàÔ%¨
×(@Ò(@Ñ(BÔ(BÑBØÔ(ñ)ð ð Ô(¨=×+FÒ+FÑ+HÔ+HÑHØÔ+ñ,ð !ð )Ð+?Ò?ˆHØˆOà01ˆDÔ&Ô-Ø”>ð OØÐ Ô  DÔ$>×$LÒ$LÑ$NÔ$NÑNÐ Ô Ø�5r0   )NNrx   )r½   )r{   r|   r}   r–   rš   Ústaticmethodr˜   Úpropertyr¡   Úsetterr¥   r³   r¶   r¸   r¼   rÃ   rÅ   r¿   rÒ   rÔ   rÖ   rÏ   ry   r0   r.   r€   r€   á   sg  € € € € € ðð ð ð4Kð Kð Kð ð0ð 0ñ „\ð0ð
 ðKð Kñ „XðKð ÔðVð Vñ ÔðVðSð Sð Sð SðJð Jð Jð JðCð Cð Cð7ð 7ð 7ðTð Tð Tð2ð 2ð 2ð 2ð
8ð 8ð 8ð 8ð
26ð 26ð 26ðh,ð ,ð ,ð
)ð 
)ð 
)ð%ð %ð %ðð ð ð ð r0   r€   N)r?   )r~   Úcollectionsr   Ú	functoolsr   Úmathr   Úformatting_structurer   r   Úloggerr	   Úabsoluter   r   Ú
backgroundr   Úblockr   r   r   r   r/   r>   rt   rH   rv   r€   ry   r0   r.   ú<module>rê      sf  ðð
ð 
ð $Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø $Ð $Ð $Ð $Ð $Ð $Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø *Ð *Ð *Ð *Ð *Ð *Ø %Ð %Ð %Ð %Ð %Ð %Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3ð2Eð 2Eð 2Eðj4ð 4ð 4ð2qð qð qð qðhð ð ð ð ˆtñ ô ð ðwð wð wð wð wñ wô wð wð wð wr0   