
    N&i&o                        d Z dZddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZmZ ddlmZmZmZ dd	lmZmZ dd
lmZ ddlmZ  G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d dej%                  Z& G d de          Z' G d  d!e          Z( G d" d#e          Z)dS )$zMiscellaneous directives.reStructuredText    N)ionodesstatemachineutils)
SafeStringErrorString)locale_encoding)	Directiveconvert_directive_function)
directivesrolesstates)	CodeBlockNumberLines)set_classes)miscc                      e Zd ZdZdZdZdZej        ej	        ej
        ej        eeeej        ej        ej	        ej        ej	        dZej                            ej                            ej                  d          Zd ZdS )	Includea]  
    Include content read from a separate source file.

    Content may be parsed by the parser, or included as a literal
    block.  The encoding of the included file can be specified.  Only
    a part of the given file argument may be included by specifying
    start and end line or text to match before and/or after the text
    to be used.
       r   T)literalcodeencodingparser	tab-width
start-lineend-linestart-after
end-beforenumber-linesclassnameincludec                    | j         j        j        j        s|                     d| j        z            | j        j                            | j	        | j        j
        z
  dz
            }t          j                            t          j                            |                    }t          j        | j        d                   }|                    d          rB|                    d          r-t          j                            | j        |dd                   }t          j                            t          j                            ||                    }t-          j        d|          }t1          j        |          }| j                            d| j         j        j        j                  }| j         j        j        j        }| j                            d	| j         j        j        j                  }	 | j         j        j        j                             |           tC          j"        |||
          }n{# tF          $ r3}| $                    d| j        dtK          |          d          d}~wtL          $ r3}| $                    d| j        dtO          |          d          d}~ww xY w| j                            dd          }	| j                            dd          }
	 |	s|
2|(                                }d                    ||	|
                   }n|)                                }n?# tT          $ r2}| $                    d| j        dtO          |                    d}~ww xY w| j                            dd          }|rR|+                    |          }|dk     r| $                    d| j        z            ||tY          |          z   d         }| j                            dd          }|rB|+                    |          }|dk     r| $                    d| j        z            |d|         }t[          j.        ||d          }t_          |          D ]I\  }}tY          |          | j         j        j        j0        k    r|                     d||dz   fz            Jd| j        v rP|dk    r|1                    |          }n|}t1          j2        ||| j                            dg                     }d|_3        | 4                    |           d| j        v r	 tk          | j        d         pd          }	n## tl          $ r | 7                    d           w xY w|	tY          |          z   }
|                    d!          r
|dd         }tq          g |fg|	|
          }|D ]9\  }}|r|t1          j9        |||"          z  }"|t1          j:        |          z  }:n|t1          j:        |          z  }|gS d#| j        v r|| j        d$<   |dk     r|;                                }ty          | j        | j        =                    d#          g| j        || j	        | j>        | j?        | j         | j        	  	        }|@                                S |	|
||f}| j         j        jA        }|s*|B                    t-          j        d|          d%f           ||f|v rJ|                     d&| j        d'd(                    |gd) |ddd         D             z                       d*| j        v rv | j        d*                     }t-          jC        || j         j        j                  }|||fgz   |_A        |D                    d!                    |          |           |jE        S |dd+|z  gz  }| j        F                    ||           |B                    ||f           g S ),zInclude a file as part of the content of this reST file.

        Depending on the options, the file (or a clipping) is
        converted to nodes and returned or inserted into the input stream.
        "%s" directive disabled.r   r   <>Nr   r   source_pathr   error_handlerProblems with "z1" directive path:
