§
    óäMf¯�  ã                   ó¾  — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ ddlmZ dd	lm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 ddl m!Z! ddl"m#Z#m$Z$ d%d„Z%d„ Z&d„ Z'd„ Z(d„ Z) edg d¢¦  «        Z* edg d¢¦  «        Z+ e+dddd¬¦  «        Z, G d„ d¦  «        Z- G d„ d e-¦  «        Z. G d!„ d"e-¦  «        Z/ G d#„ d$e-¦  «        Z0dS )&zk
Pagination serializers determine the structure of the output that should
be used for paginated responses.
é    N)Ú	b64decodeÚ	b64encode)Ú
namedtuple)Úparse)ÚInvalidPage)Ú	Paginator)ÚQ)Úloader)Ú	force_str)Úgettext_lazy)ÚRemovedInDRF317Warning)ÚcoreapiÚ
coreschema)ÚNotFound)ÚResponse)Úapi_settings)Úremove_query_paramÚreplace_query_paramFc                 ó€   — t          | ¦  «        }|dk     s|dk    r|rt          ¦   «         ‚|rt          ||¦  «        S |S )z7
    Cast a string to a strictly positive integer.
    r   )ÚintÚ
ValueErrorÚmin)Úinteger_stringÚstrictÚcutoffÚrets       úXC:\Users\psant\Downloads\sloar back\myenv\Lib\site-packages\rest_framework/pagination.pyÚ_positive_intr      sM   € õ ˆnÑ
Ô
€CØ
ˆQ‚w€w�3˜!’8�8 �8Ý‰lŒlÐØð  Ý�3˜ÑÔÐØ€Jó    c                 ó&   — | |z  r| |z  dz   S | |z  S )zD
    Returns 'a' divided by 'b', with any remainder rounded up.
    é   © )ÚaÚbs     r   Ú_divide_with_ceilr%   '   s'   € ð 	ˆ1�uð Ø�Q‘˜!‰|Ðà�‰6€Mr   c                 ó,  ‡— | dk    sJ ‚‰| k    sJ ‚‰dk    r t          t          d‰dz   ¦  «        ¦  «        S d| dz
  | | dz   ‰h}| dk    r*|                     d¦  «         |                     d¦  «         | ‰dz
  k    r0|                     ‰dz
  ¦  «         |                     ‰dz
  ¦  «         ˆfd„t          |¦  «        D ¦   «         }| dk    r|                     dd¦  «         | ‰dz
  k     r&|                     t          |¦  «        dz
  d¦  «         |S )aŒ  
    This utility function determines a list of page numbers to display.
    This gives us a nice contextually relevant set of page numbers.

    For example:
    current=14, final=16 -> [1, None, 13, 14, 15, 16]

    This implementation gives one page to each side of the cursor,
    or two pages to the side when the cursor is at the edge, then
    ensures that any breaks between non-continuous page numbers never
    remove only a single page.

    For an alternative implementation which gives two pages to each side of
    the cursor, eg. as in GitHub issue list pagination, see:

    https://gist.github.com/tomchristie/321140cebb1c4a558b15
    r!   é   é   é   é   c                 ó4   •— g | ]}d |cxk     r‰k    ¯n n|‘ŒS )r   r"   )Ú.0ÚidxÚfinals     €r   ú
