§
    Ètºf?Õ  ã                   óÖ   — d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZ ddlmZmZ ej        d          dk    Z ed	¦  «        Zd
ZdZg d¢ZdZ G d„ de¦  «        ZdS )é    )Úunicode_literalsN)ÚAnyÚIterableÚOptionalÚTextÚTupleÚcasté   )ÚHyperlinkTestCaseé   )ÚURLÚURLParseError)Ú	inet_ptonÚSCHEME_PORT_MAPÚ ú*http://www.foo.com/a/nice/path/?zot=23&zutúhttp://a/b/c/d;p?q)()Úgúhttp://a/b/c/g)z./gr   )zg/úhttp://a/b/c/g/)z/gú
http://a/g)z//gzhttp://g)z?yzhttp://a/b/c/d;p?y)zg?yzhttp://a/b/c/g?y)z#szhttp://a/b/c/d;p?q#s)zg#szhttp://a/b/c/g#s)zg?y#szhttp://a/b/c/g?y#s)z;xzhttp://a/b/c/;x)zg;xzhttp://a/b/c/g;x)zg;x?y#szhttp://a/b/c/g;x?y#s)r   r   )ú.úhttp://a/b/c/)z./r   )ú..úhttp://a/b/)z../r   )z../gúhttp://a/b/g)z../..ú	http://a/)z../../r   )z../../gr   )z
../../../gr   )z../../../../gr   )z/./gr   )z/../gr   )zg.zhttp://a/b/c/g.)z.gzhttp://a/b/c/.g)zg..zhttp://a/b/c/g..)z..gzhttp://a/b/c/..g)z./../gr   )z./g/.r   )zg/./hzhttp://a/b/c/g/h)zg/../hzhttp://a/b/c/h)z	g;x=1/./yzhttp://a/b/c/g;x=1/y)z
g;x=1/../yzhttp://a/b/c/y)zg?y/./xzhttp://a/b/c/g?y/./x)zg?y/../xzhttp://a/b/c/g?y/../x)zg#s/./xzhttp://a/b/c/g#s/./x)zg#s/../xzhttp://a/b/c/g#s/../x)6zhttp://localhostúhttp://localhost/zhttp://127.0.0.1/zhttp://[::127.0.0.1]/zhttp://[::1]/zhttp://localhost/foozhttp://localhost/foo/zhttp://localhost/foo!!bar/zhttp://localhost/foo%20bar/zhttp://localhost/foo%2Fbar/zhttp://localhost/foo?nzhttp://localhost/foo?n=vzhttp://localhost/foo?n=/a/bz%http://example.com/foo!@$bar?b!@z=123z$http://localhost/asd?a=asd%20sdf/345z6http://(%2525)/(%2525)?(%2525)&(%2525)=(%2525)#(%2525)z<http://(%C3%A9)/(%C3%A9)?(%C3%A9)&(%C3%A9)=(%C3%A9)#(%C3%A9)zG?sslrootcert=/Users/glyph/Downloads/rds-ca-2015-root.pem&sslmode=verifyz%http://googlewebsite.com/e-shops.aspxz?http://example.com:8080/search?q=123&business=Nothing%20Specialz*http://hatnote.com:9000/?arg=1&arg=2&arg=3úhttps://xn--bcher-kva.chz"http://xn--ggbla1c4e.xn--ngbc5azd/z.http://tools.ietf.org/html/rfc3986#section-3.4z:ftp://ftp.rfc-editor.org/in-notes/tar/RFCs0001-0500.tar.gzz.http://[1080:0:0:0:8:800:200C:417A]/index.htmlzssh://192.0.2.16:2222/z$https://[::101.45.75.219]:80/?hi=byez7ldap://[::192.9.5.5]/dc=example,dc=com??sub?(sn=Jensen)zFmailto:me@example.com?to=me@example.com&body=hi%20http://wikipedia.orgznews:alt.rec.motorcycleztel:+1-800-867-5309zurn:oasis:member:A00024:xa  magnet:?xt=urn:btih:1a42b9e04e122b97a5254e3df77ab3c4b7da725f&dn=Puppy%20Linux%20precise-5.7.1.iso&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.publicbt.com:80&tr=udp://tracker.istole.it:6969&tr=udp://tracker.ccc.de:80&tr=udp://open.demonii.com:1337zhttps://%3A@example.com/zhttps://%40@example.com/zhttps://%2f@example.com/zhttps://a:%3a@example.com/zhttps://a:%40@example.com/zhttps://a:%2f@example.com/zhttps://a:%3f@example.com/zhttps://example.com/%2F/zhttps://example.com/%3F/zhttps://example.com/%23/zhttps://example.com/?%23=bzhttps://example.com/?%3D=bzhttps://example.com/?%26=bzhttps://example.com/?a=%23zhttps://example.com/?a=%26zhttps://example.com/?a=%3Dz https://example.com/?foo+bar=bazz https://example.com/?foo=bar+bazzChttp://(%2525):(%2525)@example.com/(%2525)/?(%2525)=(%2525)#(%2525)z8first_seg_rel_path__colon%3Anotok/second_seg__colon%3Aokc                   óØ  — e Zd ZdZd„ Z	 dOd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%„ Z&d&„ Z'd'„ Z(d(„ Z)d)„ Z*d*„ Z+d+„ Z,d,„ Z-d-„ Z.d.„ Z/d/„ Z0d0„ Z1d1„ Z2d2„ Z3d3„ Z4d4„ Z5d5„ Z6d6„ Z7d7„ Z8d8„ Z9d9„ Z:d:„ Z;d;„ Z<d<„ Z=d=„ Z>d>„ Z?d?„ Z@d@„ ZAdA„ ZBdB„ ZCdC„ ZDdD„ ZEdE„ ZFdF„ ZGdG„ ZHdH„ ZIdI„ ZJdJ„ ZKdK„ ZLdL„ ZMdM„ ZNdNS )PÚTestURLz
    Tests for L{URL}.
    c                 ó  — |                       t          |j        t          ¦  «        p|j        du t	          |¦  «        ¦  «         |                       t          |j        t          ¦  «        p|j        du t	          |¦  «        ¦  «         |j        D ]8}|                      t          |¦  «        t          t	          |¦  «        ¦  «         Œ9|j	        D ]u\  }}|                      t          |¦  «        t          t	          |¦  «        ¦  «         |                       |du pt          |t          ¦  «        t	          |¦  «        ¦  «         Œv|                      t          |j
        ¦  «        t          t	          |¦  «        ¦  «         dS )zl
        The given L{URL}'s components should be L{unicode}.

        @param u: The L{URL} to test.
        N)Ú
assertTrueÚ
isinstanceÚschemeÚunicodeÚreprÚhostÚpathÚassertEqualÚtypeÚqueryÚfragment)ÚselfÚuÚsegÚ_kÚvs        úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/hyperlink/test/test_url.pyÚassertUnicodedzTestURL.assertUnicoded–   sA  € ð 	�ŠÝ�q”x¥Ñ)Ô)Ð=¨Q¬X¸Ð-=½tÀA¹w¼wñ	
ô 	
ð 	
ð 	�Š�
 1¤6­7Ñ3Ô3ÐE°q´vÀ°~ÅtÈAÁwÄwÑOÔOÐOØ”6ð 	:ð 	:ˆCØ×Ò�T #™YœY­µ°a±´Ñ9Ô9Ð9Ð9Ø”wð 	Jð 	J‰GˆR�Ø×Ò�T #™YœY­µ°a±´Ñ9Ô9Ð9Ø�OŠO˜A ˜IÐ?­°AµwÑ)?Ô)?ÅÀaÁÄÑIÔIÐIÐIØ×Ò�˜aœjÑ)Ô)­7µD¸±G´GÑ<Ô<Ð<Ð<Ð<ó    r   c	                 óÚ   — |j         |j        |j        |j        |j        |j        |j        f}	||t          |¦  «        t          |¦  «        |||j        f}
|                      |	|
¦  «         dS )aª  
        The given L{URL} should have the given components.

        @param u: The actual L{URL} to examine.

        @param scheme: The expected scheme.

        @param host: The expected host.

        @param path: The expected path.

        @param query: The expected query.

        @param fragment: The expected fragment.

        @param port: The expected port.

        @param userinfo: The expected userinfo.
        N)	r%   r(   r)   r,   r-   ÚportÚuserinfoÚtupler*   )r.   r/   r%   r(   r)   r,   r-   r7   r8   ÚactualÚexpecteds              r3   Ú	assertURLzTestURL.assertURL¨   sy   € ð@ ŒHØŒFØŒFØŒGØŒJØŒFØŒJð
