U
    +|j_[  ã                   @   sf  d Z ddlZddlZddlmZ ddlmZ dddd	d
dddgZe e	¡Z
G dd„ deƒZG dd„ deƒZG dd„ deƒZe d¡Zdd„ ZeZG dd„ deƒZdd„ ZG dd„ deƒZe d¡dfe d¡dfe d¡dfe d¡d fe d!¡d"fe d#¡d"fe d$¡d%fe d&¡d'fe d(¡d)fe d*¡d+ff
Ze d,¡dfe d-¡dfe d.¡d%fe d$¡d%fe d/¡dffZe d0¡Zd1d2„ Zd3d4„ Ze d5ej¡Zd6d6d7d6d8ddd9œZd:d;„ ZG d<d„ deƒZ G d=d	„ d	eƒZ!e d>ej¡Z"d?d@„ Z#dAdB„ Z$G dCd
„ d
eƒZ%G dDd„ deƒZ&G dEdF„ dFeƒZ'e'eeeƒe'ee!dGdH„ ƒe'e$e&eƒdIœZ(e(dJ e(dK< dLd„ Z)dS )Mz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
é    Né   )Ústring_types©Úparse_requirementÚNormalizedVersionÚNormalizedMatcherÚLegacyVersionÚLegacyMatcherÚSemanticVersionÚSemanticMatcherÚUnsupportedVersionErrorÚ
get_schemec                   @   s   e Zd ZdZdS )r   zThis is an unsupported version.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úcC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_vendor/distlib/version.pyr      s   c                   @   sx   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdS )ÚVersionc                 C   s@   |  ¡  | _}|  |¡ | _}t|tƒs,t‚t|ƒdks<t‚d S )Nr   )ÚstripÚ_stringÚparseÚ_partsÚ
isinstanceÚtupleÚAssertionErrorÚlen)ÚselfÚsÚpartsr   r   r   Ú__init__   s    zVersion.__init__c                 C   s   t dƒ‚d S )Nzplease implement in a subclass©ÚNotImplementedError©r   r   r   r   r   r   %   s    zVersion.parsec                 C   s$   t | ƒt |ƒkr td| |f ƒ‚d S )Nzcannot compare %r and %r)ÚtypeÚ	TypeError©r   Úotherr   r   r   Ú_check_compatible(   s    zVersion._check_compatiblec                 C   s   |   |¡ | j|jkS ©N©r(   r   r&   r   r   r   Ú__eq__,   s    
zVersion.__eq__c                 C   s   |   |¡ S r)   ©r+   r&   r   r   r   Ú__ne__0   s    zVersion.__ne__c                 C   s   |   |¡ | j|jk S r)   r*   r&   r   r   r   Ú__lt__3   s    
zVersion.__lt__c                 C   s   |   |¡p|  |¡ S r)   ©r.   r+   r&   r   r   r   Ú__gt__7   s    zVersion.__gt__c                 C   s   |   |¡p|  |¡S r)   r/   r&   r   r   r   Ú__le__:   s    zVersion.__le__c                 C   s   |   |¡p|  |¡S r)   )r0   r+   r&   r   r   r   Ú__ge__=   s    zVersion.__ge__c                 C   s
   t | jƒS r)   )Úhashr   ©r   r   r   r   Ú__hash__A   s    zVersion.__hash__c                 C   s   d| j j| jf S )Nz%s('%s')©Ú	__class__r   r   r4   r   r   r   Ú__repr__D   s    zVersion.__repr__c                 C   s   | j S r)   ©r   r4   r   r   r   Ú__str__G   s    zVersion.__str__c                 C   s   t dƒ‚d S )NzPlease implement in subclasses.r!   r4   r   r   r   Úis_prereleaseJ   s    zVersion.is_prereleaseN)r   r   r   r    r   r(   r+   r-   r.   r0   r1   r2   r5   r8   r:   Úpropertyr;   r   r   r   r   r      s   r   c                	   @   sš   e Zd ZdZdd„ dd„ dd„ dd„ dd„ dd„ d	d„ d
d„ dœZdd„ Zdd„ Zdd„ Zedd„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚMatcherNc                 C   s   | |k S r)   r   ©ÚvÚcÚpr   r   r   Ú<lambda>T   ó    zMatcher.<lambda>c                 C   s   | |kS r)   r   r>   r   r   r   rB   U   rC   c                 C   s   | |kp| |k S r)   r   r>   r   r   r   rB   V   rC   c                 C   s   | |kp| |kS r)   r   r>   r   r   r   rB   W   rC   c                 C   s   | |kS r)   r   r>   r   r   r   rB   X   rC   c                 C   s   | |kS r)   r   r>   r   r   r   rB   Y   rC   c                 C   s   | |kp| |kS r)   r   r>   r   r   r   rB   [   rC   c                 C   s   | |kS r)   r   r>   r   r   r   rB   \   rC   )ú<ú>ú<=ú>=ú==ú===ú~=ú!=c                 C   s   t |ƒS r)   r   r#   r   r   r   r   a   s    zMatcher.parse_requirementc                 C   sÒ   | j d krtdƒ‚| ¡  | _}|  |¡}|s:td| ƒ‚|j| _| j ¡ | _g }|jrÄ|jD ]d\}}| 	d¡r¢|dkr„td| ƒ‚|d d… d }}|   |¡ n|   |¡d }}| 
|||f¡ q^t|ƒ| _d S )	NzPlease specify a version classzNot valid: %rz.*)rH   rK   z#'.*' not allowed for %r constraintséþÿÿÿTF)Úversion_classÚ
ValueErrorr   r   r   ÚnameÚlowerÚkeyÚconstraintsÚendswithÚappendr   r   )r   r   ÚrZclistÚopZvnÚprefixr   r   r   r    d   s*    


