
    rh^e                    ^   S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  SSSSS	S
SSSSSS.r	/ SQr
S/rSSSSSSSSS.rSSSSSSSSS SSSSSS!.r " S" S#\R                  5      r " S$ S%\R                   5      r " S& S'\R                  5      r0 SS_SS(_SS_SS(_SS)_S*S+_S,S-_S.S_S/S0_S1S2_S3S_SS4_S5S_S6S_S7S_S8S_S9S)_r " S: S;\R                  5      r " S< S=\R                   5      rS> r\\\/r " S? S@\R0                  5      r\SA:X  a  S SKr\R6                  " \5        gg)B    )annotationsN)exceptions21)pitch)prebase)      )   r   )   r   r   )	   r
   r   r   )   r   r
   r   r   )   r   r   r
   r   r   )r	   r   r   )r	      r   )r	   r      )N)r   )r	   )r
   )r   )r   )r   )r	   r   )r   r   )r   r   )r   )+#++##\r   b   ♮r   bb/r   )sharpflatnaturaldouble-sharp	flat-flat	backslashslashcrossr   r   r   r   r   r    r   )r   r   r   r   r   r   r      ♯r      ♭   ⃥   ̸   𝄪   𝄫c            	      r    \ rS rSr% Sr/ SQrSSSSSS	S
SS.rS\S'   SSS jjrS r	S r
S rS rSS jrSrg)Notation@   u  
Breaks apart and stores the information in a figured bass notation
column, which is a string of figures, each associated with a number
and an optional modifier. The figures are delimited using commas.
Examples include '7,5,#3', '6,4', and '6,4+,2'.

Valid modifiers include those accepted by :class:`~music21.pitch.Accidental`,
such as #, -, and n, as well as those which can correspond to one, such as +,
/, and b.

.. note:: If a figure has a modifier but no number, the number is
    assumed to be 3.

Notation also translates many forms of shorthand notation into longhand. It understands
all the forms of shorthand notation listed below. This is true even if a number is accompanied
by a modifier, or if a stand-alone modifier implies a 3.

* None, '' or '5' -> '5,3'
* '6' -> '6,3'
* '7' -> '7,5,3'
* '6,5' -> '6,5,3'
* '4,3' -> '6,4,3'
* '4,2' or '2' -> '6,4,2'
* '9' -> '9,7,5,3'
* '11' -> '11,9,7,5,3'
* '13' -> '13,11,9,7,5,3'
* '_' -> treated as an extender

Figures are saved in order from left to right as found in the notationColumn.

>>> from music21.figuredBass import notation
>>> n1 = notation.Notation('4+,2')
>>> n1
<music21.figuredBass.notation.Notation 4+,2>

>>> n1.notationColumn
'4+,2'
>>> n1.figureStrings
['4+', '2']
>>> n1.origNumbers
(4, 2)
>>> n1.origModStrings
('+', None)
>>> n1.numbers
(6, 4, 2)
>>> n1.modifierStrings
(None, '+', None)
>>> n1.modifiers
(<music21.figuredBass.notation.Modifier None None>,
 <music21.figuredBass.notation.Modifier + sharp>,
 <music21.figuredBass.notation.Modifier None None>)
>>> n1.figures[0]
<music21.figuredBass.notation.Figure 6 <Modifier None None>>
>>> n1.figures[1]
<music21.figuredBass.notation.Figure 4 <Modifier + sharp>>
>>> n1.figures[2]
<music21.figuredBass.notation.Figure 2 <Modifier None None>>

Here, a stand-alone '#' is being passed to Notation.