ˆð ØÝ�$‰KŒKÝ�%‰LŒLØØØŒJð
ˆð 	×Ò˜ Ñ*Ô*Ð*Ð*Ð*r5   c           	      ó²   ‡ — ˆ fd„} |t          dd¦  «        ¦  «          |t          ddg g ¦  «        ¦  «          |t          ddg g d¦  «        ¦  «         dS )z@
        L{URL} should have appropriate default values.
        c           
      ój   •— ‰                      | ¦  «         ‰                     | ddg g ddd¦  «         d S )NÚhttpr   éP   )r4   r<   )r/   r.   s    €r3   Úcheckz(TestURL.test_initDefaults.<locals>.checká   s=   ø€ à×Ò Ñ"Ô"Ð"Ø�NŠN˜1˜f b¨"¨b°"°b¸"Ñ=Ô=Ð=Ð=Ð=r5   r?   r   N)r   )r.   rA   s   ` r3   Útest_initDefaultszTestURL.test_initDefaultsÛ   sz   ø€ ð	>ð 	>ð 	>ð 	>ð 	>ð
 	ˆ�c�&˜"‰oŒoÑÔÐØˆ�c�&˜"˜b "Ñ%Ô%Ñ&Ô&Ð&Øˆ�c�&˜"˜b " bÑ)Ô)Ñ*Ô*Ð*Ð*Ð*r5   c           	      óø   — t          dddgddgd¦  «        }|                      |¦  «         |                      |dddgddgdd¦  «         |                      t          dd	d
gdgd¦  «        dd	d
gdgdd¦  «         dS )z=
        L{URL} should accept L{unicode} parameters.
        ÚsÚhÚp©Úkr2   )rH   NÚfNr?   õ   Ã õ   Ã©)u   Î»u   Ï€u   âŠ¥r@   ©r   r4   r<   ©r.   r/   s     r3   Ú	test_initzTestURL.test_initê   s©   € õ
 ��S˜3˜% *¨kÐ!:¸CÑ@Ô@ˆØ×Ò˜AÑÔÐØ�Š�q˜#˜s S E¨J¸Ð+DÀcÈ4ÑPÔPÐPà�ŠÝ�˜  Ð+?Ð*@À(ÑKÔKØØØˆHØ!Ð"ØØñ	
ô 	
ð 	
ð 	
ð 	
r5   c           	      ó˜   — t          dddgddgd¦  «        }|                      |¦  «         |                      |dddgddgdd¦  «         dS )zN
        L{URL} should accept (and not interpret) percent characters.
        rD   z%68z%70)ú%6Bz%76)rP   Nz%66NrL   rM   s     r3   Útest_initPercentzTestURL.test_initPercentý   sj   € õ
 ��U˜U˜G n°mÐ%DÀeÑLÔLˆØ×Ò˜AÑÔÐØ�ŠØˆs�E˜E˜7 ^°]Ð$CÀUÈDñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó˜   — |                       t          t          dddgddgd¬¦  «        ¦  «        dt          d	¦  «        ›d
�¦  «         dS )zº
        L{URL.__repr__} will display the canonical form of the URL, wrapped in
        a L{URL.from_text} invocation, so that it is C{eval}-able but still
        easy to read.
        r?   ÚfooÚbar)ÚbazNrG   Úfrob©r%   r(   r)   r,   r-   zURL.from_text(zhttp://foo/bar?baz&k=v#frobú)N)r*   r'   r   ©r.   s    r3   Ú	test_reprzTestURL.test_repr  sw   € ð 	×ÒÝÝØ!ØØ˜Ø(¨*Ð5Ø#ðñ ô ñô ð õ $(Ð(EÑ#FÔ#FÐ#FÐ#FÐHñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó’   — t          j        t          ¦  «        }|                      t          |                     ¦   «         ¦  «         dS )zc
        Round-tripping L{URL.from_text} with C{str} results in an equivalent
        URL.
        N)r   Ú	from_textÚ	BASIC_URLr*   Úto_text©r.   Úurlpaths     r3   Útest_from_textzTestURL.test_from_text  s9   € õ ”-¥	Ñ*Ô*ˆØ×Ò� G§O¢OÑ$5Ô$5Ñ6Ô6Ð6Ð6Ð6r5   c                 ó–   — t           D ]@}t          j        |¦  «                             d¬¦  «        }|                      ||¦  «         ŒAdS )z@
        L{URL.to_text} should invert L{URL.from_text}.
        T©Úwith_passwordN)ÚROUNDTRIP_TESTSr   r\   r^   r*   )r.   ÚtestÚresults      r3   Útest_roundtripzTestURL.test_roundtrip%  sV   € õ
 $ð 	+ð 	+ˆDÝ”] 4Ñ(Ô(×0Ò0¸tÐ0ÑDÔDˆFØ×Ò˜T 6Ñ*Ô*Ð*Ð*ð	+ð 	+r5   c                 ó
  — t           D ]z}t          j        |¦  «        }|                     ¦   «         }|                     ¦   «         }||k    sJ ‚|                     d¬¦  «        }|                     d¬¦  «        }||k    sJ ‚Œ{d S )NTrc   )re   r   r\   Úto_irir^   )r.   rf   ÚurlÚiriÚ
double_iriÚiri_textÚdouble_iri_texts          r3   Útest_roundtrip_double_iriz!TestURL.test_roundtrip_double_iri.  s�   € å#ð 	/ð 	/ˆDÝ”- Ñ%Ô%ˆCØ—*’*‘,”,ˆCØŸš™œˆJØ˜*Ò$Ð$Ð$Ð$à—{’{°�{Ñ6Ô6ˆHØ(×0Ò0¸tÐ0ÑDÔDˆOØ˜Ò.Ð.Ð.Ð.Ð.Øˆr5   c                 óâ   — t          j        t          ¦  «        }|                      |t          j        t          ¦  «        ¦  «         |                      |t          j        d¦  «        ¦  «         dS )z·
        Two URLs decoded using L{URL.from_text} will be equal (C{==}) if they
        decoded same URL string, and unequal (C{!=}) if they decoded different
        strings.
        z:ftp://www.anotherinvaliddomain.com/foo/bar/baz/?zot=21&zutN)r   r\   r]   r*   ÚassertNotEqualr_   s     r3   Útest_equalityzTestURL.test_equality;  sj   € õ ”-¥	Ñ*Ô*ˆØ×Ò˜¥#¤-µ	Ñ":Ô":Ñ;Ô;Ð;Ø×ÒØÝŒMØOñô ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óÚ   — |                       t          d¬¦  «        t          ¦   «         ¦  «         |                       t          j        d¦  «        t          j        d¦  «        ¦  «         dS )zŒ
        An URL created with the empty string for a fragment compares equal
        to an URL created with an unspecified fragment.
        r   )r-   zhttp://localhost/#r   N)r*   r   r\   rY   s    r3   Útest_fragmentEqualityzTestURL.test_fragmentEqualityK  sg   € ð 	×Ò� bÐ)Ñ)Ô)­3©5¬5Ñ1Ô1Ð1Ø×ÒÝŒMÐ.Ñ/Ô/ÝŒMÐ-Ñ.Ô.ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó  — t          j        t          ¦  «        }|                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         d	S )
zm
        L{URL.child} appends a new path segment, but does not affect the query
        or fragment.
        z.http://www.foo.com/a/nice/path/gong?zot=23&zutÚgongz1http://www.foo.com/a/nice/path/gong%2F?zot=23&zutzgong/z7http://www.foo.com/a/nice/path/gong%2Fdouble?zot=23&zutzgong/doublez:http://www.foo.com/a/nice/path/gong%2Fdouble%2F?zot=23&zutzgong/double/N)r   r\   r]   r*   Úchildr^   r_   s     r3   Ú
test_childzTestURL.test_childW  sû   € õ ”-¥	Ñ*Ô*ˆØ×ÒØ<Ø�MŠM˜&Ñ!Ô!×)Ò)Ñ+Ô+ñ	
ô 	
ð 	
ð 	×ÒØ?Ø�MŠM˜'Ñ"Ô"×*Ò*Ñ,Ô,ñ	
ô 	
ð 	
ð 	×ÒØEØ�MŠM˜-Ñ(Ô(×0Ò0Ñ2Ô2ñ	
ô 	
ð 	
ð 	×ÒØHØ�MŠM˜.Ñ)Ô)×1Ò1Ñ3Ô3ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó¨   — t          j        d¦  «        }|                      |                     ddd¦  «                             ¦   «         d¦  «         dS )zg
        L{URL.child} receives multiple segments as C{*args} and appends each in
        turn.
        zhttp://example.com/a/bÚcÚdÚezhttp://example.com/a/b/c/d/eN)r   r\   r*   rx   r^   ©r.   rk   s     r3   Útest_multiChildzTestURL.test_multiChildo  sX   € õ ŒmÐ4Ñ5Ô5ˆØ×ÒØ�IŠI�c˜3 Ñ$Ô$×,Ò,Ñ.Ô.Ð0Nñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óÐ   — t          d¬¦  «                             d¦  «        }|                      |j        ¦  «         |                      d|                     ¦   «         ¦  «         dS )zo
        L{URL.child} of a L{URL} without a path produces a L{URL} with a single
        path segment.
        úwww.foo.com©r(   r{   zhttp://www.foo.com/cN)r   rx   r#   Úrootedr*   r^   )r.   ÚchildURLs     r3   Útest_childInitRootzTestURL.test_childInitRootz  s_   € õ ˜MÐ*Ñ*Ô*×0Ò0°Ñ5Ô5ˆØ�Š˜œÑ(Ô(Ð(Ø×ÒÐ/°×1AÒ1AÑ1CÔ1CÑDÔDÐDÐDÐDr5   c                 óv   — t          d¬¦  «        }|                      |                     ¦   «         |¦  «         dS )zT
        L{URL.child} without any new segments returns the original L{URL}.
        r�   r‚   N)r   r*   rx   r~   s     r3   Útest_emptyChildzTestURL.test_emptyChild„  s8   € õ
 �}Ð%Ñ%Ô%ˆØ×Ò˜Ÿš™œ cÑ*Ô*Ð*Ð*Ð*r5   c                 óP  — t          j        t          ¦  «        }|                      d|                     d¦  «                             ¦   «         ¦  «         d}t          j        |¦  «        }|                      d|                     d¦  «                             ¦   «         ¦  «         dS )z
        L{URL.sibling} of a L{URL} replaces the last path segment, but does not
        affect the query or fragment.
        z0http://www.foo.com/a/nice/path/sister?zot=23&zutÚsisterz)http://www.foo.com/a/nice/path?zot=23&zutz+http://www.foo.com/a/nice/sister?zot=23&zutN)r   r\   r]   r*   Úsiblingr^   )r.   r`   Úurl_texts      r3   Útest_siblingzTestURL.test_siblingŒ  sŸ   € õ ”-¥	Ñ*Ô*ˆØ×ÒØ>Ø�OŠO˜HÑ%Ô%×-Ò-Ñ/Ô/ñ	
ô 	
ð 	
ð
 ?ˆÝ”- Ñ)Ô)ˆØ×ÒØ9Ø�OŠO˜HÑ%Ô%×-Ò-Ñ/Ô/ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó¤  — t          j        t          ¦  «        }|                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             ¦   «         ¦  «         |                      d	|                     d
¦  «                             ¦   «         v¦  «         t          j        d¦  «        }|                      d|                     d¦  «                             ¦   «         ¦  «         t          j        d¦  «        }|                      |                     d¦  «                             ¦   «         d¦  «         t          j        d¦  «        }d}|                      |                     d¦  «                             ¦   «         |¦  «         |                      |                     ¦   «                              ¦   «         |¦  «         t          j        d¦  «        }t          j        d¦  «        }|                     |¦  «        }|                      |                     ¦   «         d¦  «         dS )z¦
        L{URL.click} interprets the given string as a relative URI-reference
        and returns a new L{URL} interpreting C{self} as the base absolute URI.
        r   r   z$http://www.foo.com/a/nice/path/clickÚclickzhttp://www.foo.com/clickz/clickz$http://www.foo.com/a/nice/path/?burpz?burpz//foobarzhttp://www.foo.com/foobarzhttp://www.foo.com/me/noqueryz!http://www.foo.com/me/17?spam=158z/me/17?spam=158zhttp://localhost/foo?abc=defzhttp://www.python.orgz$http://hatnote.com/a/b/../c/./d/e/..zhttp://hatnote.com/a/c/d/zhttp://localhost/foo/?abc=defrT   zhttp://localhost/foo/barN)r   r\   r]   r*   rŽ   r^   r#   ÚfromText)r.   r`   r/   ÚresÚu2Úu3s         r3   Ú
test_clickzTestURL.test_clickŸ  sƒ  € õ ”-¥	Ñ*Ô*ˆà×ÒØ8Ø�MŠM˜"ÑÔ×%Ò%Ñ'Ô'ñ	
ô 	
ð 	
ð
 	×ÒØ2Ø�MŠM˜'Ñ"Ô"×*Ò*Ñ,Ô,ñ	
ô 	
ð 	
ð
 	×ÒØ&¨¯ª°hÑ(?Ô(?×(GÒ(GÑ(IÔ(Iñ	
ô 	
ð 	
ð 	×ÒØ2Ø�MŠM˜'Ñ"Ô"×*Ò*Ñ,Ô,ñ	
ô 	
ð 	
ð 	�ŠØØ—=’=Ð!<Ñ=Ô=×EÒEÑGÔGðHñ	
ô 	
ð 	
õ ŒMÐ9Ñ:Ô:ˆØ×ÒØ/Ø�GŠGÐ%Ñ&Ô&×.Ò.Ñ0Ô0ñ	
ô 	
ð 	
õ ŒMÐ8Ñ9Ô9ˆØ×ÒØ�GŠGÐ+Ñ,Ô,×4Ò4Ñ6Ô6Ð8Oñ	
ô 	
ð 	
õ
 ŒMÐ@ÑAÔAˆØ)ˆØ×Ò˜Ÿš ™œ×,Ò,Ñ.Ô.°Ñ4Ô4Ð4ð 	×Ò˜Ÿš™œ×*Ò*Ñ,Ô,¨cÑ2Ô2Ð2õ ŒLÐ8Ñ9Ô9ˆÝŒ]˜5Ñ!Ô!ˆØ�WŠW�R‰[Œ[ˆØ×Ò˜Ÿš™œÐ'AÑBÔBÐBÐBÐBr5   c                 óÈ   — t          j        t          ¦  «        }t          D ]@\  }}|                      |                     |¦  «                             ¦   «         |¦  «         ŒAdS )zQ
        L{URL.click} should correctly resolve the examples in RFC 3986.
        N)r   r\   ÚrelativeLinkBaseForRFC3986ÚrelativeLinkTestsForRFC3986r*   rŽ   r^   )r.   ÚbaseÚrefr;   s       r3   Útest_clickRFC3986zTestURL.test_clickRFC3986Ý  sd   € õ
 Œ}Õ7Ñ8Ô8ˆÝ:ð 	Bð 	B‰OˆS�(Ø×Ò˜TŸZšZ¨™_œ_×4Ò4Ñ6Ô6¸ÑAÔAÐAÐAð	Bð 	Br5   c                 ó¼   — t          j        t          ¦  «        }|                      t          |j        d¦  «         |                      t          |j        d¦  «         dS )zM
        L{URL.click} should not accept schemes with relative paths.
        zg:hzhttp:hN)r   r\   r•   ÚassertRaisesÚNotImplementedErrorrŽ   )r.   r—   s     r3   Útest_clickSchemeRelPathzTestURL.test_clickSchemeRelPathæ  sP   € õ
 Œ}Õ7Ñ8Ô8ˆØ×ÒÕ-¨t¬z¸5ÑAÔAÐAØ×ÒÕ-¨t¬z¸8ÑDÔDÐDÐDÐDr5   c           
      ó  — t          j        d¦  «        }|                      |                     |j        |j        |j        |j        |j        |j	        ¦  «        |¦  «         |                      |                     ¦   «         |¦  «         dS )zf
        Verify that L{URL.replace} doesn't change any of the arguments it
        is passed.
        zhttps://x:1/y?z=1#AN)