<listcomp>z/_get_displayed_page_numbers.<locals>.<listcomp>W   sE   ø€ ð ð ð ØØˆsÐÐÒÐ�eÒÐÐÐÐð 	ØÐÐr   N)ÚlistÚrangeÚaddÚsortedÚinsertÚlen)Úcurrentr.   Úincludeds    ` r   Ú_get_displayed_page_numbersr8   1   sH  ø€ ð$ �aŠ<ˆ<ˆ<ˆ<Ø�GÒÐÐÐà�‚z€zÝ•E˜!˜U Q™YÑ'Ô'Ñ(Ô(Ð(ð �7˜Q‘; ¨°1©°eÐ<€Hð �!‚|€|Ø�Š�Q‰ŒˆØ�Š�Q‰ŒˆØ�%˜!‘)ÒÐØ�Š�U˜Q‘YÑÔÐØ�Š�U˜Q‘YÑÔÐðð ð ð Ý˜hÑ'Ô'ðñ ô €Hð �‚{€{Ø�Š˜˜4Ñ Ô Ð Ø�˜‘ÒÐØ�Š�˜H™œ¨Ñ)¨4Ñ0Ô0Ð0Ø€Or   c                 ó’   — g }| D ]A}|€t           }n t           ||¦  «        |||k    d¬¦  «        }|                     |¦  «         ŒB|S )zg
    Given a list of page numbers and `None` page breaks,
    return a list of `PageLink` objects.
    NF©ÚurlÚnumberÚ	is_activeÚis_break)Ú
PAGE_BREAKÚPageLinkÚappend)Úpage_numbersr6   Úurl_funcÚ
page_linksÚpage_numberÚ	page_links         r   Ú_get_page_linksrG   d   ss   € ð
 €JØ#ð 
%ð 
%ˆØÐÝ"ˆIˆIå Ø�H˜[Ñ)Ô)Ø"Ø&¨'Ò1Øð	ñ ô ˆIð 	×Ò˜)Ñ$Ô$Ð$Ð$ØÐr   c                 ó@   ‡— d„ Št          ˆfd„| D ¦   «         ¦  «        S )z�
    Given an order_by tuple such as `('-created', 'uuid')` reverse the
    ordering and return a new tuple, eg. `('created', '-uuid')`.
    c                 óJ   — |                       d¦  «        r
| dd …         nd| z   S )Nú-r!   )Ú
startswith)Úxs    r   Úinvertz!_reverse_ordering.<locals>.invert}   s)   € ØŸš SÑ)Ô)Ð6ˆq���Œuˆu¨s°Q©wÐ6r   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r"   r"   )r,   ÚitemrM   s     €r   r/   z%_reverse_ordering.<locals>.<listcomp>€   s!   ø€ Ð:Ð:Ð: 4�&�&˜‘,”,Ð:Ð:Ð:r   )Útuple)Úordering_tuplerM   s    @r   Ú_reverse_orderingrR   x   s7   ø€ ð
7ð 7ð 7õ Ð:Ð:Ð:Ð:¨>Ð:Ñ:Ô:Ñ;Ô;Ð;r   ÚCursor©ÚoffsetÚreverseÚpositionr@   r:   Tc                   ó>   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dS )ÚBasePaginationFNc                 ó    — t          d¦  «        ‚)Nz(paginate_queryset() must be implemented.©ÚNotImplementedError©ÚselfÚquerysetÚrequestÚviews       r   Úpaginate_querysetz BasePagination.paginate_querysetŒ   s   € Ý!Ð"LÑMÔMÐMr   c                 ó    — t          d¦  «        ‚)Nz-get_paginated_response() must be implemented.r[   ©r^   Údatas     r   Úget_paginated_responsez%BasePagination.get_paginated_response�   s   € Ý!Ð"QÑRÔRÐRr   c                 ó   — |S ©Nr"   ©r^   Úschemas     r   Úget_paginated_response_schemaz,BasePagination.get_paginated_response_schema’   s   € Øˆr   c                 ó    — t          d¦  «        ‚)Nz7to_html() must be implemented to display page controls.r[   ©r^   s    r   Úto_htmlzBasePagination.to_html•   s   € Ý!Ð"[Ñ\Ô\Ð\r   c                 ó   — |d         S )NÚresultsr"   rd   s     r   Úget_resultszBasePagination.get_results˜   s   € Ø�IŒÐr   c                 ój   — t           €
J d¦   «         ‚t           �t          j        dt          ¦  «         g S )Nú6coreapi must be installed to use `get_schema_fields()`úCCoreAPI compatibility is deprecated and will be removed in DRF 3.17)r   ÚwarningsÚwarnr   ©r^   ra   s     r   Úget_schema_fieldsz BasePagination.get_schema_fields›   s6   € ÝÐ"Ð"Ð$\Ñ"Ô"Ð"ÝÐÝŒMÐ_ÕawÑxÔxÐxØˆ	r   c                 ó   — g S rh   r"   rw   s     r   Úget_schema_operation_parametersz.BasePagination.get_schema_operation_parameters¡   s   € Øˆ	r   rh   )Ú__name__Ú
__module__Ú__qualname__Údisplay_page_controlsrb   rf   rk   rn   rq   rx   rz   r"   r   r   rY   rY   ‰   s’   € € € € € Ø!ÐðNð Nð Nð NðSð Sð Sðð ð ð]ð ]ð ]ðð ð ðð ð ðð ð ð ð r   rY   c                   ó¾   — e Zd ZdZej        ZeZdZ	 e
d¦  «        ZdZ e
d¦  «        ZdZdZdZ e
d¦  «        Zdd	„Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚPageNumberPaginationzÒ
    A simple page number based style that supports page numbers as
    query parameters. For example:

    http://api.example.org/accounts/?page=4
    http://api.example.org/accounts/?page=4&page_size=100
    Úpagez.A page number within the paginated result set.Nú%Number of results to return per page.)Úlastú&rest_framework/pagination/numbers.htmlzInvalid page.c                 óÀ  — || _         |                      |¦  «        }|sdS |                      ||¦  «        }|                      ||¦  «        }	 |                     |¦  «        | _        nJ# t
          $ r=}| j                             |t          |¦  «        ¬¦  «        }t          |¦  «        ‚d}~ww xY w|j
        dk    r| j        �d| _        t          | j        ¦  «        S )z“
        Paginate a queryset if required, either returning a
        page object, or `None` if pagination is not configured for this view.
        N)rE   Úmessager!   T)r`   Úget_page_sizeÚdjango_paginator_classÚget_page_numberr�   r   Úinvalid_page_messageÚformatÚstrr   Ú	num_pagesÚtemplater~   r0   )	r^   r_   r`   ra   Ú	page_sizeÚ	paginatorrE   ÚexcÚmsgs	            r   rb   z&PageNumberPagination.paginate_querysetÆ   sñ   € ð
 ˆŒØ×&Ò& wÑ/Ô/ˆ	Øð 	Ø�4à×/Ò/°¸)ÑDÔDˆ	Ø×*Ò*¨7°IÑ>Ô>ˆð	 Ø!Ÿš {Ñ3Ô3ˆDŒIˆIøÝð 	 ð 	 ð 	 ØÔ+×2Ò2Ø'µ°S±´ð 3ñ ô ˆCõ ˜3‘-”-Ðøøøøð		 øøøð Ô Ò"Ð" t¤}Ð'@à)-ˆDÔ&å�D”I‰ŒÐs   ÁA) Á)
B0Á38B+Â+B0c                 óh   — |j                              | j        ¦  «        pd}|| j        v r|j        }|S ©Nr!   )Úquery_paramsÚgetÚpage_query_paramÚlast_page_stringsr�   )r^   r`   r�   rE   s       r   r‰   z$PageNumberPagination.get_page_numberá   s<   € ØÔ*×.Ò.¨tÔ/DÑEÔEÐJÈˆØ˜$Ô0Ð0Ð0Ø#Ô-ˆKØÐr   c                 ó�   — t          | j        j        j        |                      ¦   «         |                      ¦   «         |dœ¦  «        S ©N©ÚcountÚnextÚpreviousrp   )r   r�   r�   rœ   Úget_next_linkÚget_previous_linkrd   s     r   rf   z+PageNumberPagination.get_paginated_responseç   sJ   € ÝØ”YÔ(Ô.Ø×&Ò&Ñ(Ô(Ø×.Ò.Ñ0Ô0Øð	
ð 
ñ ô ð 	r   c           
      óš   — dddgdddœddd	d
                      | j        ¬¦  «        dœddd	d                      | j        ¬¦  «        dœ|dœdœS )NÚobjectrœ   rp   Úintegeré{   ©ÚtypeÚexampleÚstringTÚuriz5http://api.example.org/accounts/?{page_query_param}=4)r—   ©r¦   Únullabler‹   r§   z5http://api.example.org/accounts/?{page_query_param}=2r›   ©r¦   ÚrequiredÚ
properties)r‹   r—   ri   s     r   rk   z2PageNumberPagination.get_paginated_response_schemaï   s©   € àØ  )Ð,ð &Ø"ðð ð
 %Ø $Ø#ØV×]Ò]Ø)-Ô)>ð  ^ñ  @ô  @ð	ð ð %Ø $Ø#ØV×]Ò]Ø)-Ô)>ð  ^ñ  @ô  @ð	ð ð "ð'ð ð