Cannot encode input file path "z" (wrong locale?)." directive path:
.r   r    Problem with "" directive:
r   zDProblem with "start-after" option of "%s" directive:
Text not found.r   zCProblem with "end-before" option of "%s" directive:
Text not found.T)convert_whitespacez,"%s": line %d exceeds the line-length-limit.r   r!   )sourceclassesr    z+:number-lines: with non-integer start value
)r4   r   r3   )NNNNzcircular inclusion in "z" directive: z < c                     g | ]\  }}|S  r7   ).0pthopts      q/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/docutils/parsers/rst/directives/misc.py
<listcomp>zInclude.run.<locals>.<listcomp>   s.     3I 3I 3I:C3 3I 3I 3I    r   z.. end of inclusion from "%s")Gstatedocumentsettingsfile_insertion_enabledwarningr"   state_machineinput_linesr3   linenoinput_offsetospathdirnameabspathr   	arguments
startswithendswithjoinstandard_include_pathnormpathr   relative_pathr   reprunicodeoptionsgetinput_encodinginput_encoding_error_handler	tab_widthrecord_dependenciesaddr   	FileInputUnicodeEncodeErrorseverer   IOErrorr	   	readlinesreadUnicodeErrorfindlenr   string2lines	enumerateline_length_limit
expandtabsliteral_blocklineadd_nameint
ValueErrorerrorr   inlineText
splitlinesr   popcontent_offset
block_textruninclude_logappendnew_documentparsechildreninsert_input)selfr3   
source_dirrH   r   	e_handlerrW   include_filerl   	startlineendlinelinesrawtext
after_textafter_indexbefore_textbefore_indexinclude_linesirh   textrg   tokensr4   value	codeblockclip_optionsrt   r   r?   s                                 r;   rs   zInclude.run6   s    z"+B 	G,,9DIEFFF#/66K$,99A=? ?W__RW__V%<%<==
t~a011??3 	HDMM#$6$6 	H7<< :D2JGGDwZ > >??"4.. &&<##
+4CE E*%.K	L$$,5?A A		7J(<@@FFF<D196?A A ALL " 	= 	= 	=+++  $yyy*T*:*:*:*:< = = =  	7 	7 	7+++yyy+e"4"4"4"46 7 7 7	7
 L$$\488	,"":t44	? .W0$..00''%	'(9":;;&++-- 	? 	? 	?+++#yyy+e*<*<*<> ? ? ?	?
 \%%mT::
 	>!,,z22KQkk #@BF)#L M M MkC
OO;<<=Gl&&|T:: 	-"<<44Lakk #@BF)#L M M Mm|m,G$1'9EIK K K // 	H 	HGAt4yy4:.7IIIll $9<@!A#;$G H H H J $$A~~)))44!/,0L,<,<Wb,I,IK K KM!"MMM-(((--4 #DL$@$EA F FII! 4 4 4** &3 4 4 44 $c-&8&88==&& %9D$r4j\9gFF&, ; ;NGU ;%eU>E*G *G *G G &E):)::; D!1!11!?"T\!!%)DL"1}} ' 2 2 4 4!$)#'<#3#3F#;#;"<"&,"/"&+"&"5"&/"&*"&"46 6I ==??" "7KDj)5 	; 3D& A A 8 : ; ; ;,;..,,,999ejj$ 3I 3I6A$$B$6G3I 3I 3I *I J J J K L L L t|##+T\(+--F)$
0C0LMMH#.42F1G#GH LL=118<<<$$
 	"=DEE''t<<<D,/000	sJ   5A H6 6
J. .I..J.;.J))J.(A
L3 3
M/=-M**M/.U  U+N)__name__
__module____qualname____doc__required_argumentsoptional_argumentsfinal_argument_whitespacer   flag	unchangedr   parser_namerj   unchanged_requiredclass_optionoption_specrG   rH   rN   rI   r   __file__rO   rs   r7   r=   r;   r   r      s           $(o%/)2'3 #!$"","?!+!>#-#7&3%/1 1K GLL)I)I)24 4S S S S Sr=   r   c                   ^    e Zd ZdZdZdZdZej        ej	        ej
        ej        dZdZd ZdS )Rawz
    Pass through content unchanged

    Content is included in output based on type argument

    Content may be included inline (content section of directive) or
    imported from a file or url.
    r   r   T)fileurlr   r!   c                 	   | j         j        j        j        r(| j         j        j        j        s/d| j        v s	d| j        v r|                     d| j        z            dd                    | j	        d         
                                                                          i}| j                            d| j         j        j        j                  }| j         j        j        j        }| j        rKd| j        v s	d| j        v r|                     d| j        z            d	                    | j                  }nd| j        v rd| j        v r|                     d
| j        z            t"          j                            t"          j                            | j         j        j                            }t"          j                            t"          j                            || j        d                             }t/          j        d |          }	 t3          j        |||          }| j         j        j        j                            |           n@# t:          $ r3}|                     d| j        dt?          |          d          d }~ww xY w	 |                                 }n?# tB          $ r2}|                     d| j        dt?          |                    d }~ww xY w||d<   n8d| j        v r| j        d         }	tD          j#        dk    rddl$m%}
 ddl&m'} nddl(m%}