>>> n2 = notation.Notation('#')
>>> n2.numbers
(5, 3)
>>> n2.modifiers
(<music21.figuredBass.notation.Modifier None None>,
 <music21.figuredBass.notation.Modifier # sharp>)
>>> n2.figures[0]
<music21.figuredBass.notation.Figure 5 <Modifier None None>>
>>> n2.figures[1]
<music21.figuredBass.notation.Figure 3 <Modifier # sharp>>

Now, a stand-alone b is being passed to Notation as part of a larger notationColumn.

>>> n3 = notation.Notation('b6,b')
>>> n3.numbers
(6, 3)
>>> n3.modifiers
(<music21.figuredBass.notation.Modifier b flat>,
 <music21.figuredBass.notation.Modifier b flat>)
>>> n3.figures[0]
<music21.figuredBass.notation.Figure 6 <Modifier b flat>>
>>> n3.figures[1]
<music21.figuredBass.notation.Figure 3 <Modifier b flat>>
>>> n3.extenders
[False, False]
>>> n3.hasExtenders
False

Here we will use the unicode symbol for double-flat for the extender:

>>> n4 = notation.Notation('b6, 𝄫_, #')
>>> n4.figures
[<music21.figuredBass.notation.Figure 6 <Modifier b flat>>,
 <music21.figuredBass.notation.Figure _(extender) <Modifier 𝄫 double-flat>>,
 <music21.figuredBass.notation.Figure 3 <Modifier # sharp>>]
>>> n4.figuresFromNotationColumn
[<music21.figuredBass.notation.Figure 6 <Modifier b flat>>,
 <music21.figuredBass.notation.Figure _ <Modifier 𝄫 double-flat>>,
 <music21.figuredBass.notation.Figure None <Modifier # sharp>>]
>>> n4.extenders
[False, True, False]
>>> n4.hasExtenders
True
)notationColumnfigureStringsnumbers	modifiersfiguresorigNumbersorigModStringsmodifierStringsz
            A tuple of :class:`~music21.figuredBass.notation.Modifier`
            objects associated with the expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            A string of figures delimited by commas,
            each associated with a number and an optional modifier.
            z
            The modifiers associated with the expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`, as strings.
            z
            A list of figures derived from the original
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            The numbers associated with the original
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            The numbers associated with the expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            The modifiers associated with the original
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`, as strings.
            z
            A list of :class:`~music21.figuredBass.notation.Figure` objects
            associated with figures in the expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            )r.   r+   r2   r,   r0   r-   r1   r/   dict[str, str]	_DOC_ATTRc                0   U=(       d    SU l         / U l        SU l        SU l        / U l        SU l        / U l        SU l        U R                  5         U R                  5         SU l
        / U l        / U l        U R                  5         U R                  5         g )N  F)r+   r,   r0   r1   r-   r2   	extendershasExtenders_parseNotationColumn_translateToLonghandr.   r/   figuresFromNotationColumn_getModifiers_getFigures)selfr+   s     V/home/james-whalen/.local/lib/python3.13/site-packages/music21/figuredBass/notation.py__init__Notation.__init__   s    #1#7R(*1346"$57%'"'!!#!!# 02%'79&    c                ,    [        U R                  5      $ r   )strr+   r?   s    r@   _reprInternalNotation._reprInternal   s    4&&''rC   c                   Sn[         R                  " XR                  5      nSnSn/ n/ n/ nU GH  nUR                  5       nUR	                  U5        [         R
                  " X85      n	[         R
                  " XH5      n