r   r\   r*   Úreplacer%   r(   r)   r,   r-   r7   r_   s     r3   Útest_cloneUnchangedzTestURL.test_cloneUnchangedï  s‰   € õ ”-Ð 5Ñ6Ô6ˆØ×ÒØ�OŠOØ”Ø”Ø”Ø”ØÔ Ø”ñô ð ñ
	
ô 
	
ð 
	
ð 	×Ò˜ŸšÑ*Ô*¨GÑ4Ô4Ð4Ð4Ð4r5   c                 óR  — g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g}|D ]z\  }}}t          j        |¦  «                             |¦  «                             ¦   «         }|                      ||d                     |t          |¦  «        ||¬¦  «        ¦  «         Œ{dS )zd
        L{URL.click} collapses C{.} and C{..} according to RFC 3986 section
        5.2.4.
        )r   r   r   )r   r   r   )úhttp://localhost/a/b/cr   zhttp://localhost/a/b/)r¢   r   zhttp://localhost/a/)r¢   z./d/ezhttp://localhost/a/b/d/e)r¢   ú../d/eúhttp://localhost/a/d/e)r¢   z/./d/eúhttp://localhost/d/e)r¢   z/../d/er¥   )zhttp://localhost/a/b/c/z
../../d/e/zhttp://localhost/a/d/e/)zhttp://localhost/a/./cr£   r¥   )zhttp://localhost/a/./c/r£   r¤   )zhttp://localhost/a/b/c/dz./e/../f/../gzhttp://localhost/a/b/c/g)r¢   zd//ezhttp://localhost/a/b/d//ez1{start}.click({click}) => {actual} not {expected})ÚstartrŽ   r:   r;   N)r   r\   rŽ   r^   r*   Úformatr'   )r.   Útestsr¦   rŽ   r;   r:   s         r3   Útest_clickCollapsezTestURL.test_clickCollapse  s+  € ð <Ð;Ð;Ø<Ð<Ð<ØDÐDÐDØCÐCÐCØKÐKÐKØJÐJÐJØHÐHÐHØIÐIÐIðð ð ð
 IÐHÐHØKÐKÐKðð ð ð
 LÐKÐKð+
ˆð. ',ð 	ð 	Ñ"ˆE�5˜(Ý”] 5Ñ)Ô)×/Ò/°Ñ6Ô6×>Ò>Ñ@Ô@ˆFØ×ÒØØØC×JÒJØÝ˜u™+œ+Ø!Ø%ð	 Kñ ô ñ	ô 	ð 	ð 	ð	ð 	r5   c                 ó2  — |                       dt          j        d¦  «                             dd¦  «                             ¦   «         ¦  «         |                       dt          d¬¦  «                             dd¦  «                             ¦   «         ¦  «         t          j        t
          ¦  «        }|                       d|                     d	¦  «                             ¦   «         ¦  «         |                       d
|                     d	d¦  «                             ¦   «         ¦  «         |                       d|                     d	d¦  «                             d¦  «                             ¦   «         ¦  «         |                       d|                     d¦  «                             d	d¦  «                             ¦   «         ¦  «         |                       d|                     d	d¦  «                             dd¦  «                             ¦   «         ¦  «         dS )z3
        L{URL.add} adds query parameters.
        z'http://www.foo.com/a/nice/path/?foo=barzhttp://www.foo.com/a/nice/path/rS   rT   zhttp://www.foo.com/?foo=barr�   r‚   z/http://www.foo.com/a/nice/path/?zot=23&zut&burpÚburpz3http://www.foo.com/a/nice/path/?zot=23&zut&burp=xxxÚxxxz8http://www.foo.com/a/nice/path/?zot=23&zut&burp=xxx&zingÚzingz8http://www.foo.com/a/nice/path/?zot=23&zut&zing&burp=xxxz:http://www.foo.com/a/nice/path/?zot=23&zut&burp=xxx&zot=32ÚzotÚ32N)r*   r   r\   Úaddr^   r]   r_   s     r3   Útest_queryAddzTestURL.test_queryAdd-  sñ  € ð
 	×ÒØ5ÝŒMÐ;Ñ<Ô<ßŠS�˜ÑÔßŠW‰YŒYñ		
ô 	
ð 	
ð 	×ÒØ)Ý�]Ð#Ñ#Ô#×'Ò'¨¨uÑ5Ô5×=Ò=Ñ?Ô?ñ	
ô 	
ð 	
õ ”-¥	Ñ*Ô*ˆØ×ÒØ=Ø�KŠK˜ÑÔ×'Ò'Ñ)Ô)ñ	
ô 	
ð 	
ð 	×ÒØAØ�KŠK˜ Ñ&Ô&×.Ò.Ñ0Ô0ñ	
ô 	
ð 	
ð 	×ÒØFØ�KŠK˜ Ñ&Ô&×*Ò*¨6Ñ2Ô2×:Ò:Ñ<Ô<ñ	
ô 	
ð 	
ð
 	×ÒØFØ�KŠK˜ÑÔ×#Ò# F¨EÑ2Ô2×:Ò:Ñ<Ô<ñ	
ô 	
ð 	
ð
 	×ÒØHØ�KŠK˜ Ñ&Ô&×*Ò*¨5°$Ñ7Ô7×?Ò?ÑAÔAñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óî  — t          j        t          ¦  «        }|                      d|                     dd¦  «                             ¦   «         ¦  «         |                      d|                     d¦  «                             dd¦  «                             ¦   «         ¦  «         |                      d|                     dd¦  «                             dd¦  «                             ¦   «         ¦  «         dS )	z?
        L{URL.set} replaces query parameters by name.
        z*http://www.foo.com/a/nice/path/?zot=32&zutr®   r¯   z0http://www.foo.com/a/nice/path/?zot&zut=itworkedÚzutÚitworkedr¬   N)r   r\   r]   r*   Úsetr^   r°   r_   s     r3   Útest_querySetzTestURL.test_querySetT  sç   € õ
 ”-¥	Ñ*Ô*ˆØ×ÒØ8Ø�KŠK˜˜tÑ$Ô$×,Ò,Ñ.Ô.ñ	
ô 	
ð 	
ð
 	×ÒØ>Ø�KŠK˜ÑÔ×"Ò" 5¨*Ñ5Ô5×=Ò=Ñ?Ô?ñ	
ô 	
ð 	
ð 	×ÒØ8Ø�KŠK˜˜uÑ%Ô%×)Ò)¨%°Ñ6Ô6×>Ò>Ñ@Ô@ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó  — t          j        d¦  «        }|                      |                     d¦  «        t          j        d¦  «        ¦  «         |                      |                     dd¬¦  «        t          j        d¦  «        ¦  «         |                      |                     dd¬¦  «        t          j        d¦  «        ¦  «         |                      |                     ddd	¬
¦  «        t          j        d¦  «        ¦  «         dS )zG
        L{URL.remove} removes instances of a query parameter.
        z*https://example.com/a/b/?foo=1&bar=2&foo=3rS   zhttps://example.com/a/b/?bar=2Ú1)ÚnameÚvaluez$https://example.com/a/b/?bar=2&foo=3r
   )r¹   Úlimitr   )r¹   rº   r»   N)r   r\   r*   Úremover~   s     r3   Útest_queryRemovezTestURL.test_queryRemovej  s  € õ
 ŒmÐHÑIÔIˆØ×ÒØ�JŠJ�uÑÔ�sœ}Ð-MÑNÔNñ	
ô 	
ð 	
ð 	×ÒØ�JŠJ˜E¨ˆJÑ-Ô-ÝŒMÐ@ÑAÔAñ	
ô 	
ð 	
ð
 	×ÒØ�JŠJ˜E¨ˆJÑ+Ô+ÝŒMÐ@ÑAÔAñ	
ô 	
ð 	
ð
 	×ÒØ�JŠJ˜E¨°AˆJÑ6Ô6ÝŒMÐFÑGÔGñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óœ  — t          j        d¦  «        }|                      |                     d¦  «        dg¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                     ¦   «         }|                      |                     d¦  «        dg¦  «         |                      |                     ¦   «                              d¦  «        dg¦  «         d	S )
z€
        Every C{=}-sign after the first in a query parameter is simply included
        in the value of the parameter.
        zhttp://localhost/?=x=x=xr   úx=x=xz!http://localhost/?foo=x=x=x&bar=y))rS   r¿   )rT   Úyz7https://example.com/?argument=3&argument=4&operator=%3DÚoperatorú=N)r   r\   r*   Úgetr^   r,   rj   Úto_uri)r.   r/   rl   s      r3   Útest_parseEqualSignInParamValuez'TestURL.test_parseEqualSignInParamValueƒ  s  € õ ŒMÐ4Ñ5Ô5ˆØ×Ò˜Ÿš˜r™œ W IÑ.Ô.Ð.Ø×Ò˜Ÿš™œÐ&@ÑAÔAÐAÝŒMÐ=Ñ>Ô>ˆØ×Ò˜œÐ"BÑCÔCÐCØ×Ò˜Ÿš™œÐ&IÑJÔJÐJåŒMØEñ
ô 
ˆð �hŠh‰jŒjˆØ×Ò˜Ÿš Ñ,Ô,¨s¨eÑ4Ô4Ð4à×Ò˜Ÿš™œ×)Ò)¨*Ñ5Ô5¸°uÑ=Ô=Ð=Ð=Ð=r5   c                 ón   — |                       t          ¦   «                              ¦   «         d¦  «         dS )zG
        An empty L{URL} should serialize as the empty string.
        r   N)r*   r   r^   rY   s    r3   Ú