m'} 	  |
|	                                           }nV# |t:          tR          f$ rA}|                     d| j        d| j        d         dt?          |          d          d }~ww xY wt3          j*        ||	||          }	 |                                 }n?# tB          $ r2}|                     d| j        dt?          |                    d }~ww xY w|	|d<   n| +                                 tY          j-        d|fd| j                            dg           i|}| j.        /                    | j0                  \  |_1        |_2        |gS )Nr   r   r%   format r   r   zF"%s" directive may not both specify an external file and have content.r5   zXThe "file" and "url" options may not be simultaneously specified for the "%s" directive.r)   r,   r-   r.   r0   r1   r3      r   )urlopen)URLError)r   r   z" directive URL "z":
)r3   r*   r   r+   r/   r4   r!   )3r>   r?   r@   raw_enabledrA   rS   rB   r"   rN   rK   lowersplitrT   rU   rV   contentrl   rG   rH   rI   rJ   current_sourcerP   r   rQ   r   rZ   rX   rY   r]   r\   r	   r_   r`   sysversion_infourllib.requestr   urllib.errorr   urllib2OSErrorStringInputassert_has_contentr   rawrC   get_source_and_linerE   r3   rh   )rz   
attributesr   r|   r   r{   rH   raw_filerl   r3   r   r   raw_textraw_nodes                 r;   rs   zRaw.run   s!   
#,8 	GJ'0G	Gt|++--,,9DIEFFF):)@)@)B)B)H)H)J)J K KL
<##
+4CE E*%.K	< :	&%%$,)>)>jj(*.)45 5 5 99T\**DDt|##$$jj8:>)DE E E 
 3 BCCE EJ7##BGLL15f1E%G %G H HD&tT22D	E<D196?A A A
 
#,@DDTJJJJ E E Ekkk%)YYYE0B0B0B0B#D E E EE7}} 7 7 7kkkyyy+e"4"4"4#6 7 7 77 $(Jx  dl""\%(F 6))222222111111155555555L"76??//11gw/ L L Lkkkyyy$,u"5"5"5{57I7I7I7I#K L L LL ~X6/74=? ? ?HE}} E E Ekkk%)YYYE0B0B0B#D E E EE $*Jx   ##%%%9R + +t|/?/?/L/L +)+ + +??LL	zsa   A I 
J.JJJ) )
K%3-K  K%,M
 
N<NN9O 
P
-PP
N)r   r   r   r   r   r   r   r   rH   urir   r   r   has_contentrs   r7   r=   r;   r   r      so           $%?$.)2&35 5K KI I I I Ir=   r   c                       e Zd ZdZd ZdS )ReplaceTc                    t          | j        t          j                  s|                     d| j        z            |                                  d                    | j                  }t          j
        |          }| j                            | j        | j        |           d }g }|D ]}|st          |t          j                  r|}!t          |t          j                  rg |d<   |                    |           V| j        j                            d| j        z  | j                  gc S |r
||j        z   S |S )NVInvalid context: the "%s" directive can only be used within a substitution definition.r5   backrefsz=Error in "%s" directive: may contain a single paragraph only.rh   )
isinstancer>   r   SubstitutionDefrl   r"   r   rN   r   r   Elementnested_parserq   	paragraphsystem_messageru   rC   reporterrE   rx   )rz   r   elementnodemessageselems         r;   rs   zReplace.run0  sz   $*f&<== 	:**-/3y9: : : 	!!!yy&&-%%
d.A '	) 	) 	)  
	C 
	CD 	CJtU_== 	CD%"677 C#%Z %%%% &/55 #'9.48K 6 A AC C C C  	,dm++r=   Nr   r   r   r   rs   r7   r=   r;   r   r   ,  s(        K    r=   r   c                   n    e Zd ZdZdZdZdZej        ej        ej        dZ	 e