ð 
ð 	
r   c                 óÚ   — | j         r^t          j        t          t          ¦  «        5  t          |j        | j                  d| j        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   | j        S ©NT)r   r   ©	Úpage_size_query_paramÚ
contextlibÚsuppressÚKeyErrorr   r   r•   Úmax_page_sizer�   ©r^   r`   s     r   r‡   z"PageNumberPagination.get_page_size
  ó­   € ØÔ%ð 	ÝÔ$¥X­zÑ:Ô:ð ð Ý$ØÔ(¨Ô)CÔDØØÔ-ðñ ô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Œ~Ðó   §'AÁAÁ"Ac                 óÈ   — | j                              ¦   «         sd S | j                             ¦   «         }| j                              ¦   «         }t          || j        |¦  «        S rh   )r�   Úhas_nextr`   Úbuild_absolute_uriÚnext_page_numberr   r—   ©r^   r;   rE   s      r   rŸ   z"PageNumberPagination.get_next_link  sX   € ØŒy×!Ò!Ñ#Ô#ð 	Ø�4ØŒl×-Ò-Ñ/Ô/ˆØ”i×0Ò0Ñ2Ô2ˆÝ" 3¨Ô(=¸{ÑKÔKÐKr   c                 óþ   — | j                              ¦   «         sd S | j                             ¦   «         }| j                              ¦   «         }|dk    rt          || j        ¦  «        S t          || j        |¦  «        S r”   )r�   Úhas_previousr`   r¼   Úprevious_page_numberr   r—   r   r¾   s      r   r    z&PageNumberPagination.get_previous_link  sv   € ØŒy×%Ò%Ñ'Ô'ð 	Ø�4ØŒl×-Ò-Ñ/Ô/ˆØ”i×4Ò4Ñ6Ô6ˆØ˜!ÒÐÝ% c¨4Ô+@ÑAÔAÐAÝ" 3¨Ô(=¸{ÑKÔKÐKr   c                 ó  ‡ ‡— ‰ j                              ¦   «         Šˆˆ fd„}‰ j        j        }‰ j        j        j        }t          ||¦  «        }t          |||¦  «        }‰                      ¦   «         ‰  	                    ¦   «         |dœS )Nc                 óf   •— | dk    rt          ‰‰j        ¦  «        S t          ‰‰j        | ¦  «        S r”   )r   r—   r   )rE   Úbase_urlr^   s    €€r   Úpage_number_to_urlzAPageNumberPagination.get_html_context.<locals>.page_number_to_url'  s6   ø€ Ø˜aÒÐÝ)¨(°DÔ4IÑJÔJÐJå*¨8°TÔ5JÈKÑXÔXÐXr   ©Úprevious_urlÚnext_urlrD   )
r`   r¼   r�   r<   r�   r�   r8   rG   r    rŸ   )r^   rÅ   r6   r.   rB   rD   rÄ   s   `     @r   Úget_html_contextz%PageNumberPagination.get_html_context$  s§   øø€ Ø”<×2Ò2Ñ4Ô4ˆð	Yð 	Yð 	Yð 	Yð 	Yð 	Yð ”)Ô"ˆØ”	Ô#Ô-ˆÝ2°7¸EÑBÔBˆÝ$ \°7Ð<NÑOÔOˆ
ð !×2Ò2Ñ4Ô4Ø×*Ò*Ñ,Ô,Ø$ð
ð 
ð 	
r   c                 ó†   — t          j        | j        ¦  «        }|                      ¦   «         }|                     |¦  «        S rh   ©r
   Úget_templaterŽ   rÉ   Úrender©r^   rŽ   Úcontexts      r   rn   zPageNumberPagination.to_html8  ó7   € ÝÔ& t¤}Ñ5Ô5ˆØ×'Ò'Ñ)Ô)ˆØ�Š˜wÑ'Ô'Ð'r   c                 óÎ  — t           €
J d¦   «         ‚t           �t          j        dt          ¦  «         t          €
J d¦   «         ‚t          j        | j        ddt	          j        dt          | j	        ¦  «        ¬¦  «        ¬¦  «        g}| j
        �V|                     t          j        | j
        ddt	          j        d	t          | j        ¦  «        ¬¦  «        ¬¦  «        ¦  «         |S )
Nrs   rt   ú9coreschema must be installed to use `get_schema_fields()`FÚqueryÚPage©ÚtitleÚdescription©Únamer­   Úlocationrj   ú	Page size)r   ru   rv   r   r   ÚFieldr—   ÚIntegerr   Úpage_query_descriptionr²   rA   Úpage_size_query_description©r^   ra   Úfieldss      r   rx   z&PageNumberPagination.get_schema_fields=  s  € ÝÐ"Ð"Ð$\Ñ"Ô"Ð"ÝÐÝŒMÐ_ÕawÑxÔxÐxÝÐ%Ð%Ð'bÑ%Ô%Ð%åŒMØÔ*ØØ Ý!Ô)Ø Ý )¨$Ô*EÑ FÔ Fðñ ô ð	ñ ô ð

ˆð Ô%Ð1Ø�MŠMÝ”ØÔ3Ø"Ø$Ý%Ô-Ø)Ý$-¨dÔ.NÑ$OÔ$Oðñ ô ð	ñ ô ñ
ô 
ð 
ð ˆr   c                 óÀ   — | j         ddt          | j        ¦  «        ddidœg}| j        �4|                     | j        ddt          | j        ¦  «        ddidœ¦  «         |S ©NFrÓ   r¦   r£   ©rÙ   r­   Úinr×   rj   )r—   r   rÞ   r²   rA   rß   ©r^   ra   Ú
parameterss      r   rz   z4PageNumberPagination.get_schema_operation_parameters[  s’   € ð Ô-Ø!ØÝ(¨Ô)DÑEÔEà˜Iððð ð

ˆ
ð Ô%Ð1Ø×Òà Ô6Ø %Ø!Ý#,¨TÔ-MÑ#NÔ#Nà 	ððð ñ
ô 
ð 
ð Ðr   rh   )r{   r|   r}   Ú__doc__r   Ú	PAGE_SIZEr�   ÚDjangoPaginatorrˆ   r—   Ú_rÞ   r²   rß   r¶   r˜   rŽ   rŠ   rb   r‰   rf   rk   r‡   rŸ   r    rÉ   rn   rx   rz   r"   r   r   r€   r€   ¥   s2  € € € € € ðð ð Ô&€Ià,Ðð ÐØ˜QÐOÑPÔPÐð !ÐØ"# !Ð$KÑ"LÔ"LÐð €Mà!Ðà7€Hà˜1˜_Ñ-Ô-Ððð ð ð ð6ð ð ðð ð ð
ð 
ð 
ð6ð ð ðLð Lð LðLð Lð Lð
ð 
ð 
ð((ð (ð (ð
ð ð ð<ð ð ð ð r   r€   c                   ó¦   — e Zd ZdZej        ZdZ ed¦  «        Z	dZ
 ed¦  «        ZdZdZ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S )ÚLimitOffsetPaginationzœ
    A limit/offset based style. For example:

    http://api.example.org/accounts/?limit=100
    http://api.example.org/accounts/?offset=400&limit=100
    Úlimitr‚   rU   z3The initial index from which to return the results.Nr„   c                 ó†  — || _         |                      |¦  «        | _        | j        €d S |                      |¦  «        | _        |                      |¦  «        | _        | j        | j        k    r| j        �d| _        | j        dk    s| j        | j        k    rg S t          || j        | j        | j        z   …         ¦  «        S )NTr   )
r`   Ú	get_limitrî   Ú	get_countrœ   Ú
get_offsetrU   rŽ   r~   r0   r]   s       r   rb   z'LimitOffsetPagination.paginate_queryset…  s®   € ØˆŒØ—^’^ GÑ,Ô,ˆŒ
ØŒ:ÐØ�4à—^’^ HÑ-Ô-ˆŒ
Ø—o’o gÑ.Ô.ˆŒØŒ:˜œ
Ò"Ð" t¤}Ð'@Ø)-ˆDÔ&àŒ:˜Š?ˆ?˜dœk¨D¬JÒ6Ð6ØˆIÝ�H˜Tœ[¨¬°t´zÑ)AÐAÔBÑCÔCÐCr   c                 ó|   — t          | j        |                      ¦   «         |                      ¦   «         |dœ¦  «        S rš   )r   rœ   rŸ   r    rd   s     r   rf   z,LimitOffsetPagination.get_paginated_response”  sD   € ÝØ”ZØ×&Ò&Ñ(Ô(Ø×.Ò.Ñ0Ô0Øð	
ð 
ñ ô ð 	r   c                 ó²   — dddgdddœddd	d
                      | j        | j        ¬¦  «        dœddd	d                      | j        | j        ¬¦  «        dœ|dœdœS )Nr¢   rœ   rp   r£   r¤   r¥   r¨   Tr©   zEhttp://api.example.org/accounts/?{offset_param}=400&{limit_param}=100)Úoffset_paramÚlimit_paramrª   zEhttp://api.example.org/accounts/?{offset_param}=200&{limit_param}=100r›   r¬   )r‹   Úoffset_query_paramÚlimit_query_paramri   s     r   rk   z3LimitOffsetPagination.get_paginated_response_schemaœ  s³   € àØ  )Ð,ð &Ø"ðð ð
 %Ø $Ø#Øf×mÒmØ%)Ô%<È$ÔJ`ð  nñ  bô  bð	ð ð %Ø $Ø#Øf×mÒmØ%)Ô%<È$ÔJ`ð  nñ  bô  bð	ð ð "ð'ð ð