test_emptyzTestURL.test_empty˜  s,   € ð
 	×Ò�™œŸš™œ¨"Ñ-Ô-Ð-Ð-Ð-r5   c                 óx   — t          dg¬¦  «        }|                      |                     ¦   «         d¦  «         dS )zP
        An L{URL} with query text should serialize as just query text.
        ©ÚhelloÚworld©r,   z?hello=worldN)r   r*   r^   rM   s     r3   Útest_justQueryTextzTestURL.test_justQueryTextŸ  s<   € õ
 Ð)Ð*Ð+Ñ+Ô+ˆØ×Ò˜Ÿš™œ nÑ5Ô5Ð5Ð5Ð5r5   c                 óZ   — t          j        d¦  «        }|                      ||¦  «         dS )z2
        L{URL} compares equal to itself.
        r   N©r   r\   r*   rM   s     r3   Útest_identicalEqualzTestURL.test_identicalEqual§  s0   € õ
 ŒMÐ-Ñ.Ô.ˆØ×Ò˜˜AÑÔÐÐÐr5   c                 ó‚   — t          j        d¦  «        }t          j        d¦  «        }|                      ||¦  «         dS )zG
        URLs with equivalent components should compare equal.
        ú%http://u@localhost:8080/p/a/t/h?q=p#fNrÏ   ©r.   Úu1r‘   s      r3   Útest_similarEqualzTestURL.test_similarEqual¯  s@   € õ
 Œ]ÐBÑCÔCˆÝŒ]ÐBÑCÔCˆØ×Ò˜˜RÑ Ô Ð Ð Ð r5   c                 óÀ   — t          j        d¦  «        }t          j        d¦  «        }|                      ||k    |›d|›�¦  «         |                      ||¦  «         dS )z|
        L{URL}s that refer to different resources are both unequal (C{!=}) and
        also not equal (not C{==}).
        úhttp://localhost/aúhttp://localhost/bú != N)r   r\   ÚassertFalserr   rÓ   s      r3   Útest_differentNotEqualzTestURL.test_differentNotEqual¸  se   € õ Œ]Ð/Ñ0Ô0ˆÝŒ]Ð/Ñ0Ô0ˆØ×Ò˜˜rš°°°°R°RÐ#8Ñ9Ô9Ð9Ø×Ò˜B Ñ#Ô#Ð#Ð#Ð#r5   c                 ó  — t          j        d¦  «        }|                      |dk    d¦  «         |                      |t          ¦   «         k    d¦  «         |                      |d¦  «         |                      |t          ¦   «         ¦  «         dS )z=
        L{URL} is not equal (C{==}) to other types.
        r   é*   zURL must not equal a number.zURL must not equal an object.N)r   r\   rÚ   Úobjectrr   rM   s     r3   Útest_otherTypesNotEqualzTestURL.test_otherTypesNotEqualÃ  s„   € õ
 ŒMÐ-Ñ.Ô.ˆØ×Ò˜˜bšÐ"@ÑAÔAÐAØ×Ò˜�f™hœhšÐ(GÑHÔHÐHØ×Ò˜A˜rÑ"Ô"Ð"Ø×Ò˜A�v™xœxÑ(Ô(Ð(Ð(Ð(r5   c                 óh   — t          j        d¦  «        }|                      ||k    d|z  ¦  «         dS )zJ
        Identical L{URL}s are not unequal (C{!=}) to each other.
        rÒ   z%r == itselfN©r   r\   rÚ   rM   s     r3   Útest_identicalNotUnequalz TestURL.test_identicalNotUnequalÎ  s9   € õ
 ŒMÐAÑBÔBˆØ×Ò˜˜aš °!Ñ!3Ñ4Ô4Ð4Ð4Ð4r5   c                 ó”   — t          j        d¦  «        }t          j        d¦  «        }|                      ||k    |›d|›�¦  «         dS )zU
        Structurally similar L{URL}s are not unequal (C{!=}) to each other.
        rÒ   ú == Nrá   rÓ   s      r3   Útest_similarNotUnequalzTestURL.test_similarNotUnequalÖ  sO   € õ
 Œ]ÐBÑCÔCˆÝŒ]ÐBÑCÔCˆØ×Ò˜˜rš°°°°R°RÐ#8Ñ9Ô9Ð9Ð9Ð9r5   c                 ó”   — t          j        d¦  «        }t          j        d¦  «        }|                      ||k    |›d|›�¦  «         dS )zS
        Structurally different L{URL}s are unequal (C{!=}) to each other.
        r×   rØ   rä   N)r   r\   r#   rÓ   s      r3   Útest_differentUnequalzTestURL.test_differentUnequalß  sM   € õ
 Œ]Ð/Ñ0Ô0ˆÝŒ]Ð/Ñ0Ô0ˆØ�Š˜˜bš°°°°B°BÐ"7Ñ8Ô8Ð8Ð8Ð8r5   c                 ó®   — t          j        d¦  «        }|                      |dk    d¦  «         |                      |t          ¦   «         k    d¦  «         dS )z;
        L{URL} is unequal (C{!=}) to other types.
        r   rÝ   zURL must differ from a number.z"URL must be differ from an object.N)r   r\   r#   rÞ   rM   s     r3   Útest_otherTypesUnequalzTestURL.test_otherTypesUnequalè  sP   € õ
 ŒMÐ-Ñ.Ô.ˆØ�Š˜˜RšÐ!AÑBÔBÐBØ�Š˜�V™XœXšÐ'KÑLÔLÐLÐLÐLr5   c                 ó†  — d}t          j        |¦  «        }|                     ¦   «         }|                      |j        d¦  «         |                      |j        d         d¦  «         |                      |                     ¦   «         |¦  «         d}|                     ¦   «         }|                      |||›d|›�¦  «         dS )z‹
        L{URL.asURI} produces an URI which converts any URI unicode encoding
        into pure US-ASCII and returns a new L{URL}.
        õ   http://Ã©.com/eÌ�?aÌ�=iÌ�#uÌ�u   Ã©.comr   u   eÌ�ú.http://xn--9ca.com/%C3%A9?%C3%A1=%C3%AD#%C3%BArÙ   N)r   r\   ÚasURIr*   r(   r)   r^   )r.   Úunicodeyrl   ÚuriÚexpectedURIÚ	actualURIs         r3   Ú
test_asURIzTestURL.test_asURIñ  sÎ   € ðBð 	õ Œm˜HÑ%Ô%ˆØ�iŠi‰kŒkˆØ×Ò˜œÐ#LÑMÔMÐMØ×ÒØŒH�QŒKÐMñ	
ô 	
ð 	
ð 	×Ò˜Ÿš™œ¨Ñ1Ô1Ð1ØFˆØ—K’K‘M”Mˆ	Ø×ÒØ�{°)°)°)¸[¸[Ð$Iñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó†  — d}t          j        |¦  «        }|                     ¦   «         }|                      |j        d¦  «         |                      |j        d         d¦  «         |                      |                     ¦   «         |¦  «         d}|                     ¦   «         }|                      |||›d|›�¦  «         dS )zœ
        L{URL.asIRI} decodes any percent-encoded text in the URI, making it
        more suitable for reading by humans, and returns a new L{URL}.
        rì   zxn--9ca.comr   z%C3%A9u   http://Ã©.com/Ã©?Ã¡=Ã­#ÃºrÙ   N)r   r\   ÚasIRIr*   r(   r)   r^   )r.   Úasciiishrï   rl   ÚexpectedIRIÚ	actualIRIs         r3   Ú
test_asIRIzTestURL.test_asIRI  sÅ   € ð DˆÝŒm˜HÑ%Ô%ˆØ�iŠi‰kŒkˆØ×Ò˜œ =Ñ1Ô1Ð1Ø×Ò˜œ !œ hÑ/Ô/Ð/Ø×Ò˜Ÿš™œ¨Ñ1Ô1Ð1ð3ð 	ð —K’K‘M”Mˆ	Ø×ÒØ�{°)°)°)¸[¸[Ð$Iñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó¾   — d}t          j        |¦  «        }|                     ¦   «         }d}|                     ¦   «         }|                      |||›d|›�¦  «         dS )zœ
        Bad UTF-8 in a path segment, query parameter, or fragment results in
        that portion of the URI remaining percent-encoded in the IRI.
        z http://xn--9ca.com/%00%FF/%C3%A9u   http://Ã©.com/%00%FF/Ã©rÙ   N)r   r\   rô   r^   r*   )r.   ÚurlWithBinaryrï   rl   rö   r÷   s         r3   Útest_badUTF8AsIRIzTestURL.test_badUTF8AsIRI#  sr   € ð ;ˆÝŒm˜MÑ*Ô*ˆØ�iŠi‰kŒkˆð2ð 	ð
 —K’K‘M”Mˆ	Ø×ÒØ�{°)°)°)¸[¸[Ð$Iñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óª   — d}t          j        |¦  «        }|                     ¦   «         }|                      |                     ¦   «         |¦  «         dS )zT
        A L{URL} composed of non-ASCII text will result in non-ASCII text.
        rë   N)r   r\   rô   r*   r^   )r.   rî   rl   ÚalsoIRIs       r3   Útest_alreadyIRIAsIRIzTestURL.test_alreadyIRIAsIRI6  sQ   € ðBð 	õ Œm˜HÑ%Ô%ˆØ—)’)‘+”+ˆØ×Ò˜ŸšÑ*Ô*¨HÑ5Ô5Ð5Ð5Ð5r5   c                 óª   — d}t          j        |¦  «        }|                     ¦   «                              ¦   «         }|                      ||¦  «         dS )zH
        A L{URL} composed of encoded text will remain encoded.
        rì   N)r   r\   rí   r^   r*   )r.   rð   rï   rñ   s       r3   Útest_alreadyURIAsURIzTestURL.test_alreadyURIAsURIF  sN   € ð
 GˆÝŒm˜KÑ(Ô(ˆØ—I’I‘K”K×'Ò'Ñ)Ô)ˆ	Ø×Ò˜ KÑ0Ô0Ð0Ð0Ð0r5   c                 ó  — t          j        d¦  «        }|                      |                     d¦  «        d¦  «         |                      |                     d¦  «        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     d¬	¦  «                             ¦   «         d