ÿzMatcher.__init__c                 C   sx   t |tƒr|  |¡}| jD ]X\}}}| j |¡}t |tƒrDt| |ƒ}|s`d|| jjf }t	|ƒ‚||||ƒs dS qdS )zÉ
        Check if the provided version matches the constraints.

        :param version: The version to match against this instance.
        :type version: String or :class:`Version` instance.
        z%r not implemented for %sFT)
r   r   rM   r   Ú
_operatorsÚgetÚgetattrr7   r   r"   )r   ÚversionÚoperatorÚ
constraintrW   ÚfÚmsgr   r   r   Úmatch�   s    




ÿzMatcher.matchc                 C   s6   d }t | jƒdkr2| jd d dkr2| jd d }|S )Nr   r   )rH   rI   )r   r   )r   Úresultr   r   r   Úexact_version–   s     zMatcher.exact_versionc                 C   s0   t | ƒt |ƒks| j|jkr,td| |f ƒ‚d S )Nzcannot compare %s and %s)r$   rO   r%   r&   r   r   r   r(   �   s    zMatcher._check_compatiblec                 C   s"   |   |¡ | j|jko | j|jkS r)   )r(   rQ   r   r&   r   r   r   r+   ¡   s    
zMatcher.__eq__c                 C   s   |   |¡ S r)   r,   r&   r   r   r   r-   ¥   s    zMatcher.__ne__c                 C   s   t | jƒt | jƒ S r)   )r3   rQ   r   r4   r   r   r   r5   ©   s    zMatcher.__hash__c                 C   s   d| j j| jf S )Nz%s(%r)r6   r4   r   r   r   r8   ¬   s    zMatcher.__repr__c                 C   s   | j S r)   r9   r4   r   r   r   r:   ¯   s    zMatcher.__str__)r   r   r   rM   rX   r   r    r`   r<   rb   r(   r+   r-   r5   r8   r:   r   r   r   r   r=   O   s*   ÷
r=   zk^v?(\d+!)?(\d+(\.\d+)*)((a|b|c|rc)(\d+))?(\.(post)(\d+))?(\.(dev)(\d+))?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c                 C   s²  |   ¡ } t | ¡}|s"td|  ƒ‚| ¡ }tdd„ |d  d¡D ƒƒ}t|ƒdkrl|d dkrl|d d… }qF|d szd}nt|d ƒ}|dd	… }|d
d… }|dd… }|d }|dkrÀd}n|d t|d ƒf}|dkrâd}n|d t|d ƒf}|dk�rd}n|d t|d ƒf}|d k�r*d}nHg }	| d¡D ]0}
|
 	¡ �rTdt|