[        U	R                  S5      5       H  nU	R                  S5        M     [        U
R                  S5      5       H  nU
R                  S5        M     [        U	5      S::  d  [        U
5      S::  d  [        SU-   5      eSnSnSnU	(       a^  S	U	;   a  S
U l        S	nS
nOLS	U	S   ;   a'  S
U l        S
n[        U	S   R                  S	5      5      nO[        U	S   R                  5       5      nU
(       a  U
S   R                  5       nUR	                  U5        UR	                  U5        U R                  R	                  U5        GM     [        U5      n[        U5      nXPl        XPl        X`l        X`l        Xpl        g)ai  
Given a notation column below a pitch, defines both self.numbers
and self.modifierStrings, which provide the intervals above the
bass and (if necessary) how to modify the corresponding pitches
accordingly.

`_parseNotationColumn` is called from `__init__` and thus
is not explicitly demonstrated below.

>>> from music21.figuredBass import notation as n
>>> notation1 = n.Notation('#6, 5')

The figureStrings are left alone:

>>> notation1.figureStrings
['#6', '5']

And in this case the original numbers (`origNumbers`) are
the same:

>>> notation1.origNumbers
(6, 5)

Since 6 has a sharp on it, it has something in the original modifier
strings (`origModStrings`)

>>> notation1.origModStrings
('#', None)

A second example of flat 6 and flat 3:

>>> notation2 = n.Notation('-6, -')
>>> notation2.figureStrings
['-6', '-']
>>> notation2.origNumbers
(6, None)
>>> notation2.origModStrings
('-', '-')


An example of a seventh chord with extender:

>>> notation3 = n.Notation('7_')

`hasExtenders` is set True if an underscore is parsed within a notation string

>>> notation3.hasExtenders
True
>>> notation2.hasExtenders
False
z[,]z	([0-9_]*)z
([^0-9_]*)r6      zInvalid Notation: NF_Tr   )resplitr+   stripappendfindallrangecountremovelenNotationExceptionr9   intr8   tupler0   r-   r1   r2   r,   )r?   	delimiterr/   	patternA1	patternA2r-   r2   r,   figurem1m2inumbermodifierStringextenders                  r@   r:   Notation._parseNotationColumn   s   h 	((9&9&9:	 	F\\^F  (I.BI.B288B<(		" )288B<(		" )GqLCGqL'(<v(EFFF!NH"9(,D% F#H be|,0)#'!$RU[[%5!6!$RU[[]!3!#ANN6""">2NN!!(+E H .0"-.*rC   c                .   U R                   nUnU R                  nUn [        U   n/ n[        U5      n/ nU H*  nUc  UR	                  S5        M  UR	                  U5        M,     [        U5      nU H0  nSnXa;   a  UR                  U5      nX8   nUR	                  U5        M2     [        U5      nX l         X@l        g! [         aK    [        U5      n/ nU H*  nUc  UR	                  S5        M  UR	                  U5        M,     [        U5      n Naf = f)a  
Provided the numbers and modifierStrings of a parsed notation column,
translates it to longhand.

>>> from music21.figuredBass import notation as n
>>> notation1 = n.Notation('#6,5')  # __init__ method calls _parseNotationColumn()
>>> str(notation1.origNumbers) + ' -> ' + str(notation1.numbers)
'(6, 5) -> (6, 5, 3)'
>>> str(notation1.origModStrings) + ' -> ' + str(notation1.modifierStrings)
"('#', None) -> ('#', None, None)"
>>> notation2 = n.Notation('-6,-')
>>> notation2.numbers
(6, 3)
>>> notation2.modifierStrings
('-', '-')
Nr   )r-   r2   shorthandNotationlistrO   rW   indexKeyError)	r?   
oldNumbers
newNumbersoldModifierStringsnewModifierStringstempr_   newModifierStringmodifierStringIndexs	            r@   r;   Notation._translateToLonghandP  s$   " \\

!11/	%*:6J!#j)JD$>KKNKK'	 % tJ$$(!'*4*:*:6*B'(:(O%"))*;< % "''9!: "1  		%j)JD$>KKNKK'	 % tJ		%s   BB? ?ADDc                    / n[        [        U R                  5      5       H.  nU R                  U   n[	        U5      nUR                  U5        M0     [        U5      U l        g)a  
Turns the modifier strings into Modifier objects.
A modifier object keeps track of both the modifier string
and its corresponding pitch Accidental.

The `__init__` method calls `_getModifiers()` so it is not called below.

>>> from music21.figuredBass import notation as n
>>> notation1 = n.Notation('#4,2+')
>>> notation1.modifiers[0]
<music21.figuredBass.notation.Modifier None None>
>>> notation1.modifiers[1]
<music21.figuredBass.notation.Modifier # sharp>
>>> notation1.modifiers[2]
<music21.figuredBass.notation.Modifier + sharp>
N)rQ   rT   r-   r2   ModifierrO   rW   r.   )r?   r.   r^   r`   modifiers        r@   r=   Notation._getModifiers  sW    " 	s4<<()A!11!4N/HX& *
 y)rC   c                   / n[        [        U R                  5      5       Hw  nU R                  U   nU R                  U   nSnU R                  (       a(  U[        U R                  5      :  a  U R                  U   n[        X4US9nUR                  U5        My     Xl        / n[        U R                  5       H0  u  p(U R                  U   n[        X5      nUR                  U5        M2     Xpl        g)a  
Turns the numbers and Modifier objects into Figure objects, each corresponding
to a number with its Modifier.


>>> from music21.figuredBass import notation as n
>>> notation2 = n.Notation('-6,-')  #__init__ method calls _getFigures()
>>> notation2.figures[0]
<music21.figuredBass.notation.Figure 6 <Modifier - flat>>
>>> notation2.figures[1]
<music21.figuredBass.notation.Figure 3 <Modifier - flat>>
Fra   N)rQ   rT   r-   r2   r8   FigurerO   r/   	enumerater0   r1   r<   )	r?   r/   r^   r_   r`   ra   r[   figuresFromNotaCol
origNumbers	            r@   r>   Notation._getFigures  s     !#s4<<()A\\!_F!11!4NH~~!c$..&9"9>>!,FXFFNN6" * &t'7'78MA!003NJ7F%%f- 9
 *<&rC   )r8   r,   r/   r<   r9   r2   r.   r+   r-   r1   r0   N)r6   )r+   rE   returnNone)r{   r|   )__name__
__module____qualname____firstlineno____doc__
_DOC_ORDERr4   __annotations__rA   rG   r:   r;   r=   r>   __static_attributes__r7   rC   r@   r)   r)   @   si    gPQJ
=#!I~ #J((g+R82t*4!<rC   r)   c                      \ rS rSrSrg)rU   i  r7   Nr}   r~   r   r   r   r7   rC   r@   rU   rU         rC   rU   c                  p    \ rS rSr% SrSSSSS.rS\S	'     SS
S.     SS jjjr\SS j5       r	S r
Srg)rv   i  a  
A Figure is created by providing a number and a modifierString. The
modifierString is turned into a :class:`~music21.figuredBass.notation.Modifier`,
and a ModifierException is raised if the modifierString is not valid.

>>> from music21.figuredBass import notation
>>> f1 = notation.Figure(4, '+')
>>> f1
<music21.figuredBass.notation.Figure 4 <Modifier + sharp>>

>>> f1.number
4
>>> f1.modifierString
'+'
>>> f1.modifier
<music21.figuredBass.notation.Modifier + sharp>
>>> f1.hasExtender
False
>>> f1.isPureExtender
False
>>> f2 = notation.Figure(6, '#', extender=True)
>>> f2.hasExtender
True
>>> f2.isPureExtender
False
>>> f3 = notation.Figure(extender=True)
>>> f3.isPureExtender
True
>>> f3.hasExtender
True
z
            A number associated with an expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            
            A modifier string associated with an
            expanded :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            A :class:`~music21.figuredBass.notation.Modifier`
            associated with an expanded
            :attr:`~music21.figuredBass.notation.Notation.notationColumn`.
            z
            A bool value that indicates whether an extender is part of the figure.
            It is set by a keyword argument.
            )r_   r`   rr   hasExtenderr3   r4   Fru   c               H    Xl         X l        [        U5      U l        X0l        g r   )r_   r`   rq   rr   r   )r?   r_   r`   ra   s       r@   rA   Figure.__init__  s!     !'(6"*>":!)rC   c                F    U R                   S:H  =(       a    U R                  $ )a  
Read-only boolean property that returns True if an extender is part of the figure
but no number is given (a number of 1 means no-number). It is a pure extender.

>>> from music21.figuredBass import notation
>>> n = notation.Figure(1, '#', extender=True)
>>> n.isPureExtender
True
>>> n
<music21.figuredBass.notation.Figure pure-extender <Modifier # sharp>>

>>> n.number = 2
>>> n.isPureExtender
False
>>> n
<music21.figuredBass.notation.Figure 2(extender) <Modifier # sharp>>
rJ   )r_   r   rF   s    r@   isPureExtenderFigure.isPureExtender  s    & {{a4D$4$44rC   c                    U R                   (       a  SnSnO*[        U R                  5      nU R                  (       a  SOSn[	        U R
                  5      R                  SS5      nU U SU 3$ )Nzpure-extenderr6   z
(extender)zmusic21.figuredBass.notation. )r   rE   r_   r   reprrr   replace)r?   numextmods       r@   rG   Figure._reprInternal$  sc    !CCdkk"C"&"2"2,C4==!))*I2Nse1SE""rC   )r   rr   r`   r_   N)rJ   r6   )r_   z
int | Noner`   z
str | Nonera   bool)r{   r   )r}   r~   r   r   r   r4   r   rA   propertyr   rG   r   r7   rC   r@   rv   rv     sv    @
!I~ , #%*
 ** !*
 * 5 5(#rC   rv   -z--bbbz---bbbbz-----r   z+++z###z++++z####r"   nr#   r$   r%   r&   r'   c                  X    \ rS rSr% SrSSS.rS\S'   SS	 jrS
 rS r	S r
SS.S jrSrg)rq   iE  a>  
Turns a modifierString (a modifier in a
:attr:`~music21.figuredBass.notation.Notation.notationColumn`)
to an :class:`~music21.pitch.Accidental`. A ModifierException
is raised if the modifierString is not valid.


Accepted inputs are those accepted by Accidental, as well as the following:

* '+' or '\' -> '#'

* 'b' or '/' -> '-'

>>> from music21.figuredBass import notation
>>> m1a = notation.Modifier('#')
>>> m1a
<music21.figuredBass.notation.Modifier # sharp>
>>> m1a.modifierString
'#'
>>> m1a.accidental
<music21.pitch.Accidental sharp>

Providing a + in place of a sharp, we get the same result for the accidental.

>>> m2a = notation.Modifier('+')
>>> m2a
<music21.figuredBass.notation.Modifier + sharp>
>>> m2a.accidental
<music21.pitch.Accidental sharp>

If None or '' is provided for modifierString, then the accidental is None.

>>> m3a = notation.Modifier(None)
>>> m3a
<music21.figuredBass.notation.Modifier None None>
>>> m3a.accidental is None
True
>>> m3b = notation.Modifier('')
>>> m3b
<music21.figuredBass.notation.Modifier  None>
>>> m3b.accidental is None
True
r   z
            A :class:`~music21.pitch.Accidental` corresponding to
            :attr:`~music21.figuredBass.notation.Modifier.modifierString`.
            )r`   