¦  «         dS )z{
        L{URL.from_text} will parse the C{userinfo} portion of the URI
        separately from the host and port.
        z<http://someuser:somepassword@example.com/some-segment@ignoreTz!someuser:somepassword@example.comFzsomeuser:@example.comzsomeuser:somepasswordÚsomeuserz0http://someuser:@example.com/some-segment@ignore©r8   z/http://someuser@example.com/some-segment@ignoreN)r   r\   r*   Ú	authorityr8   Úuserr^   rŸ   r~   s     r3   Útest_userinfozTestURL.test_userinfoP  s  € õ ŒmØJñ
ô 
ˆð 	×ÒØ�MŠM˜$ÑÔÐ!Dñ	
ô 	
ð 	
ð 	×Ò˜Ÿš uÑ-Ô-Ð/FÑGÔGÐGØ×Ò˜œÐ'>Ñ?Ô?Ð?Ø×Ò˜œ :Ñ.Ô.Ð.Ø×ÒØ�KŠK‰MŒMÐMñ	
ô 	
ð 	
ð 	×ÒØ�KŠK ˆKÑ,Ô,×4Ò4Ñ6Ô6Ø=ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó´   — t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         dS )zJ
        L{URL.from_text} parses custom port numbers as integers.
        zhttp://www.example.com:8080/i�  N)r   r\   r*   r7   r^   )r.   ÚportURLs     r3   Útest_portTextzTestURL.test_portTextg  sS   € õ
 ”-Ð >Ñ?Ô?ˆØ×Ò˜œ tÑ,Ô,Ð,Ø×Ò˜ŸšÑ*Ô*Ð,JÑKÔKÐKÐKÐKr5   c                 óz   — |                       t          j        d¦  «                             ¦   «         d¦  «         dS )a  
        Although L{URL} instances are mainly for dealing with HTTP, other
        schemes (such as C{mailto:}) should work as well.  For example,
        L{URL.from_text}/L{URL.to_text} round-trips cleanly for a C{mailto:}
        URL representing an email address.
        zmailto:user@example.comN)r*   r   r\   r^   rY   s    r3   Útest_mailtozTestURL.test_mailtop  sC   € ð 	×ÒÝŒMÐ3Ñ4Ô4×<Ò<Ñ>Ô>Ø%ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 ó   — t          j        d¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         |                      |                     ¦   «         d¦  «         dS )zj
        An HTTP URL without a hostname, but with a path, should also round-trip
        cleanly.
        zhttp:relative-pathr   )zrelative-pathFN)r   r\   r*   r(   r)   Úuses_netlocr^   )r.   Úwithout_hosts     r3   Útest_httpWithoutHostzTestURL.test_httpWithoutHost}  s‰   € õ ”}Ð%9Ñ:Ô:ˆØ×Ò˜Ô*¨BÑ/Ô/Ð/Ø×Ò˜Ô*Ð,>Ñ?Ô?Ð?Ø×Ò˜Ô1°5Ñ9Ô9Ð9Ø×Ò˜×-Ò-Ñ/Ô/Ð1EÑFÔFÐFÐFÐFr5   c                 ó¼   — d}t          dg¬¦  «        }|                      |j        |¦  «         t          ddi¬¦  «        }|                      |j        |¦  «         dS )z´
        When a L{URL} is created with a C{query} argument, the C{query}
        argument is converted into an N-tuple of 2-tuples, sensibly
        handling dictionaries.
        )©ÚalphaÚbetar  rÌ   r  r  N)r   r*   r,   )r.   r;   rk   s      r3   Útest_queryIterablezTestURL.test_queryIterable‰  sh   € ð (ˆÝÐ*Ð+Ð,Ñ,Ô,ˆØ×Ò˜œ HÑ-Ô-Ð-Ý˜ &Ð)Ð*Ñ*Ô*ˆØ×Ò˜œ HÑ-Ô-Ð-Ð-Ð-r5   c                 ó`   — t          ddg¬¦  «        }|                      |j        d¦  «         dS )zr
        When a L{URL} is created with a C{path} argument, the C{path} is
        converted into a tuple.
        rÊ   rË   ©r)   rÉ   N)r   r*   r)   r~   s     r3   Útest_pathIterablezTestURL.test_pathIterable–  s8   € õ ˜ Ð)Ð*Ñ*Ô*ˆØ×Ò˜œÐ#5Ñ6Ô6Ð6Ð6Ð6r5   c           	      óÌ  ‡ ‡‡—  G d„ dt           ¦  «        Št          t          u rdnd}ˆ fd„Š|fˆˆˆ fd„	} |d¦  «          |d¦  «          |d	¦  «          |d
d¦  «          |d¦  «          |dd¦  «         ‰                      t          ¦  «        5 }t          t          t           ‰¦   «         ¦  «        g¬¦  «         ddd¦  «         n# 1 swxY w Y    ‰||d¦  «         ‰                      t          ¦  «        5 }t          dt          t           ‰¦   «         ¦  «        fg¬¦  «         ddd¦  «         n# 1 swxY w Y    ‰||dz   d¦  «         ‰                      t          ¦  «        5 }t          t          t           ‰¦   «         ¦  «        dfg¬¦  «         ddd¦  «         n# 1 swxY w Y    ‰||d¦  «         ‰                      t          ¦  «        5  t          t          t          t          t          f          ‰¦   «         ¦  «        g¬¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      t          ¦  «        5  t          t          t          t          t          f         d¦  «        g¬¦  «         ddd¦  «         n# 1 swxY w Y   ‰                      t          ¦  «        5  t          t          t          t          t          f         d¦  «        g¬¦  «         ddd¦  «         n# 1 swxY w Y   t          j
        d¦  «        }‰                      t          ¦  «        5 }|                     t          t           ‰¦   «         ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y    ‰||d¦  «         ‰                      t          ¦  «        5 }|                     t          t           ‰¦   «         ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y    ‰||d¦  «         ‰                      t          ¦  «        5 }|                     t          t           ‰¦   «         ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y    ‰||d¦  «         dS )a¤  
        Passing an argument of the wrong type to any of the constructor
        arguments of L{URL} will raise a descriptive L{TypeError}.

        L{URL} typechecks very aggressively to ensure that its constitutent
        parts are all properly immutable and to prevent confusing errors when
        bad data crops up in a method call long after the code that called the
        constructor is off the stack.
        c                   ó   — e Zd Zd„ Zd„ ZdS )ú1TestURL.test_invalidArguments.<locals>.Unexpectedc                 ó   — dS )NÚwrong© rY   s    r3   Ú__str__z9TestURL.test_invalidArguments.<locals>.Unexpected.__str__¬  s   € à�wr5   c                 ó   — dS )Nú<unexpected>r  rY   s    r3   Ú__repr__z:TestURL.test_invalidArguments.<locals>.Unexpected.__repr__°  s   € à%�~r5   N)Ú__name__Ú
__module__Ú__qualname__r  r!  r  r5   r3   Ú
Unexpectedr  «  s2   € € € € € ðð ð ð&ð &ð &ð &ð &r5   r%  r&   Ústrc                 ó‚   •— ‰                      t          | j        ¦  «        d                     ||d¦  «        ¦  «         d S )Nzexpected {0} for {1}, got {2}r   )r*   r&  Ú	exceptionr§   )ÚraisedÚexpectationr¹   r.   s      €r3   ÚassertRaisedz3TestURL.test_invalidArguments.<locals>.assertRaised¶  sM   ø€ à×ÒÝ�FÔ$Ñ%Ô%Ø/×6Ò6Ø  ~ñô ñô ð ð ð r5   c                 ó²   •— ‰                      t          ¦  «        5 }t          di |  ‰¦   «         i¤Ž d d d ¦  «         n# 1 swxY w Y    ‰||| ¦  «         d S )Nr  )r›   Ú	TypeErrorr   )Úparamr*  r)  r%  r+  r.   s      €€€r3   rA   z,TestURL.test_invalidArguments.<locals>.check¿  s¤   ø€ à×"Ò"¥9Ñ-Ô-ð -°ÝÐ,Ð,�u˜j˜j™lœlÐ+Ð,Ð,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð ˆL˜ ¨eÑ4Ô4Ð4Ð4Ð4s   œ?¿AÁAr%   r(   r-   rƒ   Úboolr8   r7   zint or NoneTyper  Nzpath segmentr¹   rÌ   z or NoneTypezquery parameter valuerº   zquery parameter name)rH   r2   Úvv)rH   zhttps://valid.example.com/zrelative URL)rÞ   Úbytesr&  r›   r-  r   r	   r   r   Ú
ValueErrorr\   rx   rŠ   rŽ   )r.   ÚdefaultExpectationrA   r)  rk   r%  r+  s   `    @@r3   Útest_invalidArgumentszTestURL.test_invalidArgumentsŸ  s¤  øøø€ ð	&ð 	&ð 	&ð 	&ð 	&�ñ 	&ô 	&ð 	&õ +0µ3¨,¨,˜Y˜Y¸EÐð	ð 	ð 	ð 	ð 	ð &8ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	ˆˆh‰ŒˆØˆˆf‰ŒˆØˆˆjÑÔÐØˆˆh˜ÑÔÐØˆˆjÑÔÐØˆˆfÐ'Ñ(Ô(Ð(à×Ò�yÑ)Ô)ð 	1¨VÝ•d�4  ¡¤Ñ.Ô.Ð/Ð0Ñ0Ô0Ð0ð	1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	ˆ�VÐ/°Ñ@Ô@Ð@à×Ò�yÑ)Ô)ð 	<¨VÝ˜¥¥T¨:¨:©<¬<Ñ 8Ô 8Ð9Ð:Ð;Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	ˆØÐ&¨Ñ7Ð9Pñ	
ô 	
ð 	
ð ×Ò�yÑ)Ô)ð 	=¨VÝ��T : :¡<¤<Ñ0Ô0°'Ð:Ð;Ð<Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	ˆ�VÐ/Ð1GÑHÔHÐHð ×Ò�yÑ)Ô)ð 	?ð 	?Ý•t�E¥$­ *Ô-¨z¨z©|¬|Ñ<Ô<Ð=Ð>Ñ>Ô>Ð>ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð ×Ò�zÑ*Ô*ð 	Cð 	CÝ•t�E¥$­ *Ô-Ð/?Ñ@Ô@ÐAÐBÑBÔBÐBð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	Cð ×Ò�zÑ*Ô*ð 	9ð 	9Ý•t�E¥$­ *Ô-¨vÑ6Ô6Ð7Ð8Ñ8Ô8Ð8ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9õ ŒmÐ8Ñ9Ô9ˆØ×Ò�yÑ)Ô)ð 	0¨VØ�IŠI•d�4  ¡¤Ñ.Ô.Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0àˆ�VÐ/°Ñ@Ô@Ð@Ø×Ò�yÑ)Ô)ð 	2¨VØ�KŠK��T : :¡<¤<Ñ0Ô0Ñ1Ô1Ð1ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2àˆ�VÐ/°Ñ@Ô@Ð@Ø×Ò�yÑ)Ô)ð 	0¨VØ�IŠI•d�4  ¡¤Ñ.Ô.Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0àˆ�VÐ/°Ñ@Ô@Ð@Ð@Ð@s¢   Â-CÃCÃCÄ /D;Ä;D?ÅD?Å0/F+Æ+F/Æ2F/Ç?H(È(H,È/H,É7JÊJÊJÊ57K8Ë8K<Ë?K<Ì11M.Í.M2Í5M2Î 1OÏO!Ï$O!Ð1QÑQÑQc                 ó  — |                       t          ¦  «        5 }t          d¬¦  «         ddd¦  «         n# 1 swxY w Y   |                      t	          |j        ¦  «        d                     t          d¦  «        ¦  «        ¦  «         dS )z¸
        Technically, L{str} (or L{unicode}, as appropriate) is iterable, but
        C{URL(path="foo")} resulting in C{URL.from_text("f/o/o")} is never what
        you want.
        rS   r  Nz,expected iterable of text for path, not: {0})r›   r-  r   r*   r&  r(  r§   r'   )r.   r)  s     r3   Ú!test_technicallyTextIsIterableButz)TestURL.test_technicallyTextIsIterableButô  s¾   € ð ×Ò�yÑ)Ô)ð 	¨VÝ�UˆO‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×ÒÝ�Ô Ñ!Ô!Ø:×AÒAÅ$ÀuÁ+Ä+ÑNÔNñ	
ô 	
ð 	
ð 	
ð 	
s   ›8¸<¿<c                 ó  — t          d¬¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         |                      t          j        d¦  «        j        d¦  «         |                      t          j        d¦  «        j        d¦  «         |                      t          j        d¦  «        j        d¦  «         t          dd¬¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          d	¬¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d
¦  «         t          d¬¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          d¬¦  «        }|                      |j        d ¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         t          j        d¦  «        }|                      |j        d¦  «         d S )NÚhttps©r%   Tzhttps://zhttps:Fzhttps:/)r%   r  z	git+httpszgit+https://Úmailtozmailto:Úztpzztp:zztp://test.comzztp:test:com)r   r*   r  r^   r\   r~   s     r3   Útest_netloczTestURL.test_netloc  s   € å˜Ð!Ñ!Ô!ˆØ×Ò˜œ¨$Ñ/Ô/Ð/Ø×Ò˜Ÿš™œ¨
Ñ3Ô3Ð3à×Ò�œ xÑ0Ô0Ô<¸eÑDÔDÐDà×Ò�œ yÑ1Ô1Ô=¸uÑEÔEÐEà×Ò�œ zÑ2Ô2Ô>ÀÑEÔEÐEå˜¨eÐ4Ñ4Ô4ˆØ×Ò˜œ¨%Ñ0Ô0Ð0Ø×Ò˜Ÿš™œ¨Ñ1Ô1Ð1å˜Ð%Ñ%Ô%ˆØ×Ò˜œ¨$Ñ/Ô/Ð/Ø×Ò˜Ÿš™œ¨Ñ7Ô7Ð7å˜Ð"Ñ"Ô"ˆØ×Ò˜œ¨%Ñ0Ô0Ð0Ø×Ò˜Ÿš™œ¨	Ñ2Ô2Ð2å˜ÐÑÔˆØ×Ò˜œ¨$Ñ/Ô/Ð/Ø×Ò˜Ÿš™œ¨Ñ/Ô/Ð/åŒmÐ,Ñ-Ô-ˆØ×Ò˜œ¨$Ñ/Ô/Ð/åŒm˜NÑ+Ô+ˆØ×Ò˜œ¨%Ñ0Ô0Ð0Ð0Ð0r5   c                 ó    — d}t          j        |¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚t          |j                 |j        k    sJ ‚d S )Nz5https://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:80/z'2001:0db8:85a3:0000:0000:8a2e:0370:7334r@   )r   r\   r(   r7   r   r%   )r.   Útrk   s      r3   Útest_ipv6_with_portzTestURL.test_ipv6_with_port$  sY   € àCˆÝŒm˜AÑÔˆØŒxÐDÒDÐDÐDÐDØŒx˜2Š~ˆ~ˆ~ˆ~Ý˜sœzÔ*¨c¬hÒ6Ð6Ð6Ð6Ð6Ð6r5   c                 óÜ  — d}t          j        |¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d}t          j        |¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d	}t          j        |¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        d
k    sJ ‚|j        dk    sJ ‚d S )Nz3https://user:pass@example.com/path/to/here?k=v#nicer8  ú	user:passúexample.com)r)   ÚtoÚhereÚnicez1https://user:pass@127.0.0.1/path/to/here?k=v#nicez	127.0.0.1z-https://user:pass@[::1]/path/to/here?k=v#nicez::1)r   r\   r%   r8   r(   r)   r-   ©r.   Útextrk   s      r3   Ú
test_basiczTestURL.test_basic,  s>  € àDˆÝŒm˜DÑ!Ô!ˆØŒz˜WÒ$Ð$Ð$Ð$ØŒ|˜{Ò*Ð*Ð*Ð*ØŒx˜=Ò(Ð(Ð(Ð(ØŒxÐ1Ò1Ð1Ð1Ð1ØŒ|˜vÒ%Ð%Ð%Ð%àBˆÝŒm˜DÑ!Ô!ˆØŒz˜WÒ$Ð$Ð$Ð$ØŒ|˜{Ò*Ð*Ð*Ð*ØŒx˜;Ò&Ð&Ð&Ð&ØŒxÐ1Ò1Ð1Ð1Ð1à>ˆÝŒm˜DÑ!Ô!ˆØŒz˜WÒ$Ð$Ð$Ð$ØŒ|˜{Ò*Ð*Ð*Ð*ØŒx˜5Ò Ð Ð Ð ØŒxÐ1Ò1Ð1Ð1Ð1Ð1Ð1r5   c                 óR   — |                       t          t          j        d¦  «         d S )Nz#

©r›   r   r   r\   rY   s    r3   Útest_invalid_urlzTestURL.test_invalid_urlD  s"   € à×Ò�-­¬¸Ñ@Ô@Ð@Ð@Ð@r5   c                 óR   — |                       t          t          j        d¦  «         d S )Nzhttp://abc:

/#rJ  rY   s    r3   Útest_invalid_authority_urlz"TestURL.test_invalid_authority_urlH  s#   € à×Ò�-­¬Ð8KÑLÔLÐLÐLÐLr5   c                 óÖ   — g d¢}|D ]a}d|z   dz   }|                       t          j        t          t          j        |¦  «         |                       t
          t          j        |¦  «         Œbd S )N)z2001::0234:C1ab::A0:aabc:003Fz2001::1::3Fú:z::::z::256.0.0.1zhttp://[ú])r›   ÚsocketÚerrorr   ÚAF_INET6r   r   r\   )r.   Úinvalid_ipv6_ipsÚipr‹   s       r3   Útest_invalid_ipv6zTestURL.test_invalid_ipv6L  s|   € ð
ð 
ð 
Ðð #ð 	Fð 	FˆBØ! B‘¨Ñ,ˆHØ×Ò�fœl­Iµv´ÈÑKÔKÐKØ×Ò�m­S¬]¸HÑEÔEÐEÐEð	Fð 	Fr5   c                 óž   — |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         d S )Nzftp://portmouth:smashz+http://reader.googlewebsite.com:neverforget)r›   r   r   r\   r2  rY   s    r3   Útest_invalid_portzTestURL.test_invalid_portZ  sJ   € à×Ò�-­¬Ð8OÑPÔPÐPØ×ÒÝÝŒMØ9ñ	
ô 	
ð 	
ð 	
ð 	
r5   c                 óJ  — t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     ¦   «                              ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     ¦   «                              ¦   «         d¦  «         d S )Nu   http://bÃ¼cher.chu
   bÃ¼cher.chzhttp://xn--bcher-kva.chr   zxn--bcher-kva.chu   https://bÃ¼cher.ch)r   r\   r*   r(   r^   rÄ   rj   rÓ   s      r3   Ú	test_idnazTestURL.test_idnac  sí   € åŒ]Ð.Ñ/Ô/ˆØ×Ò˜œ ,Ñ/Ô/Ð/Ø×Ò˜Ÿš™œÐ':Ñ;Ô;Ð;Ø×Ò˜Ÿš™œ×,Ò,Ñ.Ô.Ð0IÑJÔJÐJåŒ]Ð5Ñ6Ô6ˆØ×Ò˜œÐ"4Ñ5Ô5Ð5Ø×Ò˜Ÿš™œÐ'AÑBÔBÐBØ×Ò˜Ÿš™œ×,Ò,Ñ.Ô.Ð0DÑEÔEÐEÐEÐEr5   c                 óÌ  — t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          j        d	¦  «        }|                      |j        d
¦  «         |                      |                     ¦   «         d	¦  «         t          j        d¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d¦  «         t          ddd¬¦  «        }|                      |                     ¦   «         d¦  «         t          d
ddd¬¦  «        }|                      |                     ¦   «         d¦  «         t          j        d¦  «        }|                     d¬¦  «        }|                      |                     ¦   «         d¦  «         d}t          j        |¦  «        }|                     d¬¦  «        }|                      |                     ¦   «         d¦  «         |                     d¬¦  «        }|                      |                     ¦   «         |¦  «         d S )Nzmailto:mahmoud@hatnote.comr:  zhttp://hatnote.comr?   znewscheme:a:b:cÚ	newschemeznewerscheme://a/b/cÚnewerschemez%git+ftp://gitstub.biz/glyph/lefkowitzzgit+ftpz'what+mailto:freerealestate@enotuniq.orgzwhat+mailtor;  )ÚxrÀ   ÚzT)r%   r)   rƒ   z
ztp:/x/y/z)r^  rÀ   r_  r   )r%   r)   rƒ   r  zgit+ftp:///x/y/z/zfile:///path/to/heckr9  zmailto:/path/to/heckzunregisteredscheme:///a/b/cF)r  zunregisteredscheme:/a/b/c)r   r\   r*   r%   r^   rŸ   )r.   rk   Úurl2r‹   Úno_netloc_urlÚ
netloc_urls         r3   Útest_netloc_slasheszTestURL.test_netloc_slasheso  sø  € õ ŒmÐ8Ñ9Ô9ˆØ×Ò˜œ XÑ.Ô.Ð.Ø×Ò˜Ÿš™œÐ(DÑEÔEÐEåŒmÐ0Ñ1Ô1ˆØ×Ò˜œ VÑ,Ô,Ð,Ø×Ò˜Ÿš™œÐ(<Ñ=Ô=Ð=õ ŒmÐ-Ñ.Ô.ˆØ×Ò˜œ [Ñ1Ô1Ð1Ø×Ò˜Ÿš™œÐ(9Ñ:Ô:Ð:åŒmÐ1Ñ2Ô2ˆØ×Ò˜œ ]Ñ3Ô3Ð3Ø×Ò˜Ÿš™œÐ(=Ñ>Ô>Ð>õ ŒmÐCÑDÔDˆØ×Ò˜œ YÑ/Ô/Ð/Ø×Ò˜Ÿš™œÐ(OÑPÔPÐPåŒmÐEÑFÔFˆØ×Ò˜œ ]Ñ3Ô3Ð3Ø×ÒØ�KŠK‰MŒMÐDñ	
ô 	
ð 	
õ ˜ _¸TÐBÑBÔBˆØ×Ò˜Ÿš™œ¨Ñ5Ô5Ð5õ ØØ$ØØð	
ñ 
ô 
ˆð 	×Ò˜Ÿš™œÐ(;Ñ<Ô<Ð<õ ŒmÐ2Ñ3Ô3ˆØ�{Š{ (ˆ{Ñ+Ô+ˆØ×Ò˜Ÿš™œÐ)?Ñ@Ô@Ð@à0ˆÝŒm˜HÑ%Ô%ˆØŸš°˜Ñ6Ô6ˆØ×Ò˜×.Ò.Ñ0Ô0Ð2MÑNÔNÐNØ—[’[¨T�[Ñ2Ô2ˆ
Ø×Ò˜×+Ò+Ñ-Ô-¨xÑ8Ô8Ð8àˆr5   c                 ó   — t          dg¬¦  «        }|                      |                     ¦   «         d¦  «         |                     d¬¦  «        }|                      |                     ¦   «         d¦  «         |                      ||¦  «         dS )z•
        On host-relative URLs, the C{rooted} flag can be updated to indicate
        that the path should no longer be treated as absolute.
        rÊ   r  T)rƒ   z/helloN)r   r*   r^   rŸ   rr   )r.   ÚaÚbs      r3   Útest_rooted_to_relativezTestURL.test_rooted_to_relativeª  s�   € õ �g�YÐÑÔˆØ×Ò˜Ÿš™œ gÑ.Ô.Ð.Ø�IŠI˜TˆIÑ"Ô"ˆØ×Ò˜Ÿš™œ hÑ/Ô/Ð/Ø×Ò˜A˜qÑ!Ô!Ð!Ð!Ð!r5   c                 óÊ  — t          ddgd¬¦  «        }|                      |j        d¦  «         t          dgd¬¦  «        }|                      |j        d¦  «         |                      ||¦  «         t          ddgd¬¦  «        }t          ddg¬¦  «        }|                      ||¦  «         |                      |j        d¦  «         |                      |j        d¦  «         d	S )