ƒf}
nd|
f}
|	 
|
¡ �q8t|	ƒ}|�sŽ|�sŠ|�rŠd}nd}|�s˜d}|�s¢d}||||||fS )NzNot a valid version: %sc                 s   s   | ]}t |ƒV  qd S r)   ©Úint©Ú.0r?   r   r   r   Ú	<genexpr>¾   s     z_pep_440_key.<locals>.<genexpr>r   Ú.éÿÿÿÿr   é   é   é   é	   é
   é   é   )NNr   )Úari   )Úz)Ú_)Úfinal)r   ÚPEP440_VERSION_REr`   r   Úgroupsr   Úsplitr   rd   ÚisdigitrT   )r   Úmrv   ÚnumsÚepochÚpreÚpostÚdevÚlocalr   Úpartr   r   r   Ú_pep_440_key¸   sT    



r�   c                   @   s6   e Zd ZdZdd„ ZedddddgƒZed	d
„ ƒZdS )r   aI  A rational version.

    Good:
        1.2         # equivalent to "1.2.0"
        1.2.0
        1.2a1
        1.2.3a2
        1.2.3b1
        1.2.3c1
        1.2.3.4
        TODO: fill this out

    Bad:
        1           # minimum two numbers
        1.2a        # release level must have a release serial
        1.2.3b
    c                 C   s<   t |ƒ}t |¡}| ¡ }tdd„ |d  d¡D ƒƒ| _|S )Nc                 s   s   | ]}t |ƒV  qd S r)   rc   re   r   r   r   rg     s     z*NormalizedVersion.parse.<locals>.<genexpr>r   rh   )Ú_normalized_keyru   r`   rv   r   rw   Ú_release_clause)r   r   ra   ry   rv   r   r   r   r   
  s
    
zNormalizedVersion.parserq   Úbr@   Úrcr~   c                    s   t ‡ fdd„ˆ jD ƒƒS )Nc                 3   s    | ]}|r|d  ˆ j kV  qdS )r   N)ÚPREREL_TAGS)rf   Útr4   r   r   rg     s      z2NormalizedVersion.is_prerelease.<locals>.<genexpr>)Úanyr   r4   r   r4   r   r;     s    zNormalizedVersion.is_prereleaseN)	r   r   r   r   r   Úsetr†   r<   r;   r   r   r   r   r   ø   s
   c                 C   s>   t | ƒ} t |ƒ}| |krdS |  |¡s*dS t|ƒ}| | dkS )NTFrh   )ÚstrÚ