j        d          Zd ZdS )	Unicodea{  
    Convert Unicode character codes (numbers) to characters.  Codes may be
    decimal numbers, hexadecimal numbers (prefixed by ``0x``, ``x``, ``\x``,
    ``U+``, ``u``, or ``\u``; e.g. ``U+262E``), or XML-style numeric character
    entities (e.g. ``&#x262E;``).  Text following ".." is a comment and is
    ignored.  Spaces are ignored, and any other text remains as-is.
    r   r   T)trimltrimrtrimz( |\n|^)\.\. c           
         t          | j        t          j                  s|                     d| j        z            | j        j        }d| j        v rd|j	        d<   d|j	        d<   d| j        v r
d|j	        d<   d| j        v r
d|j	        d<   | j
                            | j        d                   d                                         }t          j                    }|D ]i}	 t          j        |          }n:# t"          $ r-}|                     d|dt%          |                    d }~ww xY w|t          j        |          z  }j|j        S )	Nr   r   r   r   r   r   zInvalid character code: r5   )r   r>   r   r   rl   r"   rC   r   rS   r   comment_patternr   rK   r   r   r   unicode_coderk   r	   rn   rx   )rz   substitution_definitioncodesr   r   decodedrl   s          r;   rs   zUnicode.run_  s{   $*f&<== 	:**-/3y9: : : #'"4"9T\!!:;#.w7:;#.w7dl"":;#.w7dl"":;#.w7$**4>!+<==a@FFHH-// 	+ 	+D2$1$77 2 2 2jjjtt[///"1 2 2 22 uz'***GGs   !C66
D- (D((D-N)r   r   r   r   r   r   r   r   r   r   recompiler   rs   r7   r=   r;   r   r   L  sp           $%?&O&O- -K !bj!122O         r=   r   c                   (    e Zd ZdZdZdZdZdZd ZdS )Classz
    Set a "class" attribute on the directive content or the next element.
    When applied to the next element, a "pending" element is inserted, and a
    transform does the work later.
    r   r   Tc                 x   	 t          j        | j        d                   }n:# t          $ r- |                     d| j        d| j        d         d          w xY wg }| j        rtt          j                    }| j	        
                    | j        | j        |           |D ]}|d                             |           |                    |j                   nat          j        t          j        || j        d| j                  }| j        j                            |           |                    |           |S )Nr   z#Invalid class attribute value for "z" directive: "".r4   )r!   	directive)r   r   rK   rk   rl   r"   r   r   r   r>   r   rq   extendrx   pendingr   ClassAttributerr   rC   r?   note_pendingru   )rz   class_value	node_list	containerr   r   s         r;   rs   z	Class.run  sU   	2$1$.2CDDKK 	2 	2 	2***999dnQ///12 2 2	2 	< 	&IJ##DL$2E$-/ / /! 4 4Y&&{3333Y/0000m#%DI>>! !G '44W===W%%%s	   " 7AN)	r   r   r   r   r   r   r   r   rs   r7   r=   r;   r   r   x  sF           $K    r=   r   c                   Z    e Zd ZdZ ej        dej        j        fdz  z            Z	d Z
dS )RoleTz(%s)\s*(\(\s*(%s)\s*\)\s*)?$   c           	         | j         | j        k    s| j        s|                     d| j        z            | j        d         }| j                            |          }|s!|                     d| j        d|d          |                    d          }|                    d          }g }|rt          j	        || j
        j        | j        | j        j                  \  }}|M| j        j                            d	|z  t          j        | j        | j                  | j        
          }||gz   S nt          j        }t%          |d          rJ d| j        d|d            	 t'          |          }| j                            | j        dd         | j         |i           \  }	}
}}nr# t*          j        $ r`}| j
        j                            d| j        d|dt          j        | j        | j                  | j        
          }||gz   cY d}~S d}~ww xY wd|
vr	 t/          j        |          |
d<   nz# t2          $ rm}| j
        j                            d| j        dt5          |          dt          j        | j        | j                  | j        
          }||gz   cY d}~S d}~ww xY wt          j        |||