a	  
        The C{rooted} flag can be updated in some cases, but it cannot be made
        to conflict with other facts surrounding the URL; for example, all URLs
        involving an authority (host) are inherently rooted because it is not
        syntactically possible to express otherwise; also, once an unrooted URL
        gains a path that starts with an empty string, that empty string is
        elided and it becomes rooted, because these cases are syntactically
        indistinguisable in real URL text.
        r   rS   F)r)   rƒ   TrT   )r(   r)   rƒ   )r(   r)   N)r   r*   rƒ   )r.   Úrelative_path_rootedÚrelative_flag_rootedÚattempt_unrooted_absoluteÚnormal_absolutes        r3   Útest_autorootedzTestURL.test_autorooted¶  s÷   € õ  #¨¨U¨¸EÐBÑBÔBÐØ×ÒÐ-Ô4°dÑ;Ô;Ð;Ý"¨¨¸Ð=Ñ=Ô=ÐØ×ÒÐ-Ô4°dÑ;Ô;Ð;Ø×ÒÐ-Ð/CÑDÔDÐDå$'¨U¸%¸ÈÐ$OÑ$OÔ$OÐ!Ý 5°¨wÐ7Ñ7Ô7ˆØ×ÒÐ2°OÑDÔDÐDØ×Ò˜Ô/°Ñ6Ô6Ð6Ø×ÒÐ2Ô9¸4Ñ@Ô@Ð@Ð@Ð@r5   c                 óJ  — t          ddd¬¦  «        }t          dd¬¦  «        }t          ddd¬¦  «        }|                      |j        d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         t          j        d¦  «        }|                      t	          |¦  «        t	          |¦  «        ¦  «         |                      t	          |¦  «        t	          |¦  «        ¦  «         |                      |                     ¦   «         |                     ¦   «         ¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         |                      ||¦  «         dS )	a¤  
        URLs which include a ``://`` netloc-separator for any reason are
        inherently rooted, regardless of the value or presence of the
        ``rooted`` constructor argument.

        They may include a netloc-separator because their constructor was
        directly invoked with an explicit host or port, or because they were
        parsed from a string which included the literal ``://`` separator.
        Úudpi$  F)r%   r7   rƒ   )r%   r7   Tzudp://:4900N)r   r*   rƒ   r\   r&  ÚasText)r.   Údirectly_constructedÚdirectly_constructed_implictÚdirectly_constructed_rootedÚparseds        r3   Ú!test_rooted_with_port_but_no_hostz)TestURL.test_rooted_with_port_but_no_hostÍ  sŽ  € õ  #¨%°dÀ5ÐIÑIÔIÐÝ'*°%¸dÐ'CÑ'CÔ'CÐ$Ý&)°¸TÈ$Ð&OÑ&OÔ&OÐ#Ø×ÒÐ-Ô4°dÑ;Ô;Ð;Ø×ÒÐ5Ô<¸dÑCÔCÐCØ×ÒÐ4Ô;¸TÑBÔBÐBÝ”˜}Ñ-Ô-ˆØ×Ò�Ð1Ñ2Ô2µC¸±K´KÑ@Ô@Ð@Ø×Ò�Ð9Ñ:Ô:½CÀ¹K¼KÑHÔHÐHØ×ÒÐ-×4Ò4Ñ6Ô6¸¿º¹¼ÑHÔHÐHØ×ÒÐ-¨vÑ6Ô6Ð6Ø×ÒÐ-Ð/KÑLÔLÐLØ×ÒÐ-Ð/JÑKÔKÐKØ×ÒÐ5°vÑ>Ô>Ð>Ø×ÒÐ4°fÑ=Ô=Ð=Ð=Ð=r5   c                 ó  — |                       t          ¦  «        5  t          t          ¦  «         d d d ¦  «         n# 1 swxY w Y   |                       t          ¦  «        5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚHTTP_____more_like_imHoTTeP)r›   r2  r   r]   rY   s    r3   Útest_wrong_constructorzTestURL.test_wrong_constructorè  sÿ   € à×Ò�zÑ*Ô*ð 	ð 	å•	‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×Ò�zÑ*Ô*ð 	/ð 	/åÐ-Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s!   ›<¼A ÁA Á!A>Á>BÂBc                 óh  — t          j        d¦  «        }|j        dk    sJ ‚|                     d¬¦  «        }|                     ¦   «         }|                     d¬¦  «        dk    sJ ‚|                     d¬¦  «        d	k    sJ ‚|                     ¦   «                              d¬¦  «        d