startswithr   )ÚxÚyÚnr   r   r   Ú_match_prefix  s    
r�   c                	   @   sn   e Zd ZeZddddddddd	œZd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )r   Ú_match_compatibleÚ	_match_ltÚ	_match_gtÚ	_match_leÚ	_match_geÚ	_match_eqÚ_match_arbitraryÚ	_match_ne)rJ   rD   rE   rF   rG   rH   rI   rK   c                 C   sV   |rd|ko|j d }n|j d  o,|j d }|rN|j dd¡d }|  |¡}||fS )Nú+ri   r   r   )r   r   rw   rM   )r   r[   r]   rW   Zstrip_localr   r   r   r   Ú_adjust_local6  s    
zNormalizedMatcher._adjust_localc                 C   sD   |   |||¡\}}||krdS |j}d dd„ |D ƒ¡}t||ƒ S )NFrh   c                 S   s   g | ]}t |ƒ‘qS r   ©rŠ   ©rf   Úir   r   r   Ú
<listcomp>I  s     z/NormalizedMatcher._match_lt.<locals>.<listcomp>©r™   rƒ   Újoinr�   ©r   r[   r]   rW   Zrelease_clauseÚpfxr   r   r   r‘   D  s    zNormalizedMatcher._match_ltc                 C   sD   |   |||¡\}}||krdS |j}d dd„ |D ƒ¡}t||ƒ S )NFrh   c                 S   s   g | ]}t |ƒ‘qS r   rš   r›   r   r   r   r�   Q  s     z/NormalizedMatcher._match_gt.<locals>.<listcomp>rž   r    r   r   r   r’   L  s    zNormalizedMatcher._match_gtc                 C   s   |   |||¡\}}||kS r)   ©r™   ©r   r[   r]   rW   r   r   r   r“   T  s    zNormalizedMatcher._match_lec                 C   s   |   |||¡\}}||kS r)   r¢   r£   r   r   r   r”   X  s    zNormalizedMatcher._match_gec                 C   s.   |   |||¡\}}|s ||k}n
t||ƒ}|S r)   ©r™   r�   ©r   r[   r]   rW   ra   r   r   r   r•   \  s
    

zNormalizedMatcher._match_eqc                 C   s   t |ƒt |ƒkS r)   rš   r£   r   r   r   r–   d  s    z"NormalizedMatcher._match_arbitraryc                 C   s0   |   |||¡\}}|s ||k}nt||ƒ }|S r)   r¤   r¥   r   r   r   r—   g  s
    