ð 
ð 	
r   c                 óÚ   — | j         r^t          j        t          t          ¦  «        5  t          |j        | j                  d| j        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   | j        S r°   )	rø   r³   r´   rµ   r   r   r•   Ú	max_limitÚdefault_limitr·   s     r   rð   zLimitOffsetPagination.get_limit·  s­   € ØÔ!ð 	ÝÔ$¥X­zÑ:Ô:ð ð Ý$ØÔ(¨Ô)?Ô@ØØœ>ðñ ô ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð Ô!Ð!r¹   c                 ór   — 	 t          |j        | j                 ¦  «        S # t          t          f$ r Y dS w xY w©Nr   )r   r•   r÷   rµ   r   r·   s     r   rò   z LimitOffsetPagination.get_offsetÁ  sP   € ð	Ý ØÔ$ TÔ%<Ô=ñô ð øõ �*Ð%ð 	ð 	ð 	Ø�1�1ð	øøøs   ‚! ¡6µ6c                 óè   — | j         | j        z   | j        k    rd S | j                             ¦   «         }t          || j        | j        ¦  «        }| j         | j        z   }t          || j        |¦  «        S rh   )rU   rî   rœ   r`   r¼   r   rø   r÷   ©r^   r;   rU   s      r   rŸ   z#LimitOffsetPagination.get_next_linkÉ  si   € ØŒ;˜œÑ# t¤zÒ1Ð1Ø�4àŒl×-Ò-Ñ/Ô/ˆÝ! # tÔ'=¸t¼zÑJÔJˆà”˜tœzÑ)ˆÝ" 3¨Ô(?ÀÑHÔHÐHr   c                 ó  — | j         dk    rd S | j                             ¦   «         }t          || j        | j        ¦  «        }| j         | j        z
  dk    rt          || j        ¦  «        S | j         | j        z
  }t          || j        |¦  «        S rý   )rU   r`   r¼   r   rø   rî   r   r÷   rÿ   s      r   r    z'LimitOffsetPagination.get_previous_linkÓ  s‡   € ØŒ;˜!ÒÐØ�4àŒl×-Ò-Ñ/Ô/ˆÝ! # tÔ'=¸t¼zÑJÔJˆàŒ;˜œÑ# qÒ(Ð(Ý% c¨4Ô+BÑCÔCÐCà”˜tœzÑ)ˆÝ" 3¨Ô(?ÀÑHÔHÐHr   c                 óÚ  ‡ ‡‡— ‰ j                              ¦   «         Š‰ j        rkt          ‰ j        ‰ j        ¦  «        dz   Št          ‰ j        ‰ j        z
  ‰ j        ¦  «        t          ‰ j        ‰ j        ¦  «        z   }t          |d¦  «        }ndŠd}‰|k    r|Šˆˆˆ fd„}t          ‰|¦  «        }t          |‰|¦  «        }‰  	                    ¦   «         ‰  
                    ¦   «         |dœS )Nr!   c                 ó�   •— | dk    rt          ‰‰j        ¦  «        S ‰j        | ‰z
  ‰j        z  z   }t	          ‰‰j        |¦  «        S r”   )r   r÷   rU   rî   r   )rE   rU   rÄ   r6   r^   s     €€€r   rÅ   zBLimitOffsetPagination.get_html_context.<locals>.page_number_to_urlø  sN   ø€ Ø˜aÒÐÝ)¨(°DÔ4KÑLÔLÐLàœ¨°wÑ)>À$Ä*Ñ(LÑM�Ý*¨8°TÔ5LÈfÑUÔUÐUr   rÆ   )r`   r¼   rî   r%   rU   rœ   Úmaxr8   rG   r    rŸ   )r^   r.   rÅ   rB   rD   rÄ   r6   s   `    @@r   rÉ   z&LimitOffsetPagination.get_html_contextà  s  øøø€ Ø”<×2Ò2Ñ4Ô4ˆàŒ:ð 	Ý'¨¬°T´ZÑ@Ô@À1ÑDˆGõ " $¤*¨t¬{Ñ":¸D¼JÑGÔGÝ! $¤+¨t¬zÑ:Ô:ñ;ð õ
 ˜˜q‘M”MˆEˆEàˆGØˆEà�UŠ?ˆ?ØˆGð	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Võ 3°7¸EÑBÔBˆÝ$ \°7Ð<NÑOÔOˆ
ð !×2Ò2Ñ4Ô4Ø×*Ò*Ñ,Ô,Ø$ð
ð 
ð 	
r   c                 ó†   — t          j        | j        ¦  «        }|                      ¦   «         }|                     |¦  «        S rh   rË   rÎ   s      r   rn   zLimitOffsetPagination.to_html  rÐ   r   c                 óx   — 	 |                      ¦   «         S # t          t          f$ r t          |¦  «        cY S w xY w)zZ
        Determine an object count, supporting either querysets or regular lists.
        )rœ   ÚAttributeErrorÚ	TypeErrorr5   )r^   r_   s     r   rñ   zLimitOffsetPagination.get_count  sI   € ð	!Ø—>’>Ñ#Ô#Ð#øÝ¥	Ð*ð 	!ð 	!ð 	!Ý�x‘=”=Ð Ð Ð ð	!øøøs   ‚ – 9¸9c                 ó”  — t           €
J d¦   «         ‚t           �t          j        dt          ¦  «         t          €
J d¦   «         ‚t          j        | j        ddt	          j        dt          | j	        ¦  «        ¬¦  «        ¬¦  «        t          j        | j
        ddt	          j        d	t          | j        ¦  «        ¬¦  «        ¬¦  «        gS )
Nrs   rt   rÒ   FrÓ   ÚLimitrÕ   rØ   ÚOffset)r   ru   rv   r   r   rÜ   rø   rÝ   r   Úlimit_query_descriptionr÷   Úoffset_query_descriptionrw   s     r   rx   z'LimitOffsetPagination.get_schema_fields  sÞ   € ÝÐ"Ð"Ð$\Ñ"Ô"Ð"ÝÐÝŒMÐ_ÕawÑxÔxÐxÝÐ%Ð%Ð'bÑ%Ô%Ð%åŒMØÔ+ØØ Ý!Ô)Ø!Ý )¨$Ô*FÑ GÔ Gðñ ô ð	ñ ô õ ŒMØÔ,ØØ Ý!Ô)Ø"Ý )¨$Ô*GÑ HÔ Hðñ ô ð	ñ ô ð
ð 	
r   c                 óŠ   — | j         ddt          | j        ¦  «        ddidœ| j        ddt          | j        ¦  «        ddidœg}|S rã   )rø   r   r  r÷   r  ræ   s      r   rz   z5LimitOffsetPagination.get_schema_operation_parameters0  sq   € ð Ô.Ø!ØÝ(¨Ô)EÑFÔFà˜Iððð ð Ô/Ø!ØÝ(¨Ô)FÑGÔGà˜Iððð ð
ˆ
ð( Ðr   rh   )r{   r|   r}   rè   r   ré   rû   rø   rë   r  r÷   r  rú   rŽ   rb   rf   rk   rð   rò   rŸ   r    rÉ   rn   rñ   rx   rz   r"   r   r   rí   rí   v  s$  € € € € € ðð ð !Ô*€MØÐØ˜aÐ GÑHÔHÐØ!ÐØ ˜qÐ!VÑWÔWÐØ€IØ7€HðDð Dð Dð Dðð ð ð
ð 
ð 
ð6"ð "ð "ðð ð ðIð Ið IðIð Ið Ið&
ð &
ð &
ðP(ð (ð (ð
!ð !ð !ð
ð 
ð 
ð4ð ð ð ð r   rí   c                   óÐ   — e Zd ZdZdZ ed¦  «        Zej        Z	 ed¦  «        Z
dZdZdZ ed¦  «        ZdZd	Z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S )ÚCursorPaginationzÐ
    The cursor pagination implementation is necessarily complex.
    For an overview of the position/offset style we use, see this post:
    https://cra.mr/2011/03/08/building-cursors-for-the-disqus-api
    ÚcursorzThe pagination cursor value.zInvalid cursorz-createdz0rest_framework/pagination/previous_and_next.htmlNr‚   iè  c                 óJ  — || _         |                      |¦  «        | _        | j        sd S |                     ¦   «         | _        |                      |||¦  «        | _        |                      |¦  «        | _        | j        €d\  }}}n| j        \  }}}|r |j	        t          | j        ¦  «        Ž }n |j	        | j        Ž }t          |¦  «        dk    r‘| j        d         }|                     d¦  «        }|                     d¦  «        }	| j        j        |k    r|	dz   |i}
n|	dz   |i}
t          di |
¤Ž}|r|r|r|t          di |	dz   di¤Žz  }|                     |¦  «        }t#          |||| j        z   d	z   …         ¦  «        }t#          |d | j        …         ¦  «        | _        t'          |¦  «        t'          | j        ¦  «        k    r$d}|                      |d
         | j        ¦  «        }nd}d }|rYt#          t+          | j        ¦  «        ¦  «        | _        |d up|dk    | _        || _        | j        r|| _        | j        r|| _        n2|| _        |d up|dk    | _        | j        r|| _        | j        r|| _        | j        s| j        r| j        �d| _        | j        S )N)r   FNÚNoner   rJ   Ú__ltÚ__gtÚ__isnullTr!   éÿÿÿÿFr"   )r`   r‡   r�   r¼   rÄ   Úget_orderingÚorderingÚdecode_cursorr  Úorder_byrR   rŒ   rK   ÚlstriprV   r	   Úfilterr0   r�   r5   Ú_get_position_from_instanceÚreversedr»   rÀ   Únext_positionÚprevious_positionrŽ   r~   )r^   r_   r`   ra   rU   rV   Úcurrent_positionÚorderÚis_reversedÚ
order_attrÚkwargsÚfilter_queryrp   Úhas_following_positionÚfollowing_positions                  r   rb   z"CursorPagination.paginate_querysetd  s  € ØˆŒØ×+Ò+¨GÑ4Ô4ˆŒØŒ~ð 	Ø�4à×2Ò2Ñ4Ô4ˆŒØ×)Ò)¨'°8¸TÑBÔBˆŒà×(Ò(¨Ñ1Ô1ˆŒØŒ;ÐØ2BÑ/ˆV�WÐ.Ð.à26´+Ñ/ˆV�WÐ.ð ð 	9Ø(�xÔ(Õ*;¸D¼MÑ*JÔ*JÐKˆHˆHà(�xÔ(¨$¬-Ð8ˆHõ ÐÑ Ô  FÒ*Ð*Ø”M !Ô$ˆEØ×*Ò*¨3Ñ/Ô/ˆKØŸš cÑ*Ô*ˆJð Œ{Ô" kÒ1Ð1Ø$ vÑ-Ð/?Ð@��à$ vÑ-Ð/?Ð@�å˜;˜;˜v˜;˜;ˆLð ð E ð E°ð EØ¥Ð DÐ D Z°*Ñ%<¸dÐ$CÐ DÐ DÑD�Ø—’ |Ñ4Ô4ˆHõ
 �x  v°´Ñ'>ÀÑ'BÐ BÔCÑDÔDˆÝ˜  $¤. Ô1Ñ2Ô2ˆŒ	õ ˆw‰<Œ<�#˜dœi™.œ.Ò(Ð(Ø%)Ð"Ø!%×!AÒ!AÀ'È"Ä+ÈtÌ}Ñ!]Ô!]ÐÐà%*Ð"Ø!%Ðàð 	:õ �X d¤iÑ0Ô0Ñ1Ô1ˆDŒIð .°TÐ9ÐJ¸vÈºzˆDŒMØ 6ˆDÔØŒ}ð 6Ø%5�Ô"ØÔ ð <Ø);�Ô&øð 3ˆDŒMØ!1¸Ð!=Ð NÀ6ÈAÂ:ˆDÔØŒ}ð 8Ø%7�Ô"ØÔ ð :Ø)9�Ô&ð Ôð 	. ¤ð 	.°D´MÐ4MØ)-ˆDÔ&àŒyÐr   c                 óÚ   — | j         r^t          j        t          t          ¦  «        5  t          |j        | j                  d| j        ¬¦  «        cd d d ¦  «         S # 1 swxY w Y   | j        S r°   r±   r·   s     r   r‡   zCursorPagination.get_page_size¶  r¸   r¹   c                 óV  — | j         sd S | j        rJ| j        rC| j        j        r7| j        j        dk    r'|                      | j        d         | j        ¦  «        }n| j        }d}d}t          | j        ¦  «        D ]0}|                      || j        ¦  «        }||k    r|d u} n|}|dz  }Œ1| j        rD|sB| j	        s
| j
        }d }n1| j        j        r
d}| j        }n| j        j        | j
        z   }| j        }| j        s| j        }t          |d|¬¦  «        }|                      |¦  «        S )Nr   r  Fr!   rT   )r»   r�   r  rV   rU   r  r  r  r  rÀ   r�   r   rS   Úencode_cursor©r^   ÚcomparerU   Úhas_item_with_unique_positionrO   rW   r  s          r   rŸ   zCursorPagination.get_next_linkÀ  ss  € ØŒ}ð 	Ø�4àŒ9ð 	)˜œð 	)¨¬Ô)<ð 	)ÀÄÔASÐWXÒAXÐAXð ×6Ò6°t´yÀ´}ÀdÄmÑTÔTˆGˆGàÔ(ˆGØˆà(-Ð%Ý˜TœYÑ'Ô'ð 	ð 	ˆDØ×7Ò7¸¸d¼mÑLÔLˆHØ˜7Ò"Ð"ð 19ÀÐ0DÐ-Ø�ð
 ˆGØ�a‰KˆFˆFàŒ9ð 	2Ð:ð 	2àÔ$ð 2ð œ�Ø��Ø”Ô$ð 	2ð �ØÔ1��ð œÔ+¨d¬nÑ<�ØÔ1�àŒyð 	*ØÔ)ˆHå˜v¨u¸xÐHÑHÔHˆØ×!Ò! &Ñ)Ô)Ð)r   c                 ó<  — | j         sd S | j        rJ| j        rC| j        j        s7| j        j        dk    r'|                      | j        d         | j        ¦  «        }n| j        }d}d}| j        D ]0}|                      || j        ¦  «        }||k    r|d u} n|}|dz  }Œ1| j        rD|sB| j        s
| j	        }d }n1| j        j        r| j        j        | j	        z   }| j
        }n	d}| j
        }| j        s| j        }t          |d|¬¦  «        }|                      |¦  «        S )Nr   Fr!   TrT   )rÀ   r�   r  rV   rU   r  r  r   r»   r�   r  rS   r+  r,  s          r   r    z"CursorPagination.get_previous_linkõ  sk  € ØÔ ð 	Ø�4àŒ9ð 	-˜œð 	-¨T¬[Ô-@ð 	-ÀTÄ[ÔEWÐ[\ÒE\ÐE\ð ×6Ò6°t´yÀ´|ÀTÄ]ÑSÔSˆGˆGàÔ,ˆGØˆà(-Ð%Ø”Ið 	ð 	ˆDØ×7Ò7¸¸d¼mÑLÔLˆHØ˜7Ò"Ð"ð 19ÀÐ0DÐ-Ø�ð
 ˆGØ�a‰KˆFˆFàŒ9ð 	.Ð:ð 	.à”=ð .ð œ�Ø��Ø”Ô$ð 	.ð œÔ+¨d¬nÑ<�ØÔ-��ð �ØÔ-�àŒyð 	.ØÔ-ˆHå˜v¨t¸hÐGÑGÔGˆØ×!Ò! &Ñ)Ô)Ð)r   c                 óÊ  — | j         }d„ t          |dg ¦  «        D ¦   «         }|r-|d         } |¦   «         }|                     |||¦  «        }|r|}|€
J d¦   «         ‚d|vs
J d¦   «         ‚t          |t          t
          t          f¦  «        s0J d                     t          |¦  «        j	        ¬	¦  «        ¦   «         ‚t          |t          ¦  «        r|fS t          |¦  «        S )
zV
        Return a tuple of strings, that may be used in an `order_by` method.
        c                 ó2   — g | ]}t          |d ¦  «        ¯|‘ŒS )r  )Úhasattr)r,   Ú
filter_clss     r   r/   z1CursorPagination.get_ordering.<locals>.<listcomp>2  s8   € ð 
ð 
ð 
Ø%Ý�z >Ñ2Ô2ð
Øð
ð 
ð 
r   Úfilter_backendsr   NzXUsing cursor pagination, but no ordering attribute was declared on the pagination class.Ú__z¶Cursor pagination does not support double underscore lookups for orderings. Orderings should be an unchanging, unique or nearly-unique field on the model, such as "-created" or "pk".z:Invalid ordering. Expected string or tuple, but got {type})r¦   )
r  Úgetattrr  Ú
isinstancerŒ   r0   rP   r‹   r¦   r{   )	r^   r`   r_   ra   r  Úordering_filtersr3  Úfilter_instanceÚordering_from_filters	            r   r  zCursorPagination.get_ordering*  s4  € ð ”=ˆð
ð 
Ý)0°Ð7HÈ"Ñ)MÔ)Mð
ñ 
ô 
Ðð
 ð 	0ð *¨!Ô,ˆJØ(˜j™lœlˆOØ#2×#?Ò#?ÀÈÐSWÑ#XÔ#XÐ Ø#ð 0Ø/�àÐ#Ð#ð'ñ $Ô#Ð#ð ˜8Ð#Ð#Ð#ðLñ $Ô#Ð#õ ˜(¥S­$µÐ$6Ñ7Ô7ð 	
ð 	
ØH×OÒOÝ˜(‘^”^Ô,ð Pñ ô ñ	
ô 	
ð 	
õ �h¥Ñ$Ô$ð 	Ø�;ÐÝ�X‰ŒÐr   c                 ój  — |j                              | j        ¦  «        }|€dS 	 t          |                     d¦  «        ¦  «                             d¦  «        }t          j        |d¬¦  «        }|                     ddg¦  «        d         }t          || j	        ¬¦  «        }|                     d	dg¦  «        d         }t          t          |¦  «        ¦  «        }|                     d
dg¦  «        d         }n)# t          t          f$ r t          | j        ¦  «        ‚w xY wt!          |||¬¦  «        S )zL
        Given a request with a cursor, return a `Cursor` instance.
        NÚasciiT)Úkeep_blank_valuesÚoÚ0r   )r   ÚrÚprT   )r•   r–   Úcursor_query_paramr   ÚencodeÚdecoder   Úparse_qsr   Úoffset_cutoffÚboolr   r  r   r   Úinvalid_cursor_messagerS   )r^   r`   ÚencodedÚquerystringÚtokensrU   rV   rW   s           r   r  zCursorPagination.decode_cursorT  s'  € ð
 Ô&×*Ò*¨4Ô+BÑCÔCˆØˆ?Ø�4ð	8Ý# G§N¢N°7Ñ$;Ô$;Ñ<Ô<×CÒCÀGÑLÔLˆKÝ”^ KÀ4ÐHÑHÔHˆFà—Z’Z  c UÑ+Ô+¨AÔ.ˆFÝ" 6°$Ô2DÐEÑEÔEˆFà—j’j  s eÑ,Ô,¨QÔ/ˆGÝ�3˜w™<œ<Ñ(Ô(ˆGà—z’z #¨ vÑ.Ô.¨qÔ1ˆHˆHøÝ�:Ð&ð 	8ð 	8ð 	8Ý˜4Ô6Ñ7Ô7Ð7ð	8øøøõ ˜V¨W¸xÐHÑHÔHÐHs   ¥CC: Ã:&D c                 óP  — i }|j         dk    rt          |j         ¦  «        |d<   |j        rd|d<   |j        �
|j        |d<   t	          j        |d¬¦  «        }t          |                     d	¦  «        ¦  «                             d	¦  «        }t          | j
        | j        |¦  «        S )
zM
        Given a Cursor instance, return an url with encoded cursor.
        r   r>  Ú1r@  NrA  T)Údoseqr<  )rU   rŒ   rV   rW   r   Ú	urlencoder   rC  rD  r   rÄ   rB  )r^   r  rK  rJ  rI  s        r   r+  zCursorPagination.encode_cursorm  s£   € ð ˆØŒ=˜AÒÐÝ˜fœmÑ,Ô,ˆF�3‰KØŒ>ð 	ØˆF�3‰KØŒ?Ð&Ø œ/ˆF�3‰Kå”o f°DÐ9Ñ9Ô9ˆÝ˜K×.Ò.¨wÑ7Ô7Ñ8Ô8×?Ò?ÀÑHÔHˆÝ" 4¤=°$Ô2IÈ7ÑSÔSÐSr   c                 óº   — |d                               d¦  «        }t          |t          ¦  «        r	||         }nt          ||¦  «        }|€d nt	          |¦  «        S )Nr   rJ   )r  r7  Údictr6  rŒ   )r^   Úinstancer  Ú
field_nameÚattrs        r   r  z,CursorPagination._get_position_from_instance}  sZ   € Ø˜a”[×'Ò'¨Ñ,Ô,ˆ
Ý�h¥Ñ%Ô%ð 	1Ø˜JÔ'ˆDˆDå˜8 ZÑ0Ô0ˆDØ�|ˆtˆt­¨T©¬Ð2r   c                 óp   — t          |                      ¦   «         |                      ¦   «         |dœ¦  «        S )N©r�   rž   rp   )r   rŸ   r    rd   s     r   rf   z'CursorPagination.get_paginated_response…  s?   € ÝØ×&Ò&Ñ(Ô(Ø×.Ò.Ñ0Ô0Øð
ð 
ñ ô ð 	r   c           	      ó�   — ddgdddd                      | j        ¬¦  «        dœdddd	                      | j        ¬¦  «        dœ|d
œdœS )Nr¢   rp   r¨   Tr©   zAhttp://api.example.org/accounts/?{cursor_query_param}=cD00ODY%3D")rB  rª   zBhttp://api.example.org/accounts/?{cursor_query_param}=cj0xJnA9NDg3rV  r¬   )r‹   rB  ri   s     r   rk   z.CursorPagination.get_paginated_response_schemaŒ  s”   € àØ"˜ð %Ø $Ø#Øb×iÒiØ+/Ô+Bð  jñ  Dô  Dð	ð ð %Ø $Ø#Øc×jÒjØ+/Ô+Bð  kñ  Dô  Dð	ð ð "ðð ð
ð 
ð 	
r   c                 óT   — |                       ¦   «         |                      ¦   «         dœS )N)rÇ   rÈ   )r    rŸ   rm   s    r   rÉ   z!CursorPagination.get_html_context£  s/   € à ×2Ò2Ñ4Ô4Ø×*Ò*Ñ,Ô,ð
ð 
ð 	
r   c                 ó†   — t          j        | j        ¦  «        }|                      ¦   «         }|                     |¦  «        S rh   rË   rÎ   s      r   rn   zCursorPagination.to_html©  rÐ   r   c                 óÎ  — t           €
J d¦   «         ‚t           �t          j        dt          ¦  «         t          €
J d¦   «         ‚t          j        | j        ddt	          j        dt          | j	        ¦  «        ¬¦  «        ¬¦  «        g}| j
        �V|                     t          j        | j
        ddt	          j        d	t          | j        ¦  «        ¬¦  «        ¬¦  «        ¦  «         |S )
Nrs   rt   rÒ   FrÓ   rS   rÕ   rØ   rÛ   )r   ru   rv   r   r   rÜ   rB  ÚStringr   Úcursor_query_descriptionr²   rA   rÝ   rß   rà   s      r   rx   z"CursorPagination.get_schema_fields®  s  € ÝÐ"Ð"Ð$\Ñ"Ô"Ð"ÝÐÝŒMÐ_ÕawÑxÔxÐxÝÐ%Ð%Ð'bÑ%Ô%Ð%åŒMØÔ,ØØ Ý!Ô(Ø"Ý )¨$Ô*GÑ HÔ Hðñ ô ð	ñ ô ð

ˆð Ô%Ð1Ø�MŠMÝ”ØÔ3Ø"Ø$Ý%Ô-Ø)Ý$-¨dÔ.NÑ$OÔ$Oðñ ô ð	ñ ô ñ
ô 
ð 
ð ˆr   c                 óÀ   — | j         ddt          | j        ¦  «        ddidœg}| j        �4|                     | j        ddt          | j        ¦  «        ddidœ¦  «         |S )NFrÓ   r¦   r¨   rä   r£   )rB  r   r\  r²   rA   rß   ræ   s      r   rz   z0CursorPagination.get_schema_operation_parametersÌ  s’   € ð Ô/Ø!ØÝ(¨Ô)FÑGÔGà˜Hððð ð

ˆ
ð Ô%Ð1Ø×Òà Ô6Ø %Ø!Ý#,¨TÔ-MÑ#NÔ#Nà 	ððð ñ
ô 
ð 
ð Ðr   rh   )r{   r|   r}   rè   rB  rë   r\  r   ré   r�   rH  r  rŽ   r²   rß   r¶   rF  rb   r‡   rŸ   r    r  r  r+  r  rf   rk   rÉ   rn   rx   rz   r"   r   r   r  r  H  sf  € € € € € ðð ð
 "ÐØ ˜qÐ!?Ñ@Ô@ÐØÔ&€IØ˜QÐ/Ñ0Ô0ÐØ€HØA€Hð !ÐØ"# !Ð$KÑ"LÔ"LÐð €Mð €MðPð Pð Pð Pðdð ð ð3*ð 3*ð 3*ðj3*ð 3*ð 3*ðj(ð (ð (ðTIð Ið Ið2Tð Tð Tð 3ð 3ð 3ðð ð ð
ð 
ð 
ð.
ð 
ð 
ð(ð (ð (ð
ð ð ð<ð ð ð ð r   r  )FN)1rè   r³   ru   Úbase64r   r   Úcollectionsr   Úurllibr   Údjango.core.paginatorr   r   rê   Údjango.db.modelsr	   Údjango.templater
   Údjango.utils.encodingr   Údjango.utils.translationr   rë   Úrest_frameworkr   Úrest_framework.compatr   r   Úrest_framework.exceptionsr   Úrest_framework.responser   Úrest_framework.settingsr   Úrest_framework.utils.urlsr   r   r   r%   r8   rG   rR   rS   r@   r?   rY   r€   rí   r  r"   r   r   ú<module>rl     s­  ððð ð
 Ð Ð Ð Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à -Ð -Ð -Ð -Ð -Ð -Ø >Ð >Ð >Ð >Ð >Ð >Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð	ð 	ð 	ð 	ðð ð ð0ð 0ð 0ðfð ð ð(<ð <ð <ð 
ˆ�HÐ?Ð?Ð?Ñ	@Ô	@€Øˆ:�jÐ"LÐ"LÐ"LÑMÔM€àˆX˜$ t°uÀtÐLÑLÔL€
ðð ð ð ð ñ ô ð ð8Nð Nð Nð Nð N˜>ñ Nô Nð NðbOð Oð Oð Oð O˜Nñ Oô Oð Oðd\ð \ð \ð \ð \�~ñ \ô \ð \ð \ð \r   