|          }t          j        ||           |S )z?Dynamically create and register a custom interpreted text role.z4"%s" directive requires arguments on the first line.r   "z-" directive arguments not valid role names: "r   r   r   N#Unknown interpreted text role "%s".r   rK   z&Supplemental directive arguments for "z)" directive not supported (specified by "z" role).)option_presetsz
Error in "r1   r.   r!   zInvalid argument for ")rq   rE   r   rl   r"   argument_patternmatchgroupr   rolerC   languager>   r   r   rg   rr   generic_custom_rolehasattrr   parse_directive_blockr   MarkupErrorr   r   rk   r   
CustomRoleregister_local_role)rz   argsr   new_role_namebase_role_namer   	base_rolerl   converted_rolerK   rS   r   rq   detailr   s                  r;   rs   zRole.run  sr   ,,DL,** %'+y1 2 2 2|A%++D11 	:***(,			4449 : : :AQ 	2"'* 2 ;T[
##% #%Ix  
+119NJ'II 2 & &  5')) ! 1I9k22 	L 	L 	L59YYY			K	L 	L 	L	&7	BBN
00QRR $"5~! 1 # # :Y.. ! 	& 	& 	&&/55537999fffE#DOT_EE[ 6 " "E ug%%%%%%%	& '!!*#-#:=#I#I   * * **3999yyy*V"4"4"4"467<7JOT_86 86<@K : I I  5')))))))* y'7KK!-666s?   #AF( (H7AHHHH7 7
J.A"J)#J.)J.N)r   r   r   r   r   r   r   Inliner
simplenamer   rs   r7   r=   r;   r   r     sW        K!rz"A&,n&?%AA%E#G H H3 3 3 3 3r=   r   c                        e Zd ZdZdZdZd ZdS )DefaultRolez&Set the default interpreted text role.r   Fc                    | j         sdt          j        v rt          j        d= g S | j         d         }t          j        || j        j        | j        | j        j                  \  }}|M| j        j        	                    d|z  t          j        | j        | j                  | j                  }||gz   S |t          j        d<   |S )Nr/   r   r   r   )rK   r   _rolesr   rC   r   rE   r>   r   rl   r   rg   rr   )rz   	role_namer   r   rl   s        r;   rs   zDefaultRole.run  s    ~ 	U\!!L$IN1%	It/A/J$(K1DF Fh<J'--5	A#DOT_EE[ . " "E ug%%Rr=   N)r   r   r   r   r   r   rs   r7   r=   r;   r  r    s5        00 %    r=   r  c                        e Zd ZdZdZdZd ZdS )Titler   r   Tc                 :    | j         d         | j        j        d<   g S )Nr   title)rK   rC   r?   )rz   s    r;   rs   z	Title.run  s    /3~a/@#G,	r=   N)r   r   r   r   r   r   rs   r7   r=   r;   r  r    s5         $    r=   r  c                       e Zd Zd Zd ZdS )MetaBodyc                 \    |                      |          \  }}| xj        |z  c_        g |g fS )zMeta element.)	parsemetaparent)rz   r   context
next_stater   blank_finishs         r;   field_markerzMetaBody.field_marker  s5    !^^E22lt:r!!r=   c           	      0   |                      |          }t          j        t          j        |                    }| j                            |                                          \  }}}}t          j                    }t          j        t          j        d	                    |                              |d<   |sA| j        j
        }| j                            d|z  t          j        ||                    }	|	|fS |                                }
	 t          j        |
d                   d         \  }}|||                                <   n # t          j        $ r |
d         |d<   Y nw xY w|
dd          D ]}	 t          j        |          d         \  }}|||                                <   8# t          j        $ rQ}| j        j
        }| j                            d|d|d	t          j        ||                    }	|	|fcY d }~c S d }~ww xY w||fS )