zNormalizedMatcher._match_nec                 C   sf   |   |||¡\}}||krdS ||k r*dS |j}t|ƒdkrH|d d… }d dd„ |D ƒ¡}t||ƒS )NTFr   ri   rh   c                 S   s   g | ]}t |ƒ‘qS r   rš   r›   r   r   r   r�   z  s     z7NormalizedMatcher._match_compatible.<locals>.<listcomp>)r™   rƒ   r   rŸ   r�   r    r   r   r   r�   o  s    z#NormalizedMatcher._match_compatibleN)r   r   r   r   rM   rX   r™   r‘   r’   r“   r”   r•   r–   r—   r�   r   r   r   r   r   '  s&   øz[.+-]$Ú z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$ú\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rh   z\b(alfa|apha)\bÚalphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$Úbetaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c                 C   sL  |   ¡  ¡ }tD ]\}}| ||¡}q|s.d}t |¡}|sFd}|}nª| ¡ d  d¡}dd„ |D ƒ}t|ƒdk r~| 	d¡ qft|ƒdkrœ|| 
¡ d… }n8d dd„ |dd… D ƒ¡|| 
¡ d…  }|dd… }d d	d„ |D ƒ¡}|  ¡ }|�rtD ]\}}| ||¡}qú|�s|}nd
|k�r*dnd}|| | }t|ƒ�sHd}|S )z€
    Try to suggest a semantic form for a version for which
    _suggest_normalized_version couldn't come up with anything.
    z0.0.0r   rh   c                 S   s   g | ]}t |ƒ‘qS r   rc   r›   r   r   r   r�   ª  s     z-_suggest_semantic_version.<locals>.<listcomp>é   Nc                 S   s   g | ]}t |ƒ‘qS r   rš   r›   r   r   r   r�   °  s     c                 S   s   g | ]}t |ƒ‘qS r   rš   r›   r   r   r   r�   ²  s     r~   ú-r˜   )r   rP   Ú_REPLACEMENTSÚsubÚ_NUMERIC_PREFIXr`   rv   rw   r   rT   ÚendrŸ   Ú_SUFFIX_REPLACEMENTSÚ	is_semver)r   ra   ÚpatÚreplry   rW   ÚsuffixÚsepr   r   r   Ú_suggest_semantic_version–  s:    
,
r¶   c                 C   sh  zt | ƒ | W S  tk
r"   Y nX |  ¡ }dD ]\}}| ||¡}q0t dd|¡}t dd|¡}t dd|¡}t dd	|¡}t d
d|¡}| d¡r¢|dd… }t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd |¡}zt |ƒ W n tk
�rb   d}Y nX |S )!aè  Suggest a normalized version close to the given version string.

    If you have a version string that isn't rational (i.e. NormalizedVersion
    doesn't like it) then you might be able to get an equivalent (or close)
    rational version from this function.

    This does a number of simple normalizations to the given string, based
    on observation of versions currently in use on PyPI. Given a dump of
    those version during PyCon 2009, 4287 of them:
    - 2312 (53.93%) match NormalizedVersion without change
      with the automatic suggestion
    - 3474 (81.04%) match when using this suggestion method

    @param s {str} An irrational version string.
    @returns A rational version string, or None, if couldn't determine one.
    ))z-alpharq   )z-betar„   )r¨   rq   )r©   r„   )r…   r@   )z-finalr¦   )z-prer@   )z-releaser¦   )z.releaser¦   )z-stabler¦   )r˜   rh   )rs   rh   )ú r¦   )z.finalr¦   )rt   r¦   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?r§   r?   r   Nz\b0+(\d+)(?!\d)z(\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$r¦   z\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1)r‚   r   rP   ÚreplaceÚrer­   r‹   )r   ÚrsÚorigr³   r   r   r   Ú_suggest_normalized_versionÄ  s>    
	
r¼   z([a-z]+|\d+|[\.-])r@   zfinal-ú@)r|   Úpreviewr«   r…   r~   r¦   rh   c                 C   sr   dd„ }g }|| ƒD ]T}|  d¡r^|dk rD|rD|d dkrD| ¡  q*|r^|d dkr^| ¡  qD| |¡ qt|ƒS )Nc                 S   st   g }t  |  ¡ ¡D ]R}t ||¡}|rd|d d…   krBdkrRn n| d¡}nd| }| |¡ q| d¡ |S )NÚ0r   Ú9é   Ú*ú*final)Ú_VERSION_PARTrw   rP   Ú_VERSION_REPLACErY   ÚzfillrT   )r   ra   rA   r   r   r   Ú	get_partsC  s     
z_legacy_key.<locals>.get_partsrÂ   rÃ   ri   z*final-Ú00000000)r‹   ÚpoprT   r   )r   rÇ   ra   rA   r   r   r   Ú_legacy_keyB  s    


rÊ   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )r   c                 C   s   t |ƒS r)   )rÊ   r#   r   r   r   r   ]  s    zLegacyVersion.parsec                 C   s8   d}| j D ](}t|tƒr
| d¡r
|dk r
d} q4q
|S )NFrÂ   rÃ   T)r   r   r   r‹   )r   ra   rŒ   r   r   r   r;   `  s    
ÿzLegacyVersion.is_prereleaseN©r   r   r   r   r<   r;   r   r   r   r   r   \  s   c                   @   s4   e Zd ZeZeejƒZded< e 	d¡Z
dd„ ZdS )r	   r�   rJ   z^(\d+(\.\d+)*)c                 C   s`   ||k rdS | j  t|ƒ¡}|s2t d||¡ dS | ¡ d }d|krV| dd¡d }t||ƒS )NFzACannot compute compatible match for version %s  and constraint %sTr   rh   r   )Ú
numeric_rer`   rŠ   ÚloggerÚwarningrv   Úrsplitr�   )r   r[   r]   rW   ry   r   r   r   r   r�   s  s     ÿzLegacyMatcher._match_compatibleN)r   r   r   r   rM   Údictr=   rX   r¹   ÚcompilerÌ   r�   r   r   r   r   r	   k  s
   

zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c                 C   s
   t  | ¡S r)   )Ú
_SEMVER_REr`   )r   r   r   r   r±   ‰  s    r±   c           	      C   sn   dd„ }t | ƒ}|st| ƒ‚| ¡ }dd„ |d d… D ƒ\}}}||d dƒ||d dƒ }}|||f||fS )	Nc                 S   s8   | d kr|f}n$| dd …   d¡}tdd„ |D ƒƒ}|S )Nr   rh   c                 S   s"   g | ]}|  ¡ r| d ¡n|‘qS )rÁ   )rx   rÆ   )rf   rA   r   r   r   r�   •  s     z5_semantic_key.<locals>.make_tuple.<locals>.<listcomp>)rw   r   )r   Zabsentra   r   r   r   r   Ú
make_tupleŽ  s
    z!_semantic_key.<locals>.make_tuplec                 S   s   g | ]}t |ƒ‘qS r   rc   r›   r   r   r   r�   œ  s     z!_semantic_key.<locals>.<listcomp>rª   ú|é   rÂ   )r±   r   rv   )	r   rÓ   ry   rv   ÚmajorÚminorÚpatchr|   Úbuildr   r   r   Ú_semantic_key�  s    
rÚ   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )r
   c                 C   s   t |ƒS r)   )rÚ   r#   r   r   r   r   £  s    zSemanticVersion.parsec                 C   s   | j d d dkS )Nr   r   rÔ   )r   r4   r   r   r   r;   ¦  s    zSemanticVersion.is_prereleaseNrË   r   r   r   r   r
   ¢  s   c                   @   s   e Zd ZeZdS )r   N)r   r   r   r
   rM   r   r   r   r   r   «  s   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚVersionSchemeNc                 C   s   || _ || _|| _d S r)   )rQ   ÚmatcherÚ	suggester)r   rQ   rÜ   rÝ   r   r   r   r    °  s    zVersionScheme.__init__c                 C   s2   z| j  |¡ d}W n tk
r,   d}Y nX |S ©NTF)rÜ   rM   r   ©r   r   ra   r   r   r   Úis_valid_versionµ  s    
zVersionScheme.is_valid_versionc                 C   s0   z|   |¡ d}W n tk
r*   d}Y nX |S rÞ   )rÜ   r   rß   r   r   r   Úis_valid_matcher½  s    

zVersionScheme.is_valid_matcherc                 C   s   |   d| ¡S )z:
        Used for processing some metadata fields
        zdummy_name (%s))rá   r#   r   r   r   Úis_valid_constraint_listÅ  s    z&VersionScheme.is_valid_constraint_listc                 C   s   | j d krd }n
|   |¡}|S r)   )rÝ   rß   r   r   r   ÚsuggestË  s    

zVersionScheme.suggest)N)r   r   r   r    rà   rá   râ   rã   r   r   r   r   rÛ   ¯  s
   
rÛ   c                 C   s   |S r)   r   r#   r   r   r   rB   Õ  rC   rB   )Ú
normalizedÚlegacyZsemanticrä   Údefaultc                 C   s   | t krtd|  ƒ‚t |  S )Nzunknown scheme name: %r)Ú_SCHEMESrN   )rO   r   r   r   r   Ý  s    )*r   Úloggingr¹   Úcompatr   Úutilr   Ú__all__Ú	getLoggerr   rÍ   rN   r   Úobjectr   r=   rÑ   ru   r�   r‚   r   r�   r   r¬   r°   r®   r¶   r¼   ÚIrÄ   rÅ   rÊ   r   r	   rÒ   r±   rÚ   r
   r   rÛ   rç   r   r   r   r   r   Ú<module>   s”      ý
1d
=$Wÿõû
.rùþ	$ÿÿü