k    sJ ‚d S )Nzhttp://user:pass@example.comrA  zus%20her:passr  Trc   zhttp://us her:pass@example.comFzhttp://us her:@example.comz http://us%20her:pass@example.com)r   r\   r8   rŸ   rj   r^   rÄ   ©r.   rk   rl   s      r3   Útest_encoded_userinfozTestURL.test_encoded_userinfoñ  sÂ   € åŒmÐ:Ñ;Ô;ˆØŒ|˜{Ò*Ð*Ð*Ð*Ø�kŠk ?ˆkÑ3Ô3ˆØ�jŠj‰lŒlˆà�KŠK dˆKÑ+Ô+Ð/OÒOÐOÐOÐOà�{Š{¨ˆ{Ñ/Ô/Ð3OÒOÐOÐOÐOà�JŠJ‰LŒL× Ò ¨tÐ Ñ4Ô4Ø1ò2ð 2ð 2ð 2ð 2ð 2r5   c                 óÌ  — i }t          j        d¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚d||<   t          j        d¦  «        }|                     dd¦  «        }d||<   t	          |¦  «        dk    sJ ‚t          |                     ¦   «         ¦  «        dgk    sJ ‚t          t          ¦   «         ¦  «        t          t          ¦   «         ¦  «        k    sJ ‚d S )Nz.http://blog.hatnote.com/ask?utm_source=geocityr
   zhttp://blog.hatnote.com/askÚ