accidentalr3   r4   Nc                :    Xl         U R                  5       U l        g r   )r`   _toAccidentalr   )r?   r`   s     r@   rA   Modifier.__init__|  s    ,,,.rC   c                p    U R                   b  U R                   R                  nOS nU R                   SU 3$ )Nr   )r   namer`   )r?   accs     r@   rG   Modifier._reprInternal  s8    ??&//&&CC%%&au--rC   c                Z   U R                   (       d  g[        R                  " 5       n UR                  U R                   5        U$ ! [        R                   aP     [
        U R                      nO&! [         a    [        SU R                    35      ef = fUR                  U5         U$ f = f)a   

>>> from music21.figuredBass import notation as n
>>> m1 = n.Modifier('#')
>>> m2 = n.Modifier('-')
>>> m3 = n.Modifier('n')
>>> m4 = n.Modifier('+')  # Raises pitch by semitone
>>> m5 = n.Modifier('b')  # acceptable for flat since note names not allowed
>>> m1.accidental
<music21.pitch.Accidental sharp>
>>> m2.accidental
<music21.pitch.Accidental flat>
>>> m3.accidental
<music21.pitch.Accidental natural>
>>> m4.accidental
<music21.pitch.Accidental sharp>
>>> m5.accidental
<music21.pitch.Accidental flat>
Nz(Figure modifier unsupported in music21: )r`   r   
AccidentalsetAccidentalExceptionspecialModifiersrg   ModifierException)r?   arm   s      r@   r   Modifier._toAccidental  s    ( ""		%EE$%%&  (( 	%$4T5H5H$I! '>t?R?R>ST  EE#$	%s)   A B*A/.B*/#BB*)B*c                f    [         R                  " U5      nU R                  USS9  UR                  $ )a  
Given a pitch name, modify its accidental given the Modifier's
:attr:`~music21.figuredBass.notation.Modifier.accidental`.

>>> from music21.figuredBass import notation
>>> m1 = notation.Modifier('#')
>>> m2 = notation.Modifier('-')
>>> m3 = notation.Modifier('n')
>>> m1.modifyPitchName('D')  # Sharp
'D#'
>>> m2.modifyPitchName('F')  # Flat
'F-'
>>> m3.modifyPitchName('C#')  # Natural
'C'
TinPlace)r   PitchmodifyPitchr   )r?   pitchNameToAlterpitchToAlters      r@   modifyPitchNameModifier.modifyPitchName  s2      {{#34t4   rC   Fr   c                  U(       d  [         R                  " U5      nU R                  c  U$ U R                  R                  S:X  d  UR                  c&  [         R                  " U R                  5      Ul        OZ[        R
                  " 5       nUR                  R                  U R                  R                  -   n UR                  U5        X1l        U(       d  U$ g! [        R                   a    [        S5      ef = f)a  
Given a :class:`~music21.pitch.Pitch`, modify its :attr:`~music21.pitch.Pitch.accidental`
given the Modifier's :attr:`~music21.figuredBass.notation.Modifier.accidental`.

>>> from music21.figuredBass import notation
>>> m1 = notation.Modifier('#')
>>> m2 = notation.Modifier('-')
>>> m3 = notation.Modifier('n')
>>> p1a = pitch.Pitch('D5')
>>> m1.modifyPitch(p1a)  # Sharp
<music21.pitch.Pitch D#5>
>>> m2.modifyPitch(p1a)  # Flat
<music21.pitch.Pitch D-5>
>>> p1b = pitch.Pitch('D#5')
>>> m3.modifyPitch(p1b)
<music21.pitch.Pitch D5>

OMIT_FROM_DOCS
>>> m4 = notation.Modifier('##')
>>> m5 = notation.Modifier('--')
>>> p2 = pitch.Pitch('F5')
>>> m4.modifyPitch(p2)  # Double Sharp
<music21.pitch.Pitch F##5>
>>> m5.modifyPitch(p2)  # Double Flat
<music21.pitch.Pitch F--5>
Ng        z2Resulting pitch accidental unsupported in music21.)	copydeepcopyr   alterr   r   r   r   r   )r?   r   r   newAccidentalnewAlters        r@   r   Modifier.modifyPitch  s    6 ==6L??"??  C'<+B+B+J&*mmDOO&DL#!,,.M#..44t7L7LLH^!!(+*7'   ,, ^'(\]]^s   =C  C>)r   r`   r   )r}   r~   r   r   r   r4   r   rA   rG   r   r   r   r   r7   rC   r@   rq   rq   E  sD    *X	!I~ 	/.#J!( 49 +  + rC   rq   c                      \ rS rSrSrg)r   i  r7   Nr   r7   rC   r@   r   r     r   rC   r   c                    [        U [        R                  5      (       a  U $ [        U [        5      (       a   [        R                  " U 5      $ [        SU -   S-   5      e!   [	        SU -   S-   5      e= f)a(  
Converts a pitchString to a :class:`~music21.pitch.Pitch`, only if necessary.

>>> from music21.figuredBass import notation
>>> pitchStr = 'C5'
>>> notation.convertToPitch(pitchStr)
<music21.pitch.Pitch C5>
>>> notation.convertToPitch(pitch.Pitch('E4'))  # does nothing
<music21.pitch.Pitch E4>
zCannot convert string z to a music21 Pitch.zCannot convert )
isinstancer   r   rE   
ValueError	TypeError)pitchStrings    r@   convertToPitchr     su     +u{{+++s##	^;;{++ %36LL
MM	^5CF\\]]s   A A2c                      \ rS rSrSrg)Testi  r7   Nr   r7   rC   r@   r   r     r   rC   r   __main__)
__future__r   r   rL   unittestmusic21r   r   r   rd   prefixessuffixesmodifiersDictXmlToM21modifiersDictM21ToXmlProtoM21Objectr)   Music21ExceptionrU   rv   r   rq   r   r   r   TestCaser   r}   mainTestr7   rC   r@   <module>r      s"   #  	     $!!$',0&&&$  "6 	  
	


		  "E<w%% E<P	55 	^#W## ^#D 	# 	
 	$ 
5 G 	$ 
5 F c c c c c  $!" $# *f w%% f R	55 	N. )
	8 	 zT rC   