Nr   r   zNo content for meta tag "%s".r   r"   r   z"Error parsing meta tag attribute "z": r.   )parse_field_markerr   unescapeescape2nullrC   get_first_known_indentedendr   metarN   rh   r   inforg   r   extract_name_valuer   NameValueErrorrl   )rz   r   r"   indentedindentline_offsetr  r   rh   msgr   attnamevaltokenr   s                  r;   r  zMetaBody.parsemeta  s@   &&u--~e/5566 99%))++FF 	4&+|z||.):,/HHX,>,>*@ *@ A AY 	%%*D-$$1D8%dD113 3C $$	% 3F1I>>qALGS$'D!!# 	% 	% 	%!!9DLLL	%ABBZ 		) 		)E)$7>>qA(+W]]__%%' ) ) )).m)))().)<T4)H)HJ J L((((((((() \!!s1   :E E,+E,<4F11H AHHHN)r   r   r   r  r  r7   r=   r;   r
  r
     s2        " " "" " " " "r=   r
  c                   "    e Zd ZdZdefiZd ZdS )MetaTstate_classesc                 $   |                                   t          j                    }| j                            | j        | j        |dd| j                  \  }}|| j        z
  t          | j                  k    rI| j	        j
                            dt          j        | j        | j                  | j                  }||z  }| j        j                            t          j        t          j        f          pd}|j        | j        j        ||<   g S )Nr
  T)initial_stater  state_machine_kwargszInvalid meta directive.r   r   )r   r   r   r>   nested_list_parser   rq   SMkwargsrb   rC   r   rl   rg   rr   rE   r?   first_child_not_matching_classTitularr  rx   )rz   r   new_line_offsetr  rl   indexs         r;   rs   zMeta.run/  s   !!!}(,
(D(DL$-t$4!% )E )0 )0% d11c$,6G6GGG&/55)#DOT_EE[ 6 " "E EMD
#BB).
(CE E JHI 	+/=
E%K(	r=   N)r   r   r   r   r
  r*  rs   r7   r=   r;   r$  r$  )  s4        K(-H    r=   r$  c                       e Zd ZdZd ZdS )DateTc                    t          | j        t          j                  s|                     d| j        z            d                    | j                  pd}t          j	        dk     rI	 |
                    t          pd          }n+# t          $ r |                     dt          z            w xY wt          j        |          }t          j	        dk     rj	 |                    t          pd          }nL# t"          $ r? |                    t          pdd          }|                     d|d	t          d
          w xY wt%          j        |          gS )Nr   r5   z%Y-%m-%dr   zutf-8z;Cannot encode date format string with locale encoding "%s".replacezError decoding "z"with locale encoding "r   )r   r>   r   r   rl   r"   rN   r   r   r   encoder
   r[   rB   timestrftimedecodeUnicodeDecodeErrorr   rn   )rz   
format_strr   s      r;   rs   zDate.runH  s   $*f&<== 	:**-/3y9: : : YYt|,,:

V##E'../I'JJ

% E E Ell $24C$D E E EE& }Z((V##M{{?#=g>>% M M M{{?#=gyIIlll59TT???$L M M MM 
4  !!s   *B (B/C4 4A	D=Nr   r7   r=   r;   r0  r0  D  s(        K%" %" %" %" %"r=   r0  c                   6    e Zd ZdZdZdZdej        iZdZ	d Z
dS )TestDirectivez3This directive is useful only for testing purposes.r   Toptionc           	      p   | j         rnd                    | j                   }| j        j                            d| j        d| j        d| j        dt          j	        ||          | j
                  }n?| j        j                            d| j        d| j        d| j        d| j
                  }|gS )Nr5   zDirective processed. Type="z", arguments=z
, options=z
, content:r   z, content: None)r   rN   rC   r   r  r"   rK   rS   r   rg   rE   )rz   r   r  s      r;   rs   zTestDirective.runy  s    < 
	"99T\**D%.333"iiiG#D$//dk 4 C CDD
 %.333#'999dnnndlllL[ 4 " "D vr=   N)r   r   r   r   r   r   r   r   r   r   rs   r7   r=   r;   r:  r:  p  sG        == $Z:;KK    r=   r:  )*r   __docformat__r   os.pathrG   r   r4  docutilsr   r   r   r   docutils.utils.error_reportingr   r	   r
   docutils.parsers.rstr   r   r   r   r   $docutils.parsers.rst.directives.bodyr   r   docutils.parsers.rst.rolesr   docutils.transformsr   r   r   r   r   r   r   r  r  SpecializedBodyr
  r$  r0  r:  r7   r=   r;   <module>rF     s  
   " 



  				  3 3 3 3 3 3 3 3 3 3 3 3 B B B B B B B B : : : : : : F F F F F F F F : : : : : : : : : : G G G G G G G G 2 2 2 2 2 2 $ $ $ $ $ $s s s s si s s sl] ] ] ] ]) ] ] ]@    i   @)  )  )  )  ) i )  )  ) X# # # # #I # # #L: : : : :9 : : :z    )   4    I   &" &" &" &" &"v% &" &" &"R    9   6)" )" )" )" )"9 )" )" )"X    I     r=   