utm_sourceÚgeocityr   )r   r\   Úhashrµ   ÚlenÚlistÚvalues)r.   Úurl_mapÚurl1r`  s       r3   Ú	test_hashzTestURL.test_hash   sÐ   € àˆÝŒ}ÐMÑNÔNˆÝ�D‰zŒz�T $™ZœZÒ'Ð'Ð'Ð'àˆ�‰åŒ}Ð:Ñ;Ô;ˆØ�xŠx˜ iÑ0Ô0ˆàˆ�‰å�7‰|Œ|˜qÒ Ð Ð Ð Ý�G—N’NÑ$Ô$Ñ%Ô%¨!¨Ò,Ð,Ð,Ð,å•C‘E”E‰{Œ{�d¥3¡5¤5™kœkÒ)Ð)Ð)Ð)Ð)Ð)r5   c                 óš   — t          ¦   «         }t          |¦  «        }t          |¦  «        dk    sJ ‚d|vsJ ‚d|vsJ ‚d|vsJ ‚d|vsJ ‚d S )Né   r�   rp  rí   rô   )r   Údirr€  )r.   rk   r�   s      r3   Útest_dirzTestURL.test_dir  ss   € å‰eŒeˆÝ�#‰hŒhˆå�3‰xŒx˜"Š}ˆ}ˆ}ˆ}à Ð$Ð$Ð$Ð$Ø˜sÐ"Ð"Ð"Ð"Ø˜cÐ!Ð!Ð!Ð!Ø˜cÐ!Ð!Ð!Ð!Ð!Ð!r5   c                 óº   — t          j        d¦  «        }|                     ¦   «         dk    sJ ‚|                     ¦   «                              ¦   «         dk    sJ ‚d S )Nu"   http://example.com/a%20tÃ©%C3%A9stz&http://example.com/a%20t%C3%A9%C3%A9st)r   r�   rp  rí   r~   s     r3   Útest_twisted_compatzTestURL.test_twisted_compat  sX   € åŒlÐ?Ñ@Ô@ˆØ�zŠz‰|Œ|ÐCÒCÐCÐCÐCØ�yŠy‰{Œ{×!Ò!Ñ#Ô#Ð'OÒOÐOÐOÐOÐOÐOr5   c                 óº   — t          j        d¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     ¦   «         dk    sJ ‚d S )Nzhttp://example.com/?a=b&cr^  rÀ   z!http://example.com/?a=b&x=x&c&x=y)r   r\   rµ   r°   r^   r~   s     r3   Útest_set_orderingzTestURL.test_set_ordering%  sZ   € õ ŒmÐ7Ñ8Ô8ˆØ�gŠg�c˜3ÑÔˆØ�gŠg�c˜3ÑÔˆØ�{Š{‰}Œ}Ð CÒCÐCÐCÐCÐCÐCr5   c                 ó  — t          j        d¦  «        }t          j        |                     ¦   «         ¦  «        }||k    sJ ‚t          j        |                     ¦   «                              ¦   «         ¦  «        }||k    sJ ‚||k    sJ ‚t          j        d¦  «        }|                     ¦   «         }|                     ¦   «         dk    sJ ‚t          j        |                     ¦   «         ¦  «                             ¦   «         }||k    sJ ‚dS )zSee issue #4z#urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoobz1first-segment/urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoobz'first-segment/urn:ietf:wg:oauth:2.0:oobN)r   r\   r^   rj   rÄ   )r.   rÔ   r‘   r’   Úu4Úu5Úu6s          r3   Útest_schemeless_pathzTestURL.test_schemeless_path0  sâ   € õ Œ]Ð@ÑAÔAˆÝŒ]˜2Ÿ:š:™<œ<Ñ(Ô(ˆØ�RŠxˆxˆxˆxåŒ]˜2Ÿ9š9™;œ;×.Ò.Ñ0Ô0Ñ1Ô1ˆØ�RŠxˆxˆxˆxØ�RŠxˆxˆxˆxõ Œ]ÐNÑOÔOˆØ�YŠY‰[Œ[ˆØ�zŠz‰|Œ|ÐHÒHÐHÐHÐHåŒ]˜2Ÿ:š:™<œ<Ñ(Ô(×/Ò/Ñ1Ô1ˆØ�RŠxˆxˆxˆxˆxˆxr5   c                 ó~   — t          j        d¦  «        }|                     ¦   «         }|                     ¦   «          dS )z4See issue #7, affecting only narrow builds (2.6-3.3)zhttps://xn--vi8hiv.wsN)r   r\   rj   r^   rz  s      r3   Útest_emoji_domainzTestURL.test_emoji_domainC  s2   € õ ŒmÐ3Ñ4Ô4ˆØ�jŠj‰lŒlˆØ�Š‰Œˆˆˆr5   c                 ó  — |                       t          t          dd¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d¬¦  «         |                       t          t          d¬¦  «         d	S )
zPer issue #6 and #8r?   za/c)r%   r(   )ú?r  )ú#)ú&rf   rÌ   N)r›   r2  r   rY   s    r3   Útest_delim_in_paramzTestURL.test_delim_in_paramK  sx   € ð 	×Ò�*¥c°&¸uÐÑEÔEÐEØ×Ò�*¥c°ÐÑ7Ô7Ð7Ø×Ò�*¥c°ÐÑ7Ô7Ð7Ø×Ò�*¥c°-ÐÑAÔAÐAÐAÐAr5   c                 ó†  — t          j        d¦  «        }t          j        d¦  «        }||k    sJ ‚t          j        d¦  «        }t          j        d¦  «        }||k    sJ ‚t          j        d¦  «        }t          j        d¦  «        }||k    sJ ‚t          j        d¦  «        }t          j        d¦  «        }||k    sJ ‚d S )Nzhttp://example.com/zhttp://example.com)r   r\   rÓ   s      r3   Útest_empty_paths_eqzTestURL.test_empty_paths_eqS  sº   € åŒ]Ð0Ñ1Ô1ˆÝŒ]Ð/Ñ0Ô0ˆà�RŠxˆxˆxˆxåŒ]Ð/Ñ0Ô0ˆÝŒ]Ð/Ñ0Ô0ˆà�RŠxˆxˆxˆxåŒ]Ð/Ñ0Ô0ˆÝŒ]Ð0Ñ1Ô1ˆà�RŠxˆxˆxˆxåŒ]Ð0Ñ1Ô1ˆÝŒ]Ð0Ñ1Ô1ˆà�RŠxˆxˆxˆxˆxˆxr5   c                 óô   — t          j        d¦  «        j        dk    sJ ‚|                      t          t           j        d¦  «         |                      t          t           j        t          ¦   «         ¦  «         d S )Nz#okÚoks   bytes://x.y.z)r   r\   r-   r›   r-  rÞ   rY   s    r3   Útest_from_text_typezTestURL.test_from_text_typei  s_   € åŒ}˜UÑ#Ô#Ô,°Ò4Ð4Ð4Ð4Ø×Ò�)¥S¤]Ð4DÑEÔEÐEØ×Ò�)¥S¤]µF±H´HÑ=Ô=Ð=Ð=Ð=r5   c                 ó  — |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         |                       t          t          j        d¦  «         d S )Nzhttp://[::1/zhttp://::1]/zhttp://[[::1]/zhttp://[::1]]/zhttp://127.0.0.1:zhttp://127.0.0.1:hizhttp://127.0.0.1::80rJ  rY   s    r3   Útest_from_text_bad_authorityz$TestURL.test_from_text_bad_authorityo  sÇ   € ð 	×Ò�-­¬¸ÑGÔGÐGØ×Ò�-­¬¸ÑGÔGÐGØ×Ò�-­¬Ð8HÑIÔIÐIØ×Ò�-­¬Ð8HÑIÔIÐIð 	×Ò�-­¬Ð8KÑLÔLÐLà×Ò�-­¬Ð8MÑNÔNÐNà×Ò�-­¬Ð8NÑOÔOÐOÐOÐOr5   c                 óÆ  — t          j        d¦  «        }|                     d¦  «        g k    sJ ‚|                     d¦  «        dgk    sJ ‚t          |j        ¦  «        dk    sJ ‚|                     ¦   «         }|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚|                     d¦  «        d	gk    sJ ‚|j        d
k    sJ ‚| 	                    ¦   «         dk    sJ ‚|                     ddddd¬¦  «        }||k    sJ ‚t          j        d¦  «        }|                     ¦   «         }| 	                    ¦   «         dk    sJ ‚t          j        d¦  «        }|                     ¦   «         }| 	                    ¦   «         dk    sJ ‚t          d¬¦  «                             d¬¦  «         	                    ¦   «         dk    sJ ‚t          d¬¦  «                             ¦   «          	                    ¦   «         dk    sJ ‚t          dddgdgdd¬¦  «        }| 	                    d¬¦  «        d k    sJ ‚|                     ¦   «          	                    d¬¦  «        d!k    sJ ‚d S )"Nz0HTTP://Example.com/A%61/./../A%61?B%62=C%63#D%64ÚBbzB%62zC%63é   r?   rB  )ÚAaÚCcÚDdzhttp://example.com/Aa?Bb=Cc#DdFrW   zhttp://example.iozhttp://example.io/z/a%2fb/cd%3f?k%3d=v%23#testz/a%2Fb/cd%3F?k%3D=v%23#test)r   z%te%stsr  )Úpercentsz/%te%stsz/%25te%25stsÚftpz%%%z%a%b)ú%z%%r©  z%:%)r%   r)   r,   r-   r8   Trc   zftp://%:%@/%%%/%a%b?%=%%#%z0ftp://%25:%25@/%25%25%25/%25a%25b?%25=%25%25#%25)
r   r\   rÃ   r€  r)   Ú	normalizer%   r(   r-   r^   )	r.   rk   Únorm_urlÚnoop_norm_urlÚslashless_urlÚslashful_urlÚdelimited_urlÚnorm_delimited_urlÚpercenty_urls	            r3   Útest_normalizezTestURL.test_normalize  sÐ  € åŒmÐNÑOÔOˆØ�wŠw�t‰}Œ} Ò"Ð"Ð"Ð"Ø�wŠw�v‰Œ 6 (Ò*Ð*Ð*Ð*Ý�3”8‰}Œ} Ò!Ð!Ð!Ð!ð —=’=‘?”?ˆàŒ &Ò(Ð(Ð(Ð(ØŒ} Ò-Ð-Ð-Ð-ØŒ} Ò'Ð'Ð'Ð'Ø�|Š|˜DÑ!Ô! d VÒ+Ð+Ð+Ð+ØÔ  DÒ(Ð(Ð(Ð(Ø×ÒÑ!Ô!Ð%EÒEÐEÐEÐEð ŸšØ˜u¨5¸Èð &ñ 
ô 
ˆð  Ò#Ð#Ð#Ð#õ œÐ&9Ñ:Ô:ˆØ$×.Ò.Ñ0Ô0ˆØ×#Ò#Ñ%Ô%Ð)=Ò=Ð=Ð=Ð=õ œÐ&CÑDÔDˆØ*×4Ò4Ñ6Ô6ÐØ!×)Ò)Ñ+Ô+Ð/LÒLÐLÐLÐLõ �_Ð%Ñ%Ô%×/Ò/¸Ð/Ñ?Ô?×GÒGÑIÔIØòð ð ð õ ˜Ð(Ñ(Ô(×2Ò2Ñ4Ô4×<Ò<Ñ>Ô>À.ÒPÐPÐPÐPåØØ˜�Ø�-ØØð
ñ 
ô 
ˆð × Ò ¨tÐ Ñ4Ô4Ø+ò,ð ,ð ,ð ,ð ×"Ò"Ñ$Ô$×,Ò,¸4Ð,Ñ@Ô@ØAòBð Bð Bð Bð Bð Br5   c                 ó¸  — d}t          j        |¦  «        }t          |¦  «        |k    sJ ‚t          |¦  «        dk    sJ ‚t          rJt          t          |¦  «        t          ¦  «        sJ ‚t          t          |¦  «        t          ¦  «        sJ ‚d S t          t          |¦  «        t          ¦  «        sJ ‚t          t          |¦  «        t          ¦  «        sJ ‚d S )Nu&   http://example.com/Ã¡/y%20a%20y/?b=%25s*   http://example.com/%C3%A1/y%20a%20y/?b=%25)r   r\   r&   r1  ÚPY2r$   r&  rF  s      r3   Útest_strzTestURL.test_str¸  sË   € ð 8ˆÝŒm˜DÑ!Ô!ˆÝ�s‰|Œ|˜tÒ#Ð#Ð#Ð#Ý�S‰zŒzÐJÒJÐJÐJÐJåð 	1Ý�c #™hœh­Ñ.Ô.Ð.Ð.Ð.Ý�g c™lœl­GÑ4Ô4Ð4Ð4Ð4Ð4Ð4å�c #™hœh­Ñ0Ô0Ð0Ð0Ð0Ý�e C™jœj­%Ñ0Ô0Ð0Ð0Ð0Ð0Ð0r5   c                 ó:  — t          j        d¦  «        }|                     ¦   «         j        dk    sJ ‚|                     ¦   «         j        dk    sJ ‚t          j        d¦  «        }|                     ¦   «         j        dk    sJ ‚|                     ¦   «         j        dk    sJ ‚|                     ¦   «                              ¦   «         j        dk    sJ ‚d}t          j        |¦  «                             ¦   «                              ¦   «         j        dk    sJ ‚d S )	Nu   http://abÃ©.com/u   abÃ©.comzxn--ab-cja.comu(   http://ãƒ‰ãƒ¡ã‚¤ãƒ³.ãƒ†ã‚¹ãƒˆ.co.jp#testu   ãƒ‰ãƒ¡ã‚¤ãƒ³.ãƒ†ã‚¹ãƒˆ.co.jpzxn--eckwd4c7c.xn--zckzah.co.jpzhttp://Example.comrB  )r   r\   rj   r(   rÄ   Úget_decoded_url)r.   rk   rG  s      r3   Útest_idna_cornerszTestURL.test_idna_cornersÈ  sÿ   € åŒmÐ.Ñ/Ô/ˆØ�zŠz‰|Œ|Ô  JÒ.Ð.Ð.Ð.Ø�zŠz‰|Œ|Ô Ð$4Ò4Ð4Ð4Ð4åŒmÐFÑGÔGˆØ�zŠz‰|Œ|Ô Ð$BÒBÐBÐBÐBØ�zŠz‰|Œ|Ô Ð$DÒDÐDÐDÐDà�zŠz‰|Œ|×+Ò+Ñ-Ô-Ô2Ð6TÒTÐTÐTÐTà#ˆåŒM˜$ÑÔ×&Ò&Ñ(Ô(×8Ò8Ñ:Ô:Ô?À=ÒPÐPÐPÐPÐPÐPr5   N)r   )Or"  r#  r$  Ú__doc__r4   r<   rB   rN   rQ   rZ   ra   rh   rp   rs   ru   ry   r   r…   r‡   rŒ   r“   r™   r�   r    r©   r±   r¶   r½   rÅ   rÇ   rÍ   rÐ   rÕ   rÛ   rß   râ   rå   rç   ré   rò   rø   rû   rþ   r   r  r	  r  r  r  r  r4  r6  r<  r?  rH  rK  rM  rV  rX  rZ  rc  rg  rm  ru  rx  r{  r…  r‰  r‹  r�  r’  r”  r™  r›  rž  r   r²  rµ  r¸  r  r5   r3   r!   r!   ‘   sË  € € € € € ðð ð=ð =ð =ð6 ð1+ð 1+ð 1+ð 1+ðf+ð +ð +ð
ð 
ð 
ð&	
ð 	
ð 	
ð
ð 
ð 
ð(7ð 7ð 7ð+ð +ð +ðð ð ð
ð 
ð 
ð 

ð 

ð 

ð
ð 
ð 
ð0	
ð 	
ð 	
ðEð Eð Eð+ð +ð +ð
ð 
ð 
ð&<Cð <Cð <Cð|Bð Bð BðEð Eð Eð5ð 5ð 5ð((ð (ð (ðT%
ð %
ð %
ðN
ð 
ð 
ð,
ð 
ð 
ð2>ð >ð >ð*.ð .ð .ð6ð 6ð 6ðð ð ð!ð !ð !ð	$ð 	$ð 	$ð	)ð 	)ð 	)ð5ð 5ð 5ð:ð :ð :ð9ð 9ð 9ðMð Mð Mð
ð 
ð 
ð4
ð 
ð 
ð0
ð 
ð 
ð&6ð 6ð 6ð 1ð 1ð 1ð
ð 
ð 
ð.Lð Lð Lð
ð 
ð 
ð
Gð 
Gð 
Gð.ð .ð .ð7ð 7ð 7ðSAð SAð SAðj
ð 
ð 
ð 1ð  1ð  1ðD7ð 7ð 7ð2ð 2ð 2ð0Að Að AðMð Mð MðFð Fð Fð
ð 
ð 
ð
Fð 
Fð 
Fð9ð 9ð 9ðv
"ð 
"ð 
"ðAð Að Að.>ð >ð >ð6/ð /ð /ð
ð 
ð 
ð*ð *ð *ð$
"ð 
"ð 
"ðPð Pð PðDð Dð Dðð ð ð&ð ð ðBð Bð Bðð ð ð,>ð >ð >ðPð Pð Pð 7
ð 7
ð 7
ðr1ð 1ð 1ð 
ð 
ð 
ð 
ð 
r5   r!   )Ú
__future__r   ÚsysrQ  Útypingr   r   r   r   r   r	   Úcommonr   r   r   r   Ú_urlr   r   Úversion_infor´  r+   r&   r]   r•   r–   re   r!   r  r5   r3   ú<module>rÀ     s(  ðð (Ð 'Ð 'Ð 'Ð 'Ð 'à 
€
€
€
Ø €€€Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =à %Ð %Ð %Ð %Ð %Ð %Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð 
Ô�qÔ˜QÒ€Ø
ˆ$ˆr‰(Œ(€ð 9€	ð 2Ð ð1ð 1ð 1Ð ðhA€ðHF
ð F
ð F
ð F
ð F
Ðñ F
ô F
ð F
ð F
ð F
r5   