Mon Nov 23 16:03:13 EST 1992
From owner-mpi-lang@CS.UTK.EDU  Wed Dec 23 06:11:46 1992
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA08579; Wed, 23 Dec 92 06:11:46 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA10302; Wed, 23 Dec 92 06:11:35 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 23 Dec 1992 11:11:34 GMT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA10294; Wed, 23 Dec 92 06:11:30 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA03680
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Wed, 23 Dec 1992 06:11:26 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA22108; Wed, 23 Dec 92 11:11:20 GMT
Date: Wed, 23 Dec 92 11:11:20 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9212231111.AA22108@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA01691; Wed, 23 Dec 92 11:11:09 GMT
To: mpi-lang@cs.utk.edu
Cc: jim@meiko.co.uk
Subject: the mode argument
Content-Length: 4763

People,

Apologies if this issue has already been addressed. I am working from
the Supercomputer draft (ORNL/TM-12231 October 1992). Since there
appears to have been no mail in the language binding sub-group I
assume that that area remains the same.

Use of character strings for mode.
==================================

The mode argument to the communication routines is described
throughout the draft as a character string. I believe this is a BAD
IDEA for the following reasons (in no particular priority order) :-

Arguments against using strings
===============================
1) Passing strings will produce slower code
2) Passing strings will produce larger code
3) Passing strings makes a portable implementation more difficult
   because there is no standard way of passing strings from Fortran to
   C.
   

1) Code is slower.
The library routine must determine what the actual mode is. If the
mode argument is a string this should be implemented as a string
compare. This will normally require a function call (and probably more
than one), since the code will be something like
     char * mode;

     if (strcmp(mode,"blocking") == STRINGEQUAL)
     {}
     else if (strcmp(mode,"nonblocking") == STRINGEQUAL)
     {}
     else if (strcmp(mode,"synchronous") == STRINGEQUAL)
     {}
     else
         error(...)

This is hugely slower than
     int mode;

     switch (mode)
     {
         case MPI_BLOCKING:
	 	 	 
	 case MPI_NONBLOCKING:
	 
	 case MPI_SYNCHRONOUS:

	 default:
     }	 

On a RISCy machine, even unpleasant code like

     char * mode;

     switch(*mode)
     {
         case 'b': /* Assume blocking     */
	 case 'n': /* Assume non-blocking */
	 case 's': /* Assume synchronous  */
     }

will be slower than the integer case above since loading the address
of a string to pass it normally takes two instructions, while loading
a small integer constant takes one. Also there's an extra store access
to pick up the first byte of the string (almost certainly from an area
which won't be in the cache), whereas the switch on the integer value
will already have the value in a register.


2) Code is larger.
Just because of all the extra strings which will be placed in the data
segment.

3) A portable implementation is harder.
A natural way to implement the library is to implement it in C, and
then provide a Fortran binding. This is made harder when strings are
passed as arguments, since the Fortran and C string conventions are
entirely different. In the general case this requires that the whole
string be copied when calling a C routine from Fortran and passing a
string as an argument. This will have a bad effect on latency.

Arguments for using strings
===========================

1) User code is easier to understand
2) Additional possibilities are easier to add
3) There is no standard way of including PARAMETER definitions in
   Fortran 77.

1) User code is easier to understand
IMHO 
     MPI_RECV ( MPI_BLOCKING, ...);
is just as easy to understand as
     MPI_RECV ( "blocking", ...);

though I agree that
     MPI_RECV ( 0 , ...);
is extremely opaque.

The solution to this is NOT to define the actual values which are used
to represent the various tokens, but rather to specify only symbolic
names and the include file name. Portable programs must not then make
assumptions about the actual values used.

In ANSI C it would actually be possible to define the modes as an
enumeration type. In conjunction with appropriate prototype
definitions for the library functions this should cause type warnings
on usage like the last example. (Since the 0 is implicitly an int,
rather than an enum mpi_mode)       

2) Additional possibilities are easier to add
It is true that strings allow vendor options to be more securely added
(e.g. "meiko_fastsend") but 
      1) do we want to permit such things ?
	 Any programs which use these features will be neither
	 conformant nor portable. (Though of course we can't stop them).
      2) we have (at least) 2**32 possible modes anyway. If we reserve
         0 <= mode <= 256 for standard sepcified use, and allow other
	 people to choose RANDOM other numbers, the chances of
	 collision are extremely low. (Of course we could recommend 
	 the dollar bill solution, which generates large guaranteed 
	 unique numbers at the cost of $1 for each number).

3) There is no standard way of including PARAMETER definitions in
   Fortran 77.
This is true and a pain. However Fortran 90 provides modules which
overcome this. I don't think this is a sufficiently strong argument

Thoughts ?
Feedback ?
Flames   ?

-- Jim
James Cownie 
Meiko Limited
650 Aztec West
Bristol BS12 4SD
England

Phone : +44 454 616171
FAX   : +44 454 618188
E-Mail: jim@meiko.co.uk or jim@meiko.com


From owner-mpi-lang@CS.UTK.EDU  Mon Jan  4 09:32:49 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA19838; Mon, 4 Jan 93 09:32:49 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09250; Mon, 4 Jan 93 09:32:41 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 04 Jan 1993 14:32:40 GMT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09242; Mon, 4 Jan 93 09:32:36 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA07241
  (5.65c/IDA-1.4.4); Mon, 4 Jan 1993 09:32:32 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA15874; Mon, 4 Jan 93 14:32:28 GMT
Date: Mon, 4 Jan 93 14:32:28 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9301041432.AA15874@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA02690; Mon, 4 Jan 93 14:31:52 GMT
To: mpi-pt2pt@cs.utk.edu, mpi-lang@cs.utk.edu
Subject: Profilers etc.
Content-Length: 2528

Gentlepeople,

I have an implementation issue which I would like to raise in the MPI
forum, since it is unclear where it fits into the sub-committee
structure I have mailed to both mpi-pt2pt and mpi-lang. Apologies to
those of you who receive this message twice.

Issue
=====
The major objective of MPI1 is to achieve portability of applications.
This has major benefits for us all (not least in legitimising and
therefore growing the MPP marketplace). 

One of the benefits which it would also be nice to achieve would be
the wide availability of different tools which support programming in
the MPI1 model. The most immediately obvious such tools (to me at
least !) are

1) HPF to Fortran + MPI1 translators
2) Performance monitoring/tuning tools
3) Debuggers

Support for the first is easy (since it just requires what we're
already doing). 

Portable support for the second is not so trivial, since the
collection of useful performance information is much more intrusive.

Portable support for the third is harder still, and I won't discuss it
further. 

Options
=======
We have various possible options which we can take.

1) Ignore the problem
   Provide no support for portable performance monitoring tools, and
   leave each tool provider with a large porting problem.

   I don't like this solution, it loses some of the benefit of the
   standard, which should be attracting people to build tools.

2) Document specific implementation hooks as part of MPI1. 
   In effect these would be callbacks from the library to profiling
   code which could then do whatever it liked.

3) As 2, but without REQUIRING that a conforming implementation
   provide the functions. They're there as a recommendation, rather
   than being mandatory. 


I think we should be concerned about this, and I'd like us at least to
make some recommendation. Personally I'd probably implement two
separate interface to the library, one of which provided the hooks,
and the other of which didn't so that you don't pay the cost of
checking the profiling hooks unless you asked to.

Of course even if we do nothing it's not too hard to escape (using
horrible macros) in C, but Fortran doesn't always have macros, so a
properly specified internal solution is definitely preferable.

Thoughts ???
Flame me at Dallas. I'm travelling tomorrow. When are we having a
meeting in Europe ???

-- Jim
James Cownie 
Meiko Limited
650 Aztec West
Bristol BS12 4SD
England

Phone : +44 454 616171
FAX   : +44 454 618188
E-Mail: jim@meiko.co.uk or jim@meiko.com

From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 11:48:30 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA16901; Wed, 3 Feb 93 11:48:30 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07042; Wed, 3 Feb 93 11:48:05 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 11:48:04 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07034; Wed, 3 Feb 93 11:48:03 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Wed, 3 Feb 1993 11:47:59 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA00312; Wed, 3 Feb 1993 11:47:56 -0500
Date: Wed, 3 Feb 1993 11:47:56 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302031647.AA00312@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@cs.utk.edu
Subject: Stirring up trouble


Ladies and Gentlemen,

This committee has been (appropriately) quiet the last several months.
It is, however, time to make some noise. I submit the following not 
for your approval, but to stimulate the discussion. I will be disappointed 
if much of what I propose lives as long as the committee draft proposal. 

Although the comments pertain to C and F77, we might also consider 
other languages such as C++, Fortran 90, Ada, and ML.

-----------------------------------------------------------------------------

This committee exists to insure that the design of MPI is consistent with 
the standards of the target languages (Fortran 77 and ANSI-C), and that the 
two interfaces are consistent with each other. I view our role to be 
the "Style Police" of the MPI committee. It is therefore appropriate to 
suggest to the committee a list of pitfalls to avoid.

1) Strings have no place in the parameter lists of MPI calls. 
The internal representation of strings is different in F77 and C. Using 
strings in the interface can only cause trouble. 

2) The availability of macros in Fortran cannot be assumed. 
Although most Fortran compilers allow the use of cpp, the Fortran 77 
standard does not require this. (Some of the functionality of macros
can be had by using "parameters" in F77, but this only allows the binding
of constants to symbols.)

3) As much as possible, the MPI names should be the same in both F77 and C.

4) Identifiers (e.g., function names) must be valid both in C and F77.
Fortran is far more restrictive on this than C is. The F77 standard 
dictates that variables, function names, and subroutine names, be 
distinct in the first six characters. 

5) Using integers in Fortran as handles to keep track of structures
   and pointers to structures is consistent with common F77 programming style
   and the F77 standard. 


Any Other No-Nos for the committee as a whole?


-scott berryman 
Chair, Language Binding 

Yale University Computer Science Department
and
NASA Langley Research Center
From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 12:00:25 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA17440; Wed, 3 Feb 93 12:00:25 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07728; Wed, 3 Feb 93 12:00:11 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 12:00:10 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from marge.meiko.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA07710; Wed, 3 Feb 93 12:00:05 -0500
Received: from hub.meiko.co.uk by marge.meiko.com with SMTP id AA18122
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Wed, 3 Feb 1993 12:00:00 -0500
Received: from float.co.uk (float.meiko.co.uk) by hub.meiko.co.uk (4.1/SMI-4.1)
	id AA28075; Wed, 3 Feb 93 16:59:49 GMT
Date: Wed, 3 Feb 93 16:59:48 GMT
From: jim@meiko.co.uk (James Cownie)
Message-Id: <9302031659.AA28075@hub.meiko.co.uk>
Received: by float.co.uk (5.0/SMI-SVR4)
	id AA03458; Wed, 3 Feb 93 16:58:10 GMT
To: berryman-harry@CS.YALE.EDU
Cc: mpi-lang@cs.utk.edu
In-Reply-To: Harry Berryman's message of Wed, 3 Feb 1993 11:47:56 -0500 <199302031647.AA00312@YOGI.NA.CS.YALE.EDU>
Subject: Stirring up trouble
Content-Length: 946

> Any Other No-Nos for the committee as a whole?

6) The underscore character (`_') is NOT included in the FORTRAN 77
   character set.

7) In a standard conforming FORTRAN 77 program a subprogram only ever
   has one type signature for its arguments.

We should also concern ourselves somewhat with Fortran 90. A 
FORTRAN 77 binding (though compatible with Fortran 90) is NOT what is
really required for a Fortran 90 binding. In particular Fortran 90
allows various options which may be useful (optional arguments, named
arguments), and provides whole new areas of complexity (POINTERs,
structures etc.) which will not have been addressed by the FORTRAN 77
binding. 

-- Jim
James Cownie 
Meiko Limited			Meiko Inc.
650 Aztec West			Reservoir Place
Bristol BS12 4SD		1601 Trapelo Road
England				Waltham
				MA 02154

Phone : +44 454 616171		+1 617 890 7676
FAX   : +44 454 618188		+1 617 890 5042
E-Mail: jim@meiko.co.uk   or    jim@meiko.com

From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 14:28:49 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA21025; Wed, 3 Feb 93 14:28:49 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA14904; Wed, 3 Feb 93 14:28:29 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 14:28:27 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA14896; Wed, 3 Feb 93 14:28:26 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Wed, 3 Feb 1993 14:28:24 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA00671; Wed, 3 Feb 1993 14:28:23 -0500
Date: Wed, 3 Feb 1993 14:28:23 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302031928.AA00671@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@cs.utk.edu
Subject: Optional arguments

I'm of the opinion that optional arguments should be discounted because 
F77 doesn't support them, and we want all of the interfaces to be as
much alike as possible. 

Unfortunately, making the interface consistent with F77 and C is pretty 
restrictive. Do we want to keep this as a general principle?

-scott berryman
chairthing
From owner-mpi-lang@CS.UTK.EDU  Wed Feb  3 15:12:38 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA22300; Wed, 3 Feb 93 15:12:38 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA17335; Wed, 3 Feb 93 15:12:21 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 3 Feb 1993 15:12:20 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from timbuk.cray.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA17327; Wed, 3 Feb 93 15:12:18 -0500
Received: from teak18.cray.com by cray.com (4.1/CRI-MX 2.10)
	id AA03650; Wed, 3 Feb 93 14:12:15 CST
Received: by teak18.cray.com
	id AA05975; 4.1/CRI-5.6; Wed, 3 Feb 93 14:12:10 CST
From: par@teak.cray.com (Peter Rigsbee)
Message-Id: <9302032012.AA05975@teak18.cray.com>
Subject: Re:  Optional arguments
To: mpi-lang@cs.utk.edu
Date: Wed, 3 Feb 93 14:12:05 CST
X-Mailer: ELM [version 2.3 PL11b-CRI]

Scott Berryman writes:
> 
> Unfortunately, making the interface consistent with F77 and C is pretty 
> restrictive. Do we want to keep this as a general principle?
> 

It seems to me that most of the restrictions seem to effect the F77
interfaces.  C seems pretty flexible, especially with "void *" in ANSI
C.  (I don't have your other mail messages right at hand, so don't remember 
specifics.)

Adhering to the F77 standard has its advantages, not the least of which
is that it is easy to define and you can make a good argument for.
Unfortunately, I think this will have us end up with the same kinds of
cryptic function names that are found in other portable libraries.  And
if we do end up with lots of subtle variations on send and receive, trying
to remember the difference between SNPAHP and SNPHAP (choosing two strings
at random ;-) will get pretty difficult.

Pragmatically, though, it is my sense that most of the Fortran 77 compilers
available on the market, especially on newer systems, have gone beyond the
standard in a number of areas (especially names).  Given the competitive 
pressures to compile existing code, I think it would be hard for a hardware 
or software vendor today to offer, for example, a Fortran compiler that 
restricted function names to the 6 character limit.

So I think it would be more useful if we were to propose, at least for 
Fortran 77, interfaces that matched this more realistic "standard".  Restrict 
things where true portability will differ, not just where the formal standard 
is limiting.  Another way to look at this is that if the interfaces must
adhere to the lowest common denominator, then we should define this based
on the set of likely target systems, and not simply on the standard.  Then 
let people (members of the MPI group, people who review the spec, etc.) come 
back with specific arguments about where and why particular aspects are in 
fact non-portable.

Some areas where, as a user, I see restrictions as being unnecessary might 
include:
	- maximum length of name (32? 16?)
	- use of underscores in name
	- an argument can only be of one type

I think the net result would be an interface that would be more easily
understood and more usable.

	- Peter Rigsbee
From owner-mpi-lang@CS.UTK.EDU  Mon Feb  8 14:14:34 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04248; Mon, 8 Feb 93 14:14:34 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA08480; Mon, 8 Feb 93 14:14:21 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 8 Feb 1993 14:14:20 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from NA-GW.CS.YALE.EDU by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA08472; Mon, 8 Feb 93 14:14:18 -0500
Received: from YOGI.NA.CS.YALE.EDU by CASPER.NA.CS.YALE.EDU via SMTP; Mon, 8 Feb 1993 14:14:15 -0500
Received: by YOGI.NA.CS.YALE.EDU (Sendmail-5.65c/res.client.cf-3.5)
	id AA11866; Mon, 8 Feb 1993 14:14:12 -0500
Date: Mon, 8 Feb 1993 14:14:12 -0500
From: berryman-harry@CS.YALE.EDU (Harry Berryman)
Message-Id: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
To: mpi-lang@CS.UTK.EDU
Subject: Why not both?


I also tend to chaff under the restriction of the F77 variable name
requirements. But, on the other hand, I'd hate to have everyone hate
use for not being consistent with the standard. (BTW the ANSI C standard
is 32 chars, counting an implied leading underscore.) Perhaps a compromise
would be to have the standard written in terms of a 31 char limit, but
supply another interface which was consistent with the F77 standard, but
functionally equivelent. Obviously this would double the number of routines 
in the standard.

-scott
From owner-mpi-lang@CS.UTK.EDU  Mon Feb  8 14:40:36 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04760; Mon, 8 Feb 93 14:40:36 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09906; Mon, 8 Feb 93 14:40:26 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 8 Feb 1993 14:40:25 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ssdintel.ssd.intel.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA09887; Mon, 8 Feb 93 14:40:22 -0500
Received: from tualatin.SSD.intel.com by SSD.intel.com (4.1/SMI-4.1)
	id AA05139; Mon, 8 Feb 93 11:40:15 PST
Date: Mon, 8 Feb 93 11:40:15 PST
Message-Id: <9302081940.AA05139@SSD.intel.com>
Received: by tualatin.SSD.intel.com (4.1/SMI-4.0)
	id AA00559; Mon, 8 Feb 93 11:39:51 PST
From: Bob Knighten <knighten@SSD.intel.com>
Sender: knighten@SSD.intel.com
To: berryman-harry@CS.YALE.EDU
Cc: mpi-lang@CS.UTK.EDU
Subject: Re: Why not both?
In-Reply-To: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
References: <199302081914.AA11866@YOGI.NA.CS.YALE.EDU>
Reply-To: knighten@SSD.intel.com (Bob Knighten)

The one place where the P1003.9 standard (POSIX FORTRAN 77 Language Interfaces
- Part 1: Binding for System API) which specifies a F77 binding to the POSIX
system interfaces violates the FORTRAN 77 standard is in name length.  There
was no significant opposition because of this.

-- Bob

Robert L. Knighten	             | knighten@ssd.intel.com
Intel Supercomputer Systems Division | 
15201 N.W. Greenbrier Pkwy.	     | (503) 629-4315
Beaverton, Oregon  97006	     | (503) 629-9147 [FAX]
From owner-mpi-lang@CS.UTK.EDU  Wed Feb 10 16:46:22 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA04990; Wed, 10 Feb 93 16:46:22 -0500
Received: from localhost by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA24116; Wed, 10 Feb 93 16:46:04 -0500
X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 10 Feb 1993 16:46:03 EST
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ssdintel.ssd.intel.com by CS.UTK.EDU with SMTP (5.61++/2.8s-UTK)
	id AA24080; Wed, 10 Feb 93 16:45:38 -0500
Received: from tualatin.SSD.intel.com by SSD.intel.com (4.1/SMI-4.1)
	id AA14891; Wed, 10 Feb 93 13:45:36 PST
Date: Wed, 10 Feb 93 13:45:36 PST
Message-Id: <9302102145.AA14891@SSD.intel.com>
Received: by tualatin.SSD.intel.com (4.1/SMI-4.0)
	id AA03909; Wed, 10 Feb 93 13:45:33 PST
From: Bob Knighten <knighten@SSD.intel.com>
Sender: knighten@SSD.intel.com
To: mpi-formal@cs.utk.edu, mpi-lang@cs.utk.edu
Subject: POSIX LIS
Reply-To: knighten@SSD.intel.com (Bob Knighten)

As part of the POSIX work a "Draft TCOS-SSC Technical Report -- Programming
Language Independent Specification Methods" was written.  This  has served as
the basis for the language independent specification of the various system
interfaces that have been developed.  This is *NOT* a formal specification
method, but has as its purpose "to assist and coordinate the development of
functional specifications and language bindings by defining an abstract
model, and providing guidelines for the use of that model in the
development of new functional specifications, the dirivation of a base
standard from an existing language binding, and the development of new
language bindings to a functional specification."

"The model is primarily intended for use in developing language-independent
specifications for operating system and related services, and language
bindings for procedural programming languages."

[The quotation is from the Scope and Purpose of the report.]

This guide was never completely finished and Paul Rabin (OSF), the
principal author, recommends that it be used in conjunction with the
P1003.1LIS which provides a very large example.

Paul Rabin expects that some extensions to the current guide will be
necessary for MPI, just as extensions will be necessary for the POSIX
Real-Time and Threads work.  He is interested in working with us to develop
common extensions.

I can provide copies of the POSIX LIS and both the P1003.1 LIS and the
P1003.16 C binding to the P1003.1 LIS as well.  [P1003.1LIS is about 380
pages and P1003.16 is about 300 pages so I don't want to drop these books
on people unless they are actually desired.]

A formal specification of MPI is quite desirable, but I am doubtful that we
can achieve it in the time we have available.  A language independent
specification of the sort developed within POSIX is, I believe, essential
to provide the common base for all of the language bindings we wish to
provide.  

-- Bob

Robert L. Knighten	             | knighten@ssd.intel.com
Intel Supercomputer Systems Division | 
15201 N.W. Greenbrier Pkwy.	     | (503) 629-4315
Beaverton, Oregon  97006	     | (503) 629-9147 [FAX]
From owner-mpi-lang@CS.UTK.EDU  Fri Apr  9 13:02:00 1993
Received: from CS.UTK.EDU by surfer.EPM.ORNL.GOV (5.61/1.34)
	id AA00637; Fri, 9 Apr 93 13:02:00 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA28148; Fri, 9 Apr 93 13:01:47 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Fri, 9 Apr 1993 13:01:45 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from ocfmail.ocf.llnl.gov by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA28093; Fri, 9 Apr 93 13:00:56 -0400
Received: by ocfmail.ocf.llnl.gov (4.1/SMI-4.0)
	id AA25915; Fri, 9 Apr 93 10:00:54 PDT
Date: Fri, 9 Apr 93 10:00:54 PDT
From: nessett@ocfmail.ocf.llnl.gov (Danny Nessett)
Message-Id: <9304091700.AA25915@ocfmail.ocf.llnl.gov>
To: mpi-lang@cs.utk.edu, mpi-pt2pt@cs.utk.edu
Subject: cross-language support - a proposal (long)
Cc: nessett@ocfmail.ocf.llnl.gov


I am cross posting this message to the point-to-point list, since it contains
a proposed modification to the point-to-point proposal. Those interested in
point-to-point, but not language binding issues should skip to section 3,
and evaluate whether the changes are acceptable.

1. The Problem
--------------

At the recent MPI meeting in Dallas (31 March - 2 April), the language binding
subcommittee proposed that the MPI standard make no provision for
interoperability between MPI-based programs written in different programming
languages. I objected to that suggestion and volunteered to develop a proposal
that would allow such language interoperability. My objections were and are
based on the following considerations :

  o  MPI is a mulit-use standard, being developed for homogeneous multi-
     processors, homogeneous computer clusters and heterogeneous distributed
     systems. The objective is to provide a message passing interface that
     can be used in all of these environments. In addition, there is an
     objective to promote portability of MPI-based codes from one environment
     to another.

     Correct operation of MPI-based codes in a heterogeneous environment
     requires the MPI implementation to accommodate different formats
     for the communicated data. As a side effect, programs written in
     different programming languages will interoperate as long as the data
     types are conceptually the same. For example, REALs in Fortran and
     floats in C are conceptually the same. Unless there is a requirement
     that MPI support cross-language interoperability, some programs will
     work in heterogeneous environments, but not work in homogeneous
     environments. This will give the appearance that MPI is poorly designed.

  o  MPI can be used in at least two different ways. It can be used for
     intercommunication between application executables that are aware
     (from the programmer's point of view) of each other's internal data
     structures and algorithms. It can also be used to provide services,
     much like a library provides services, in which the internal data
     structures and algorithms are not visible to the service client.
     In this second class of use, MPI acts as a generic service interface,
     supporting a wide variety of applications. Commonly, this generic service
     interface is known as client/server.

     Traditionally, libraries define their interface data structures and
     procedure prototypes in a specific programming language. Some libraries
     provide multiple interface definitions, one for each particular
     programming language they support. However, when using a generic
     service interface to access what is the equivalent of library services,
     this approach becomes problematic. The MPI interface is itself specified
     in terms of one or more programming language bindings. There is no
     useful way to specify another language binding for the client/server
     interface.

     Consequently, another approach is used for the client/server interface,
     which is programming language independent. Generally, server writers
     specify an interface in terms of a message parameter that represents
     the function or procedure to execute and in conjunction with a particular
     value of that parameter, specify a set of parameters that are the
     function's or procedure's arguments. Note that with a message passing
     based generic service interface, such as MPI (as opposed to a remote
     procedure call generic service interface), the service call is not
     constrained to obey function or procedure semantics, since the client is
     not obliged to block while the server provides the service. However,
     that is an aside.

     Since the server's interface is specified in terms of MPI data types,
     rather than in terms of the data types of the programming language used
     to write the server, there is a complete decoupling of the programming
     language used to write a server from the programming language used to
     write the client (and vice versa). The server can use one MPI language
     binding to offer service and the client can use another MPI language
     binding to access those services.

     An example may clarify this somewhat. Suppose I wish to write a server
     that provides a matrix manipulation service. I define my interface as
     follows :

       first parameter : operation to be performed (integer) -

			1 = matrix sum

			2 = matrix multiply

			3 = matrix inversion

			4 = matrix transposition

			5 = return result

       second parameter: number of rows (integer) in matrix
                         (or matrices)

       third parameter : number of columns (integer) in matrix
                         (or matrices)

       fourth parameter: first matrix for all operations (single precision
			  real array, row major order)

       fifth parameter : second matrix for operations 1 and 2 (single
			  precision real array, row major order)

     For this interface, the operation and parameters will be specified as
     MPI data types. For a C or C++ language binding of MPI, these data types
     will be "int" and "float". For a Fortran language binding of MPI, these
     data types will be "INTEGER" and "REAL". This means there really is no
     way to prevent cross language interactions, other than to provide
     a "caveat emptor" warning to the programmer. Some programmers will
     not read the manual that closely; will implement a cross language
     service interface; will use it on various machines with no problems;
     and finally will curse the MPI implementors when it doesn't work on
     other machines. This will reduce confidence in MPI as a standard
     message passing interface.

     Note the property described in the previous bullet. In a heterogeneous
     environment, even if both client and server are written in the same
     language, the MPI implementation must accommodate conversion between
     different ranges of values for a particular type.  For example, if
     one machine represents integers as 32 bit quantities, while another
     represents them as 64 bit quantities, sending an integer parameter
     from the second to the first requires a check to ensure the 64 bit
     value can be represented as a 32 bit value (e.g., that 100,000
     represented as a 64 bit number fits into a 32 bit representation).
     This check also allows a client written in one language (say, C) to call
     a server written in another language (say, Fortran).

2. My view of the issues
------------------------

Below I summarize my view of the issues in regards to cross-language MPI
service. I am sure that there are other issues that I have not thought of
and welcome others to contribute them to the discussion.

  o  As I have stated above, MPI is a multi-use standard being targeted for
     homogeneous multi-processors, homogeneous computer clusters and
     heterogeneous distributed systems. Vendor and user communities
     representing each of these environments are participating in
     the MPI standardization process. This invariably leads to a conflict
     of objectives. For example, the community most interested in homogeneous
     multi-processors does not want to sacrifice the performance of
     parallel programs running on these machines in order to accommodate
     heterogenous distributed processing or cross-language MPI support.
     Alternatively, those interested in heterogenous distributed systems
     don't want to constrain the MPI standard in such a way that severly
     limits its applicability in those environments. Those interested in
     homogeneous computer clusters are probably somewhere in between
     with their objectives.

     Consequently, if the MPI standard is to provide cross-language support,
     it should do so in a way that doesn't penalize the performance of
     programs running on homogeneous multi-processors, while at the same
     time minimizing the implementation effort for cross-language and
     heterogenous distributed system support. Also, programmers who intend
     to use only one language should not have to think about cross-language
     issues.

  o  Cross-language support raises the question of translation between data
     values that are of a fundamentally different type (as opposed to being of
     a different "kind" in the Fortran 90 sense). For example, should the MPI
     standard provide support that would allow a Fortran program to send a
     "complex" value to a program written in C? (By this I mean support
     the transmission of the Fortran "complex" type to a C program, not
     the transmission of a "complex" value represented in some user
     specified way, like two real values). A cross-language facility may
     or may not allow this, depending on the degree of automation the
     standard is designed to provide. It is conceivable for a cross-language
     standard to support the communication of only those data types that
     are common to all of the target programming languages.

     There is also the issue of type coercion of transmitted values within
     a single language. For example C allows you to coerce a real value
     into an integer value when you assign a real value to an integer
     variable. Taking this approach would imply a sender could specify a
     real value in an MPI_ADD_BLOCK call, while the receiver specified
     an integer variable and expect MPI to perform the conversion.
     Allowing such coercion in the MPI interface would significantly increase
     its complexity, since the programmer would now have to specify not
     only the type being sent or received, but also the type being coerced.
     For this reason, I believe we have decided not to support such
     type coercion in MPI.

  o  Translation between values of the same type (but perhaps different
     "kind") across languages requires knowledge of the mapping between
     a particular language type and its machine representation. For example,
     in Fortran 77 a REAL might map to an IEEE 32 and a DOUBLE PRECISION to an
     IEEE 64. In C a float might map to an IEEE 32, a double to an IEEE 64
     and a long double to an IEEE 64. In Fortran 90 a REAL with a given
     kind parameter might map to either an IEEE 32 or an IEEE 64.  Similar
     mapping of int, long, INTEGER (with different kind parameters in
     Fortran 90), char, CHARACTER, LOGICAL and COMPLEX to underlying
     representations is required to properly support cross-language
     interoperability. Some language types that have been suggested as
     MPI types would require definition in certain languages. For example,
     LOGICAL in Fortran has no direct type analog in C. Similarly, there is
     no COMPLEX data type in C. It would be possible to simply declare
     use of these MPI types in a program written in an incompatible
     programming language as erroneous or the standard could specify
     a mapping between these type and non-native types in the appropriate
     languages (e.g., LOGICAL could map to unsigned char and COMPLEX to
     a structure containing two reals).

     In a heterogeneous environment the mapping information can be more
     complex. On a SUN Workstation REALs, DOUBLE PRECISIONS, floats, doubles
     and long doubles may map as specified above. On a CRAY, however, a
     REAL may map to a CRAY 64, a DOUBLE PRECISION to a CRAY 64, a float
     to a CRAY 64, a double to a CRAY 64 and a long double to a CRAY 128.

  o  Cross-language interoperability may require an MPI implementation
     that supports a particular language binding to be aware in some
     way of the existence of other language bindings. This may cause
     a problem when new MPI language bindings are developed. The features
     of MPI that support cross-language interoperability should allow
     the graceful integration of new language bindings into the standard.

3. A Proposal
-------------

In order to support cross-language use of MPI, I propose the following
modification to the point-to-point draft. The proposal is in two completely
independent parts. One can be accepted without accepting the other.

3.1 First Part

Modify the datatype parameter values of the MPI_ADD_... functions so that they
come from the following set :

   MPI_REAL
   MPI_DOUBLEPRECISION
   MPI_COMPLEX
   MPI_INTEGER
   MPI_LOGICAL
   MPI_CHARACTER

   MPI_FLOAT
   MPI_DOUBLE
   MPI_LONGDOUBLE
   MPI_SHORT
   MPI_INT
   MPI_LONG
   MPI_CHAR    (a character array)
   MPI_UCHAR

   MPI_BYTE

These values for the datatype parameter are allowed in any MPI implementation
irrespective of its language binding. They specify the type of the data that
is being sent/received. Notice that the first group (i.e., MPI_REAL,...,
MPI_CHARACTER) are Fortran types; the second group (MPI_FLOAT,...,MPI_UCHAR)
are C (C++) types and MPI_BYTE is a language independent type. The use of a
type from the first group in a Fortran program indicates that the data being
sent/received is in Fortran format and consequently does not require
translation. The use of a type from the first group in a C (C++) program
indicates that the data being sent/received is in Fortran format and so may
require translaton. Similarly, the use of a type from the second group in a
Fortran program indicates the data being sent/received is in C (C++) format
and so may require translation. The use of a type from the second group in a C
program indicates the data being sent/received is in C (C++) format and so
need not be translated.

A client/server interface would specify its interface in terms of these MPI
types. When a MPI_ADD_... function is called, the specified type would be
used as the datatype parameter irregardless of the MPI language binding.
Thus, if a parameter is specified as MPI_REAL, that datatype would be
specified both in Fortran and C programs using the client/server interface.
To properly pass messages, both the client and server must use the same
datatype for the parameter.

In order for the MPI implementation to take advantage of the provided type
information in a cross-language communication, it must know which Fortran
types map into which C types. Therefore, the standard should specify
this information. Let me make the following strawman proposal : MPI_REAL
maps to MPI_FLOAT; MPI_DOUBLEPRECISION maps to MPI_DOUBLE; MPI_COMPLEX
maps either to a C struct or has no mapping, which would cause an error
in a cross-language communication; MPI_INTEGER maps to MPI_INT; MPI_LOGICAL
maps to MPI_UCHAR or has no mapping, which would cause an error; and
MPI_CHARACTER maps to MPI_CHAR.

There are three C types that have no natural analogs in Fortran : MPI_SHORT,
MPI_LONG, and MPI_LONGDOUBLE. MPI_SHORT and MPI_LONG probably should map
to MPI_INTEGER, since it is the only integer type available in Fortran 77.
MPI_LONGDOUBLE probably should map to MPI_DOUBLEPRECISION. However, that means
that MPI_DOUBLE and MPI_LONGDOUBLE map to the same Fortran data type. An
alternate mapping would map MPI_DOUBLE to MPI_REAL and MPI_LONGDOUBLE to 
MPI_DOUBLEPRECISION. This requires discussion.

In addition to a standard mapping between programming language types, a
particular MPI implementation must know how the supported language types
map into underlying machine representations. For example, it must know
that REAL maps into IEEE 32, int maps into a 32 bit 2's complement value, etc.

An MPI implementation would operate as follows. I categorize the implementations
by environment in order to demonstrate properties of the previously discussed
issues.

   3.1.1 Homogeneous Mulit-processors and Computer Clusters
   --------------------------------------------------------

I describe the behavior of an MPI implementation with a Fortran language
binding. The corresponding actions of an MPI implemenation with a C language
binding should be obvious.

   3.1.1.1 Send

If the datatype parameter is in the Fortran set, block copy the data using the
underlying system network. If the datatype parameter is in the C set, use the
type mapping to decide what is the corresponding Fortran type and use the
per implementation machine representation mapping to decide the underlying
representation for both the Fortran and C type. If they are the same, block
copy the data using the underlying system network. If not, convert the data
to the appropriate underlying representation for the C type and send the
converted data.

   3.1.1.2 Receive

If the datatype parameter is in the Fortran set, the buffer in which the data
arrived is in the proper format. Make it available to the MPI caller. If
the datatype parameter is in the C set, use the type mapping to decide what
is the corresponding Fortran type and use the per implementation machine
representation maping to decide the underlying representation for both
the Fortran and C type. If they are the same, the buffer in which the
data arrived is in the proper format. Make it available to the MPI caller.
Otherwise, convert the buffer to the appropriate underlying representation
and make it available to the MPI caller.

A comment on implementation strategy. It is possible for both a send
and receive operation to know before hand whether it needs to translate
the buffer data or not (i.e., the above algorithms can be run before the
actual machine transmission is sent or received). Consequently, in those
situations in which translation is necessary, the implementation can supply
an intermediate buffer in which to translate or from which to translate the
data. By knowing both the Fortran and C types as well as their underlying
representations, the implementation can precalculate the size of the
translation buffer. 

   3.1.2 Heterogeneous Distributed Systems
   ---------------------------------------

Supporting MPI communications in a heterogeneous distributed system is more
complicated than in a homogeneous environment. Not only must differences in
programming language data types be accommodated, differences in underlying
machine represenations are also a concern. The exact algorithms to use when
sending and receiving depend on the particular presentation-level protocol
employed. Protocols like XDR and ASN.1 use a intermediate representation
of data for transmission purposes. A protocol like NDR (used in OSF DCE)
transmits the data in the format of the sender, placing the burden on the
receiver to translate it. In the following discussion I finesse the protocol
issue by using the generic description "call the off-machine protocol
translation module" to mean execute the appropriate presentation protocol
algorithm. Some implementations will combine the protocol translation activity
with sending or receiving the data.

   3.1.2.1 Send

If the datatype parameter is in the Fortran set, determine the underlying
machine represenation and call the off-machine protocol translation module
to put it into the proper format. Send the result to the receiver. If the
datatype parameter is in the C set, use the type mapping to decide what is
the corresponding Fortran type. Determine the Fortran type's underlying
representation and call the off-machine protocol translation module to put
it into the proper format. Send the result to the receiver.

   3.1.2.2 Receive

If the datatype parameter is in the Fortran set, determine the underlying
machine representation and call the off-machine protocol translation module
to put it into the proper format. Return this result to the MPI caller. If the
datatype parameter is in the C set, use the type mapping to decide what is
the corresponding Fortran type. Determine the Fortran type's underlying
representation and call the off-machine protocol translation module to
put it into the proper format. Return this result to the MPI caller.


3.2 Second Part

Cross-language interoperability raises the issue of handling data types in
one programming language that have no exact analog in another programming
language. With the current suggested language bindings for MPI (i.e., Fortran
77, Fortran 90, C and C++), I think the following types fall into this
category, one way or another :

   Fortran 77

   LOGICAL
   COMPLEX

   Fortran 90

   REAL(SELECTED_REAL_KIND(--,--))
   INTEGER(SELECTED_INT_KIND(--))
   LOGICAL
   COMPLEX
   COMPLEX(SELECTED_REAL_KIND(--,--))

C and C++ types included in the MPI standard have natural analogs in Fortran 77
and Fortran 90.

There is at least two ways to handle these type mismatches. The simplest
strategy is to generate an error when these types are referenced in an
inappropriate language. This approach has the advantage of being simple to
implement. It has the disadvantage that MPI-based programs written in one
language without thought of using it from a program written in another language
will likely use inappropriate types.

The second strategy is to define analogs in each language for the non-common
types. For example, LOGICAL in both Fortran 77 and Fortran 90 could map to
unsigned char in C. COMPLEX in Fortran 77 and Fortran 90 could map to a
struct with two float members in C. However, REAL, INT and COMPLEX with
KIND parameter information cannot be handled in this way, since the
"length" of the type is a machine dependent quantity. For example, on
some machines INTEGER(SELECTED_INT_KIND(4)) might be equivalent to an int,
while on other machines it is equivalent to a long (and not an int). Similar
"length" problems exist with the REAL(SELECTED_REAL_KIND(--,--)) type.

With these points in mind I propose the following. Map LOGICAL into unsigned
char, COMPLEX into a C struct with two floats and disallow specification
of the Fortran 90 types that specify a KIND parameter. Since Fortran 90
supports a KIND function call that the programmer can use to determine when
INTEGER and INTERGER(SELECTED_INT_KIND(--)), REAL and
REAL(SELECTED_REAL_KIND(--,--)), and COMPLEX and
COMPLEX(SELECTED_REAL_KIND(--,--)) are equivalent, there is a work around
for most cases.

4. Analysis of the Proposal
---------------------------

Following is an analysis of the proposal according to the issues specified
in section 2.

  o  As described in section 3.1.1 the proposal can be implemented in such
     a way that it does not adversely impact the performance of either
     homogeneous multi-processors or homogeneous computer clusters. The 
     programmer who writes programs in one language need never consider cross-
     language issues. Furthermore, the MPI types he/she would use would be
     natural for the programming language in which he/she is working.

  o  The issue of mapping data types not found in one programming language
     into data types found in another is addressed by the second part, which
     covers mapping of data types by defining analagous types in the
     programming language from which a type is missing. Type coercion is
     not supported between types, since it is simple to first coerce the
     type (e.g., float to int) before sending it. It is not simple to support
     this kind of type coercion from within the MPI implementation.

  o  The proposal handles translation of values of the same type
     by requiring the programmer to specify the type of data in the
     datatype parameter of the MPI_ADD_... functions. There is a limited
     amount of translation between types of different kinds due to the
     mapping required to associate a type in one language with a type
     in another language. This has the advantage of automating much
     of the work required to communicate values in a cross-language
     situation. However, there is also a possible disadvantage. In a
     heterogeneous distributed system the mapping could lead to the loss
     of information or to an error. For example, the suggested mapping
     associates a float with a REAL. On a CRAY a REAL is a 64-bit floating
     point number, while on a SUN a float is a 32-bit floating point.
     Transfering a REAL on a CRAY to a float on a SUN causes loss of
     precision and potentially could result in a translation error
     because the value on the CRAY cannot be represented by a 32-bit
     floating point. This problem also occurs on a single machine if
     a REAL maps to, say, an IEEE 64 and a float to an IEEE 32 (which
     doesn't seem likely).


  o  Adding a new language binding to the MPI standard requires the definition
     of new MPI_<type> values and the mapping between these new values and
     the existing MPI_<type> values. Introduction of MPI implementations with
     support for the new language bindings can be accomplished gradually, since
     they will support the old MPI_<types>, eventhough the old implementations
     do not support the new MPI_<types>. As vendors upgrade their MPI
     implementations to conform to the new language binding standards, the
     new MPI_<type>s can be used more and more until all useful implementations
     support them. Thus, the proposal supports the gradual introduction of
     new language bindings without requiring all implementations to immediately
     support them.
From owner-mpi-lang@CS.UTK.EDU Tue Jun 15 16:12:27 1993
Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib)
	id AA08770; Tue, 15 Jun 93 16:12:27 -0400
Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA04027; Tue, 15 Jun 93 16:12:39 -0400
X-Resent-To: mpi-lang@CS.UTK.EDU ; Tue, 15 Jun 1993 16:12:36 EDT
Errors-To: owner-mpi-lang@CS.UTK.EDU
Received: from antares.mcs.anl.gov by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK)
	id AA03883; Tue, 15 Jun 93 16:12:09 -0400
Received: from donner.mcs.anl.gov by antares.mcs.anl.gov with SMTP id AA03914
  (5.65c/IDA-1.4.4 for <mpi-lang@cs.utk.edu>); Tue, 15 Jun 1993 15:11:50 -0500
Message-Id: <199306152011.AA03914@antares.mcs.anl.gov>
To: als@cs.umd.edu, snir@watson.ibm.com, otto@cse.ogi.edu
Subject: language binding draft
Cc: mpi-lang@cs.utk.edu, gropp@mcs.anl.gov
Date: Tue, 15 Jun 1993 15:11:46 -0500
From: Rusty Lusk <lusk@mcs.anl.gov>

Here is the first draft of part of the language binding chapter.  I apologize
for the surrounding empty pages.  I haven't put together an economical
harness yet. 

Marc, is this the sort of thing you had in mind?  I am inexperienced in this
area.  Please let me know of any omissions besides the obvious one that it is
incomplete.  I will attempt to address them in the next version.  Also, I have
not taken notes on all the places where we have said, while discussing
something in one of the other committees, "That should be left to the language
binding committee."

Alan, do you feel comfortable presenting this at the next meeting?  I will be
unable to be there.

I am leaving for Europe on Thursday, so any comments must arrive soon.

Steve, if you don't hear from me again before Thursday evening, this is the
language binding chapter for the next meeting.  I will send you the LaTex
separately.

---------------------------------------------------------------------------
%!PS-Adobe-2.0
%%Creator: dvips 5.516 Copyright 1986, 1993 Radical Eye Software
%%Title: all.dvi
%%CreationDate: Tue Jun 15 14:58:35 1993
%%Pages: 19
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSCommandLine: dvips all
%DVIPSSource:  TeX output 1993.06.15:1458
%%BeginProcSet: tex.pro
/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get
round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0
0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn
begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X
array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo
setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx
FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{
pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}
B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup
length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B
/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp
0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2
index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff
ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{
ch-image}imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn
/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1
sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D
}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0
moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
.99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage
userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for
65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0
0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7
getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false}
ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley
false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley
scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave
transform round exch round exch itransform moveto rulex 0 rlineto 0
ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta
0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{
3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p
-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{
3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end
%%EndProcSet
TeXDict begin 40258437 52099154 1000 300 300
(/tmp_mnt/Net/sparky/sparky5/lusk/mpi/june/all.dvi) @start
/Fa 31 119 df<FFFCFFFCFFFCFFFC0E047F8C13>45 D<387CFEFEFE7C3807077C8610>
I<00180000780001F800FFF800FFF80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8
0001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C9F1C>49
D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F80003
F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C0180380
180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007
FFC00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C000
1F8001FE0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF
00FEFF00FC7E01FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E0
0003E00007E0000FE0001FE0001FE00037E00077E000E7E001C7E00187E00307E00707E0
0E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E0
0007E00007E00007E000FFFE00FFFE17207E9F1C>I<1000201E01E01FFFC01FFF801FFF
001FFE001FF8001BC00018000018000018000018000019FC001FFF001E0FC01807E01803
E00003F00003F00003F80003F83803F87C03F8FE03F8FE03F8FC03F0FC03F07007E03007
C01C1F800FFF0003F80015207D9F1C>I<FFFFFF8000FFFFFFE00007F001F80007F000FC
0007F0007E0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
07F0007E0007F000FE0007F000FC0007F003F80007FFFFF00007FFFFF00007F001FC0007
F0007E0007F0003F0007F0003F8007F0001F8007F0001FC007F0001FC007F0001FC007F0
001FC007F0001FC007F0001FC007F0003F8007F0003F8007F0007F0007F001FE00FFFFFF
F800FFFFFFC00022227EA128>66 D<0003FE0080001FFF818000FF01E38001F8003F8003
E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E00
0001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
0000FE00000000FE000000007E000000007E000001807F000001803F000001803F000003
801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC000
0003FE000021227DA128>I<FFFFFFF8FFFFFFF807F001F807F0007807F0003807F00018
07F0001C07F0001C07F0000C07F0000C07F0180C07F0180C07F0180007F0180007F03800
07F0780007FFF80007FFF80007F0780007F0380007F0180007F0180007F0180007F01800
07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFFE000
FFFFE0001E227EA123>70 D<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E
07F0007E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC
07F001FC07F007F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F00000
07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F00000FFFF8000
FFFF800020227EA126>80 D<FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC
0007F0007E0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007F00
07F0007E0007F000FC0007F001F80007F007F00007FFFFC00007FFFF800007F00FE00007
F007F00007F003F80007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F0
01FC0007F001FC0007F001FC0007F001FC0607F000FE0607F000FF0CFFFF803FF8FFFF80
0FF027227EA12A>82 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001
F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF8
7F07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000001F0000001F000000
1F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0FE0001F3FF800
1FF07C001F801E001F001F001F000F801F000F801F000FC01F000FC01F000FC01F000FC0
1F000FC01F000FC01F000FC01F000FC01F000F801F001F801F801F001FC03E001EE07C00
1C3FF800180FC0001A237EA21F>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E0
7C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F0060
0FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E00
00003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E00
07FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00
FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE00
0F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00
F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00
181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F
87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F
80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F
80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF
3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000
3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E
78003C7C007C3F01F80FFFE001FF0018217E951C>I<FF000000FF0000001F0000001F00
00001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F00
00001F07E0001F1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E001F003E00FFE1FFC0FFE1FFC01A237EA21F>I<1C003E007F007F007F003E
001C000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I<FF00FF00
1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
1F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B237EA210>
108 D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F801F001F801F
801F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07
E000FF1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F00
3E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
3E001F003E00FFE1FFC0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F8
7C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C
3E00F81F01F00F83E007FFC000FE0017167E951C>I<FF0FE000FF3FF8001FF07C001F80
3E001F001F001F001F801F001F801F000FC01F000FC01F000FC01F000FC01F000FC01F00
0FC01F000FC01F000FC01F001F801F001F801F803F001FC03E001FE0FC001F3FF8001F0F
C0001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F000000FFE0
0000FFE000001A207E951F>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00
001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00001F00
00FFF000FFF00013167E9517>114 D<0FF3003FFF00781F00600700E00300E00300F003
00FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F007
00FC0E00EFFC00C7F00011167E9516>I<01800001800001800001800003800003800007
80000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F
80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003
FE0000F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E001F003E001F003E00
1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00
1F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F>I<FF
E01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001
F0300001F0300000F8600000F86000007CC000007CC000007FC000003F8000003F800000
1F0000001F0000000E0000000E00001B167F951E>I E /Fb 1 16
df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF0
03C010127D9317>15 D E /Fc 51 123 df<007000F001E003C007800F001E001C003800
38007000700070007000E000E000E000E000E000E000E000E00070007000700070003800
38001C001E000F00078003C001F000F000700C24799F18>40 D<6000F00078003C001E00
0F000780038001C001C000E000E000E000E00070007000700070007000700070007000E0
00E000E000E001C001C0038007800F001E003C007800F00060000C247C9F18>I<01C000
01C00001C00001C000C1C180F1C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00
F9CF80F1C780C1C18001C00001C00001C00001C00011147D9718>I<1C3E7E7F3F1F070E
1E7CF860080C788518>44 D<3078FCFC78300606778518>46 D<00700000F80000F80000
D80000D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007
07000707000707000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F
07F0151C7F9B18>65 D<FFFC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00
E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00
701C00701C00F01C00E01C03E0FFFFC0FFFF80FFFE00141C7F9B18>I<00F8E003FEE007
FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E0
0000E00000E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003
FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E0
1C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E0
1C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>I<FFFFF0FFFF
F0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E001C0E001FFE001FFE
001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C00381C00381C0038FFFF
F8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C
00001C00001C1C001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C1C001C00001C
00001C00001C00001C00001C00001C0000FFC000FFC000FFC000131C7E9B18>I<01F1C0
03FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000
E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC0
0FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01
C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7F
FF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C0007FFF00FFFF807FFF00111C7D9B18>I<7FE000FFE0007FE0000E00000E00000E0000
0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000
0E00000E00000E00700E00700E00700E00700E00707FFFF0FFFFF07FFFF0141C7F9B18>
76 D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0398CE0
39DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E03800E03800E0
3800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C01D81
C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39
C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C
7F9B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E0
0380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F0
0780700700780F007FFF003FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C0
1C01E01C00E01C00701C00701C00701C00701C00701C00E01C01E01C03C01FFFC01FFF80
1FFE001C00001C00001C00001C00001C00001C00001C00001C0000FF8000FF8000FF8000
141C7F9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03
C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C03
801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>82 D<03F3801FFF803FFF80
7C0F80700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00
000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00
E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070000070
000070000070000070000070000070000070000070000070000070000070000070000070
0000700000700000700000700007FF0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF
83FE1C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
00701C00701C00701C00701C00701C00701C00701C00700E00E00F01E00783C003FF8001
FF00007C00171C809B18>I<FF07F8FF07F8FF07F81C01C01E03C00E03800F0780070700
070700038E00038E0001DC0001DC0001DC0000F80000F800007000007000007000007000
00700000700000700000700000700001FC0003FE0001FC00151C7F9B18>89
D<FFF8FFF8FFF8E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000FFF8FFF8FF
F80D24779F18>91 D<FFF8FFF8FFF8003800380038003800380038003800380038003800
380038003800380038003800380038003800380038003800380038003800380038003800
380038FFF8FFF8FFF80D247F9F18>93 D<1FE0003FF8007FFC00781E00300E0000070000
070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01F
FBF007E1F014147D9318>97 D<7E0000FE00007E00000E00000E00000E00000E00000E00
000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00
380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007
FF001FFF803E0780380300700000700000E00000E00000E00000E00000E00000E0000070
00007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F80001F80
00038000038000038000038000038003E3800FFB801FFF803C1F80380F80700780700380
E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFFF00FFBF8
03E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380E001C0E001
C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01FFF8007FF0001FC001214
7D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0FFFFC0FF
FFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E30
1C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E000380000
1C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F0
1FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00
000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03
800007C00007C00007C0000380000000000000000000000000007FC000FFC0007FC00001
C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
C00001C000FFFF00FFFF80FFFF00111D7C9C18>I<FE0000FE0000FE00000E00000E0000
0E00000E00000E00000E3FF00E7FF00E3FF00E07800E0F000E1E000E3C000E78000EF000
0FF8000FFC000F9C000F0E000E0F000E07000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F
9B18>107 D<7FE000FFE0007FE00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E000
00E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E000FFFBF8007FFFF8
001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C
001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F00191481
9318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00
E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01
F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F0
01E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF80
7FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F0070
0F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E0000
0E00007FC000FFE0007FC000151E809318>I<01E38007FB801FFF803E1F80380F807007
80700780E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF
800FFB8003E380000380000380000380000380000380000380000380003FF8003FF8003F
F8151E7E9318>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C00003800003
80000380000380000380000380000380000380000380007FFE00FFFF007FFE0015147F93
18>I<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00
001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<0180
000380000380000380000380007FFFC0FFFFC0FFFFC00380000380000380000380000380
000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80003E
0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00E00E
00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC17148093
18>I<7F8FF0FF8FF87F8FF01E03C00E03800E03800E0380070700070700070700038E00
038E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I<FF8F
F8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01CF9C01CF9C01CD9C01CD9
C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9FF07F
8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E0003
8E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01C0
0E03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC00
00DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F8000
3F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00001E
00003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0FFFF
F014147F9318>I E /Fd 18 86 df<3078F8787005057C840D>46
D<01803001FFE003FFC003FF0003FC00020000020000020000040000040000040000047C
000587000603800C01800801C00001C00001E00001E00001E00001E07003C0F803C0F003
C0E00380800780400700400E00201C0018700007C000141F7D9D17>53
D<0000100000001800000038000000380000007800000078000000FC000001BC0000013C
0000033C0000023C0000063C0000043E0000081E0000081E0000101E0000101E0000201E
0000200F0000400F0000400F0000FFFF0000800F0001000F800100078002000780020007
8004000780040007800C0007C03E0007C0FF807FFC1E207E9F22>65
D<07FFFF00007C01C0003C01E0003C00F0007800F8007800F8007800F8007800F8007800
F8007800F000F001F000F001E000F003C000F00F8000FFFE0000F00F0001E007C001E003
C001E003E001E001E001E001E001E001E003C001E003C003E003C003E003C003C003C007
C003C00F8007800F0007803E00FFFFF0001D1F7E9E20>I<0001F808000E061800380138
007000F801E0007803C0007007800030078000300F0000301F0000301E0000303E000020
3C0000007C0000007C0000007C0000007C000000F8000000F8000000F8000000F8000000
F80000007800004078000080780000803C0000803C0001001C0002000E00020006000C00
0300100001C0E000003F00001D217B9F21>I<07FFFF00007C01E0003C00F0003C007800
78003C0078003C0078001E0078001E0078001E0078001F00F0001F00F0001F00F0001F00
F0001F00F0001F00F0001F01E0001E01E0003E01E0003E01E0003E01E0003C01E0007C03
C0007803C000F003C000F003C001E003C003C003C0078007800F0007803C00FFFFE00020
1F7E9E23>I<07FFFFF8007C0078003C0038003C00180078001800780008007800080078
0008007800080078080800F0100000F0100000F0100000F0300000FFF00000F0700001E0
200001E0200001E0200001E0200001E0000801E0001003C0001003C0001003C0002003C0
002003C0006003C000C0078001C0078007C0FFFFFF801D1F7E9E1F>I<07FFFFF8007C00
78003C0038003C001800780018007800080078000800780008007800080078000800F010
0000F0100000F0100000F0300000F0700000FFF00001E0600001E0200001E0200001E020
0001E0200001E0000003C0000003C0000003C0000003C0000003C0000003C00000078000
0007C00000FFFE00001D1F7E9E1E>I<0001FC04000F030C003C009C0070007C00E0003C
01C0003803800018078000180F0000181F0000181E0000183E0000103C0000007C000000
7C0000007C0000007C000000F8000000F8000000F8007FFCF80003E0780001E0780001E0
780003C0780003C03C0003C03C0003C01C0003C00E0007C007000B800380118001E06080
003F80001E217B9F24>I<07FFC7FFC0007C00F800003C007800003C007800007800F000
007800F000007800F000007800F000007800F000007800F00000F001E00000F001E00000
F001E00000F001E00000FFFFE00000F001E00001E003C00001E003C00001E003C00001E0
03C00001E003C00001E003C00003C007800003C007800003C007800003C007800003C007
800003C007800007800F000007C00F8000FFF8FFF800221F7E9E22>I<07FFE0007C0000
3C00003C0000780000780000780000780000780000780000F00000F00000F00000F00000
F00000F00001E00001E00001E00001E00001E00001E00003C00003C00003C00003C00003
C00003C00007800007C000FFFC00131F7F9E10>I<07FFF000007E0000003C0000003C00
0000780000007800000078000000780000007800000078000000F0000000F0000000F000
0000F0000000F0000000F0000001E0000001E0000001E0000001E0000001E0008001E001
0003C0010003C0010003C0030003C0020003C0060003C0060007801E0007807C00FFFFFC
00191F7E9E1C>76 D<07FC01FFC0003E003E00003E001800003E001800004F001000004F
001000004780100000478010000043C010000043C010000083C020000081E020000081E0
20000080F020000080F020000080782000010078400001007C400001003C400001003C40
0001001E400001001E400002000F800002000F800002000F800002000780000200078000
060003800006000300000F00010000FFE0010000221F7E9E22>78
D<07FFFF00007C03C0003C01E0003C00F0007800F0007800F8007800F8007800F8007800
F8007800F000F001F000F001E000F003C000F0078000F00F0000FFF80001E0000001E000
0001E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000003C000
0003C000000780000007C00000FFFC00001D1F7E9E1F>80 D<07FFFC00007C0700003C03
C0003C01E0007801E0007801F0007801F0007801F0007801F0007801E000F003E000F003
C000F0078000F00F0000F03C0000FFF00001E0300001E0380001E01C0001E01C0001E01C
0001E01E0003C03E0003C03E0003C03E0003C03E0003C03E0003C03E0207803E0407C01F
04FFFC0F18000003E01F207E9E21>82 D<003F040060CC01803C03801C03001C07001806
00080E00080E00080E00080E00000F00000F80000FE00007FE0003FF8001FFC0007FE000
07E00001E00000E00000F00000F04000E04000E04000E04000E06000C0600180E00380F8
0300C60C0081F80016217D9F19>I<3FFFFFF03C0780F03007803060078030400F001040
0F0010C00F0010800F0010800F0010800F0010001E0000001E0000001E0000001E000000
1E0000001E0000003C0000003C0000003C0000003C0000003C0000003C00000078000000
7800000078000000780000007800000078000000F0000001F800007FFFE0001C1F7A9E21
>I<FFFC3FF80F8007C007800300078003000F0002000F0002000F0002000F0002000F00
02000F0002001E0004001E0004001E0004001E0004001E0004001E0004003C0008003C00
08003C0008003C0008003C0008003C000800380010003800100038001000380020003C00
40001C0040001C0080000E0100000706000001F800001D20799E22>I
E /Fe 31 122 df<60F0F06004047C830C>46 D<0FE03038401CE00EF00EF00EF00E000C
001C0030006000C000800180010001000100010001000100000000000000000000000300
0780078003000F1D7E9C14>63 D<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F
001E0F001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F
000F0F000F0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D>66
D<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000
807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F00000
00F0000000700000807800008078000080380000801C0001001C0001000E000200070004
000180080000E03000001FC000191E7E9C1E>I<FFFFF80F00780F00180F00080F00080F
000C0F00040F00040F02040F02000F02000F02000F06000FFE000F06000F02000F02000F
02000F02000F00000F00000F00000F00000F00000F00000F00000F8000FFF800161C7E9B
1B>70 D<FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00
0F000F000F000F000F000F000F000F000F000F000F00FFF00C1C7F9B0F>73
D<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003
C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001
E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C
000380380000E0E000003F80001B1E7E9C20>79 D<7FFFFFC0700F01C0600F00C0400F00
40400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00
00000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>84
D<FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F0020
0780278020078027802003C027804003C043C04003C043C04003E043C04001E081E08001
E081E08001E081E08000F100F10000F100F10000F100F100007900FA00007A007A00007A
007A00003E007C00003C003C00003C003C00003C003C0000180018000018001800001800
1800281D7F9B2B>87 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C
00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C
001D86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00
C01C01C01C01801E030019060010F800131D7F9C17>I<07E00C301878307870306000E0
00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700
00070000070000070000070000070000070000070000070000070003E7000C1700180F00
300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700
180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000
E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E
000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E
000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C
00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF
803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>I<FC
00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
03801C03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000
00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C
001C001C00FF80091D7F9C0C>I<FC001C001C001C001C001C001C001C001C001C001C00
1C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80
091D7F9C0C>108 D<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01
C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C0
1C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C
001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C0018060030030070
0380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E
1C0003F00012127F9115>I<FC7C001D86001E03001C01801C01C01C00C01C00E01C00E0
1C00E01C00E01C00E01C00E01C01C01C01C01C01801E03001D06001CF8001C00001C0000
1C00001C00001C00001C00001C0000FF8000131A7F9117>I<FCE01D301E781E781C301C
001C001C001C001C001C001C001C001C001C001C001C00FFC00D127F9110>114
D<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F
C00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C00
1C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC1F801C03
801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03
801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E
020007040007040007040003880003880003D80001D00001D00000E00000E00000E00000
400013127F9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82
000E1182000711C4000711C4000720C40003A0E80003A0E80003C0680001C0700001C070
0001803000008020001B127F911E>I<7F8FF00F03800F030007020003840001C80001D8
0000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512
809116>I<FF07E03C03801C01001C01000E02000E020007040007040007040003880003
880003D80001D00001D00000E00000E00000E000004000004000008000008000F08000F1
0000F300006600003C0000131A7F9116>I E /Ff 8 118 df<78FCFCFCFC780000000000
0078FCFCFCFC7806127D910D>58 D<FFFFF800FFFFFF000FC01FC00FC007E00FC001F00F
C001F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E0F
C0007E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80F
C001F00FC007E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>68 D<03FC000E0E001C1F00
3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C0180
1C03000E0E0003F80011127E9115>99 D<1E003F003F003F003F001E0000000000000000
0000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F
00FFE0FFE00B1E7F9D0E>105 D<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00F81F
00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F91
1B>110 D<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F8
00F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<1FD830786018
E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>
115 D<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F01F80F01F80786FF01F8FF18127F911B>117
D E /Fg 32 122 df<0001FF0000001FFFC000007F80F00000FC00F80001F801F80003F8
03FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F000
000007F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC
0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00
07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007
F001FC0007F001FC0007F001FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF
1FFFC0222A7FA926>12 D<1C003E007F00FF80FF80FF807F003E001C0009097B8813>46
D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
007FFFFE7FFFFE7FFFFE17277BA622>49 D<00FF800003FFF0000FFFFC001F03FE003800
FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE00000
3FE000003FC000003FC000007F8000007F000000FE000000FC000001F8000003F0000003
E00000078000000F0000001E0000003C00E0007000E000E000E001C001C0038001C00700
01C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>
I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F807F
801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F00000FFC0
0000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE000003F
E03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F01FE
001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E00
0000FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E00
00707E0000E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E00
38007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE00
0000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA6
22>I<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000F
FE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F
80FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C
001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F
01FE000FFFF80003FFF00000FF80001B277DA622>I<380000003E0000003FFFFFF03FFF
FFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E000
3800E0007000E000E0000000E0000001C000000380000007800000078000000F0000000F
0000001F0000001F0000003F0000003E0000003E0000007E0000007E0000007E0000007E
000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007C
0000003800001C297CA822>55 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFC00003F8001F
F00003F8000FF80003F80007FC0003F80003FC0003F80003FC0003F80003FE0003F80001
FE0003F80001FE0003F80001FE0003F80003FE0003F80003FC0003F80003FC0003F80007
F80003F8000FF00003F8001FE00003F800FFC00003FFFFFE000003FFFFFFE00003F80007
F00003F80003FC0003F80001FE0003F80001FE0003F80000FF0003F80000FF0003F80000
FF8003F80000FF8003F80000FF8003F80000FF8003F80000FF8003F80000FF8003F80000
FF0003F80001FF0003F80003FE0003F80007FC0003F8001FF800FFFFFFFFF000FFFFFFFF
C000FFFFFFFE000029297DA831>66 D<00003FF001800003FFFE0380000FFFFF8780003F
F007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0
000007801FE0000007803FC0000007803FC0000003807FC0000003807F80000003807F80
00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80
00000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007FC0
000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000070007F0
00000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003
FFFF000000003FF8000029297CA832>I<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003
FC001FF80003FC0007FC0003FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003
FC00001FC003FC00001FE003FC00001FE003FC00000FF003FC00000FF003FC00000FF003
FC00000FF003FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803
FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF003
FC00000FF003FC00000FF003FC00001FE003FC00001FE003FC00001FC003FC00003FC003
FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC001FF800FFFFFFFFE000FF
FFFFFF8000FFFFFFFC00002D297DA835>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC00
3FC003FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000
E003FC0000F003FC03807003FC03807003FC03807003FC03800003FC07800003FC078000
03FC1F800003FFFF800003FFFF800003FFFF800003FC1F800003FC07800003FC07800003
FC03800003FC03800003FC03800003FC03800003FC00000003FC00000003FC00000003FC
00000003FC00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC
0000FFFFFC000024297DA82B>70 D<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
01FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A>
73 D<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF8000038003FF8000038003BFC0
000380039FE0000380039FF0000380038FF80003800387F80003800383FC0003800381FE
0003800381FF0003800380FF80038003807FC0038003803FC0038003801FE0038003800F
F0038003800FF80380038007FC0380038003FC0380038001FE0380038000FF0380038000
FF83800380007FC3800380003FE3800380001FE3800380000FF38003800007FB80038000
07FF8003800003FF8003800001FF8003800000FF80038000007F80038000007F80038000
003F80038000001F80038000000F80FFFE00000780FFFE00000380FFFE000003802F297D
A836>78 D<007F806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001
E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0
003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF000007FF000000F
F8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001F0F80003
F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>83
D<7FFFFFFFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003
C078003FC003C070003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000
E0E0003FC000E0E0003FC000E0E0003FC000E000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC000
0000003FC00000007FFFFFE000007FFFFFE000007FFFFFE0002B287EA730>I<01FF8000
07FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F80
00003F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80
FE003F80FE003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC1E1B7E9A
21>97 D<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E00
7F0000007F000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000
7F0000007F0000007F8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00
001FE0001A1B7E9A1F>99 D<00003FF80000003FF80000003FF800000003F800000003F8
00000003F800000003F800000003F800000003F800000003F800000003F800000003F800
000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000F
C007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003F800FF00
03F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003
F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF
80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F801F801F800F
803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF0000
00FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E003
8003F81F0000FFFE00001FF0001B1B7E9A20>I<00FF81F003FFE7F80FC1FE7C1F80FC7C
1F007C383F007E107F007F007F007F007F007F007F007F007F007F007F007F003F007E00
1F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C0000003E000000
3FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8
F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000
1E287E9A22>103 D<07000F801FC03FE03FE03FE01FC00F800700000000000000000000
0000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
E00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>105
D<FFC07F800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F00
0FD801FF003F800FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800F
E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
01FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001
FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFF
C3FFF8FFFE1FFFC3FFF8351B7D9A3A>109 D<FFC07F0000FFC1FFC000FFC787E0000FCE
03F0000FD803F0000FD803F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80
FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F07E000FC01F801F800F
C03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007
F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800F
C00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE
07E0000FF803F0000FF001F8000FE000FC000FE000FE000FE000FF000FE0007F000FE000
7F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F
800FE0007F000FE000FF000FE000FF000FE000FE000FE001FC000FF001F8000FF803F000
0FFE0FE0000FE7FF80000FE1FC00000FE00000000FE00000000FE00000000FE00000000F
E00000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE000000FFFE
00000021277E9A26>I<FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F0FF03E0FF01C0FE0
000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0
000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114
D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF
803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00
70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000
F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007
F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807
F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>I<FFE03FF800FF
E03FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE007F80007E007F8
0007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03
FF80FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C0
0001FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000
003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F0000000
07F000000003E000000003E000000001C00000211B7F9A24>I<FFFE03FF80FFFE03FF80
FFFE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001
FC01C00000FE03800000FE038000007F070000007F070000007F8F0000003F8E0000003F
DE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F000000007F0
00000003E000000003E000000001C000000001C000000003800000000380000038078000
007C07000000FE0F000000FE0E000000FE1E000000FE3C0000007C780000003FE0000000
0FC000000021277F9A24>121 D E /Fh 15 117 df<00001E000000003E00000000FE00
000003FE0000003FFE0000FFFFFE0000FFFFFE0000FFFFFE0000FFCFFE0000000FFE0000
000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00007FFFFFFFC07F
FFFFFFC07FFFFFFFC07FFFFFFFC0223879B731>49 D<0007FE0000007FFFE00001FFFFF8
0003FFFFFE0007F01FFF000F8007FF801F0001FFC03E0000FFE07F8000FFF07FC0007FF0
FFE0007FF8FFF0003FF8FFF0003FFCFFF0003FFCFFF0003FFCFFF0003FFC7FE0003FFC3F
C0003FFC1F80003FFC0000003FFC0000003FF80000007FF80000007FF00000007FF00000
00FFE0000000FFC0000001FF80000001FF00000003FE00000007FC00000007F80000000F
F00000001FC00000003F800000007F00000000FC00000001F800000001F0003C0003E000
3C0007C0003C000F000078001E000078003C00007800780000F800F00000F801FFFFFFF8
03FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF03FFFFFFFF07FFFFFFFF0FFFFFFFFF0FF
FFFFFFE0FFFFFFFFE0FFFFFFFFE026387BB731>I<0003FF8000001FFFF000007FFFFE00
00FE03FF0001F000FF8003C000FFC00780007FE00FF0007FF00FF8007FF01FFC007FF81F
FE007FF81FFE007FF81FFE007FF81FFE007FF81FFE007FF80FFC007FF007F8007FF003F0
007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007FC0000001F
F000000FFFC000000FFF8000000FFFF800000003FE00000000FF800000007FE00000003F
F00000003FF80000003FFC0000001FFC0000001FFE0000001FFE0200001FFF1FC0001FFF
3FE0001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8001FFFFFF8001FFEFFF8001FFEFF
F0001FFE7FF0003FFC7FE0003FFC3FC0003FF81F80007FF01FE000FFE007FC03FFC003FF
FFFF0001FFFFFE00003FFFF0000007FF800028397CB731>I<00000007C0000000000FC0
000000000FC0000000001FC0000000003FC0000000007FC000000000FFC000000000FFC0
00000001FFC000000003FFC000000007FFC00000000FFFC00000000FFFC00000001EFFC0
0000003CFFC00000007CFFC0000000F8FFC0000000F0FFC0000001E0FFC0000003C0FFC0
000007C0FFC000000F80FFC000000F00FFC000001E00FFC000003C00FFC000007C00FFC0
0000F800FFC00000F000FFC00001E000FFC00003C000FFC00007C000FFC0000F8000FFC0
000F0000FFC0001E0000FFC0003C0000FFC0007C0000FFC000F80000FFC000FFFFFFFFFF
C0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0000001FFC000000001FFC000000001FFC0
00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0
00000001FFC0000007FFFFFFC00007FFFFFFC00007FFFFFFC00007FFFFFFC02A377DB631
>I<04000000C00F800007C00FF8007FC00FFFFFFF800FFFFFFF000FFFFFFE000FFFFFFC
000FFFFFF8000FFFFFF0000FFFFFE0000FFFFF80000FFFFE00000FFFF800000F80000000
0F800000000F800000000F800000000F800000000F800000000F800000000F800000000F
81FF00000F8FFFE0000FBFFFF8000FFE03FE000FF000FF000FC000FF800F80007FC00F00
007FE00700007FF00000003FF00000003FF80000003FF80000003FF80000003FFC000000
3FFC0600003FFC1F80003FFC3FC0003FFC7FE0003FFCFFE0003FFCFFF0003FFCFFF0003F
FCFFF0003FF8FFE0003FF8FFE0003FF87FC0007FF07F00007FF03C00007FE03E0000FFC0
1F0000FF800FC003FF0007F00FFE0003FFFFFC0001FFFFF000007FFFC000000FFC000026
397BB731>I<00000FF80000007FFF000003FFFF80000FFC07C0001FE001E0003FC001F0
007F0007F000FF000FF001FE001FF803FC003FF807FC003FF80FFC003FF80FF8003FF81F
F8001FF01FF8000FE03FF80007C03FF00000003FF00000007FF00000007FF00000007FF0
0000007FF07FF000FFF0FFFE00FFF1F7FF00FFF3807F80FFF6003FE0FFFE001FF0FFFC00
1FF0FFFC000FF8FFF8000FFCFFF8000FFCFFF8000FFEFFF8000FFEFFF0000FFEFFF0000F
FFFFF0000FFFFFF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF7FF0000FFF
3FF0000FFF3FF0000FFE3FF0000FFE1FF0000FFE1FF8000FFC0FF8000FFC0FF8001FF807
FC001FF003FC001FF001FE003FE000FF80FFC0007FFFFF00001FFFFE000007FFF8000000
FFC00028397CB731>I<1E00000000001F00000000001FF0000000001FFFFFFFFFC01FFF
FFFFFFC01FFFFFFFFFC03FFFFFFFFFC03FFFFFFFFF803FFFFFFFFF003FFFFFFFFE003FFF
FFFFFC003FFFFFFFF8003FFFFFFFF0007FFFFFFFF0007C000007E0007C00000FC0007800
001F80007800001F00007800003E0000F000007E0000F00000FC0000F00001F800000000
03F00000000003E00000000007E0000000000FC0000000000F80000000001F8000000000
3F80000000003F00000000007F00000000007F0000000000FF0000000000FE0000000001
FE0000000001FE0000000003FE0000000003FE0000000003FE0000000007FC0000000007
FC0000000007FC000000000FFC000000000FFC000000000FFC000000000FFC000000000F
FC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001F
FC000000001FFC000000001FFC000000001FFC000000000FF80000000007F00000000003
E00000002A3B7BB931>I<0001FF8000000FFFF800003FFFFE00007F00FF0000F8003F80
01F0000FC003E0000FE007C00007F007C00007F00FC00003F80FC00003F81FC00003F81F
C00003F81FE00003F81FF00003F81FF80003F81FFC0007F01FFF0007F01FFFC007E00FFF
F00FE00FFFFC1FC007FFFE3F8007FFFFFF0003FFFFFC0001FFFFF80000FFFFFE00007FFF
FF00003FFFFF80003FFFFFE000FFFFFFF001FDFFFFF007F07FFFF80FE01FFFFC1FC007FF
FC3F8001FFFE3F8000FFFE7F00003FFF7F00000FFFFE000003FFFE000001FFFE000000FF
FE000000FFFE0000007FFE0000007FFE0000007EFE0000007E7F0000007E7F000000FC3F
800000FC3FC00001F81FE00003F00FF00007E007FE007FC003FFFFFF8000FFFFFE00003F
FFF8000003FF800028397CB731>I<0000001FFF000030000001FFFFE000F000000FFFFF
FC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF000003FFF000
1FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FFC00000
001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000000007F01F
FE0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC000000
0001F07FFC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FF
F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000
000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FF
F8000000000000FFF80000000000007FF80000000000007FF80000000000007FF8000000
0000007FFC0000000000F03FFC0000000000F03FFC0000000000F03FFC0000000000F01F
FE0000000000F01FFE0000000001E00FFE0000000001E00FFF0000000001E007FF000000
0003C003FF8000000003C001FFC0000000078000FFE00000000F00007FF00000001F0000
3FF80000003E00001FFC0000007C00000FFF000001F8000003FFE00007F0000001FFFE00
3FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF000000000001FFF0000003C
3D7BBB47>67 D<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000FF801FF00
001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003FF0
0007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF0
00000FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0
003FE0003FF0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF0
00FFC0003FF000FFC0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFF
F007FFFE0FFFF001FFFC07FFF0003FE000FFF02C267DA530>97 D<0001FFC000000FFFF8
00003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF8000FF01FF00007F0
3FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE00003FCFF
FFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007FE0
0000007FE00000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF800
007807FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE0
0026267DA52D>101 D<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF
0000000007FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF
007FC00003FF01FFF80003FF07FFFC0003FF0F03FE0003FF1C01FF0003FF3001FF8003FF
6000FF8003FFE000FFC003FFC000FFC003FF8000FFC003FF8000FFC003FF8000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFF
FC3FFFFFFFFFFC3FFFFF303C7CBB37>104 D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC
00FFFFFE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001F
F803FF00001FFC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007
FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007
FF03FF000007FF03FF000007FF03FF000007FE03FF000007FE03FF00000FFE03FF00000F
FC03FF00000FFC03FF00001FF803FF00001FF803FF00003FF003FF80003FE003FFC0007F
C003FFF001FF8003FFFC07FF0003FF3FFFFC0003FF0FFFF00003FF01FF000003FF000000
0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
0003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
00FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC00000030377DA537>112
D<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FEE0FFE0
03FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003
FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF
00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00
000003FF00000003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE00
00FFFFFE0000FFFFFE000023267DA529>114 D<00078000000780000007800000078000
00078000000F8000000F8000000F8000000F8000001F8000001F8000003F8000003F8000
007F800000FF800001FF800007FF80001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF8000
01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000
01FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF8000
01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C01FF803C00FF8078
00FFC078007FC070003FE0E0001FFFC00007FF800001FF001E377EB626>116
D E /Fi 1 98 df<001800001800001800003C00003C00004E00004E00004E0000870000
87000187800103800103800201C00201C003FFC00400E00400E00800700800701800703C
0078FE01FF18177F961C>97 D E /Fj 1 59 df<70F8F8F87005057C840D>58
D E /Fk 67 123 df<003F0000E0C001C0C00381E00701E00701E0070000070000070000
070000070000070000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0
0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E07FC3FE172080
9F19>12 D<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E00700E007
00E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E007
00E00700E00700E00700E00700E00700E00700E00700E00700E07FE7FE1720809F19>I<
001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F00070070000007
007000000700700000070070000007007000000700700000FFFFFFFF0007007007000700
700700070070070007007007000700700700070070070007007007000700700700070070
070007007007000700700700070070070007007007000700700700070070070007007007
00070070070007007007007FE3FE3FF02420809F26>I<7038F87CFC7EFC7E743A040204
0204020804080410081008201040200F0E7E9F17>34 D<0020004000800100020006000C
000C00180018003000300030007000600060006000E000E000E000E000E000E000E000E0
00E000E000E000E0006000600060007000300030003000180018000C000C000600020001
000080004000200B2E7DA112>40 D<800040002000100008000C00060006000300030001
800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000
E000C000C000C001C001800180018003000300060006000C00080010002000400080000B
2E7DA112>I<000600000006000000060000000600000006000000060000000600000006
000000060000000600000006000000060000000600000006000000060000FFFFFFF0FFFF
FFF000060000000600000006000000060000000600000006000000060000000600000006
00000006000000060000000600000006000000060000000600001C207D9A23>43
D<70F8FCFC74040404080810102040060E7C840D>I<FFC0FFC00A027F8A0F>I<70F8F8F8
7005057C840D>I<03F0000E1C001C0E00180600380700700380700380700380700380F0
03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F0
03C07003807003807003807807803807001806001C0E000E1C0003F000121F7E9D17>48
D<018003800F80F380038003800380038003800380038003800380038003800380038003
80038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C
1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000
0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018
00401000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80
780780780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00
000F000007800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E00
1C3C0003F000121F7E9D17>I<000600000600000E00000E00001E00002E00002E00004E
00008E00008E00010E00020E00020E00040E00080E00080E00100E00200E00200E00400E
00C00E00FFFFF0000E00000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17
>I<1803001FFE001FFC001FF8001FE00010000010000010000010000010000010000011
F000161C00180E001007001007800003800003800003C00003C00003C07003C0F003C0F0
03C0E00380400380400700200600100E000C380003E000121F7E9D17>I<007C00018200
0701000E03800C07801C0780380300380000780000700000700000F1F000F21C00F40600
F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C0700380380380
3807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF804001
0080020080020080040000080000080000100000200000200000400000400000C00000C0
0001C0000180000380000380000380000380000780000780000780000780000780000780
00078000030000121F7D9D17>I<03F0000C0C0010060030030020018060018060018060
01807001807803003E03003F06001FC8000FF00003F80007FC000C7E00103F00300F8060
03804001C0C001C0C000C0C000C0C000C0C000806001802001001002000C0C0003F00012
1F7E9D17>I<03F0000E18001C0C00380600380700700700700380F00380F00380F003C0
F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C0000380000380
000380000700300700780600780E00700C002018001070000FC000121F7E9D17>I<70F8
F8F8700000000000000000000070F8F8F87005147C930D>I<0001000000038000000380
00000380000007C0000007C0000007C0000009E0000009E0000009E0000010F0000010F0
000010F00000207800002078000020780000403C0000403C0000403C0000801E0000801E
0000FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003
C01F0007E0FFC03FFE1F207F9F22>65 D<FFFFE0000F80380007801E0007801F0007800F
0007800F8007800F8007800F8007800F8007800F8007800F0007801F0007801E0007803C
0007FFF00007803C0007801E0007800F0007800F8007800780078007C0078007C0078007
C0078007C0078007C00780078007800F8007800F0007801F000F803C00FFFFF0001A1F7E
9E20>I<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C0
3C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000
F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C000040
1E0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>I<FF
FFE0000F803C0007801E000780070007800380078003C0078001E0078001E0078001F007
8000F0078000F0078000F8078000F8078000F8078000F8078000F8078000F8078000F807
8000F8078000F8078000F0078000F0078000F0078001E0078001E0078003C00780038007
80070007800E000F803C00FFFFE0001D1F7E9E23>I<FFFFFF000F800F00078003000780
030007800100078001800780008007800080078000800780808007808000078080000780
80000781800007FF80000781800007808000078080000780800007808000078000200780
002007800020078000400780004007800040078000C0078000C0078001800F800F80FFFF
FF801B1F7E9E1F>I<FFFFFF000F800F0007800300078003000780010007800180078000
80078000800780008007800080078080000780800007808000078080000781800007FF80
000781800007808000078080000780800007808000078000000780000007800000078000
00078000000780000007800000078000000FC00000FFFE0000191F7E9E1E>I<FFF8FFF8
0F800F8007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
07800F0007800F0007800F0007800F0007FFFF0007800F0007800F0007800F0007800F00
07800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
07800F000F800F80FFF8FFF81D1F7E9E22>72 D<FFFC0FC0078007800780078007800780
078007800780078007800780078007800780078007800780078007800780078007800780
0780078007800FC0FFFC0E1F7F9E10>I<0FFFC0007C00003C00003C00003C00003C0000
3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000
3C00003C00003C00003C00003C00203C00F83C00F83C00F83C00F0380040780040700030
E0000F800012207E9E17>I<FFFE000FC000078000078000078000078000078000078000
078000078000078000078000078000078000078000078000078000078000078000078000
07800207800207800207800207800607800407800407800C07801C0F807CFFFFFC171F7E
9E1C>76 D<FF80001FF80F80001F800780001F0005C0002F0005C0002F0005C0002F0004
E0004F0004E0004F000470008F000470008F000470008F000438010F000438010F000438
010F00041C020F00041C020F00041C020F00040E040F00040E040F00040E040F00040708
0F000407080F000407080F000403900F000403900F000401E00F000401E00F000401E00F
000E00C00F001F00C01F80FFE0C1FFF8251F7E9E2A>I<FF803FF807C007C007C0038005
E0010005E0010004F001000478010004780100043C0100043C0100041E0100040F010004
0F010004078100040781000403C1000401E1000401E1000400F1000400F1000400790004
003D0004003D0004001F0004001F0004000F0004000700040007000E0003001F000300FF
E001001D1F7E9E22>I<FFFFE0000F80780007801C0007801E0007800F0007800F800780
0F8007800F8007800F8007800F8007800F8007800F0007801E0007801C000780780007FF
E00007800000078000000780000007800000078000000780000007800000078000000780
0000078000000780000007800000078000000FC00000FFFC0000191F7E9E1F>80
D<FFFF80000F80F0000780780007803C0007801E0007801E0007801F0007801F0007801F
0007801F0007801E0007801E0007803C00078078000780F00007FF80000781C0000780E0
000780F0000780700007807800078078000780780007807C0007807C0007807C0007807C
0407807E0407803E040FC01E08FFFC0F10000003E01E207E9E21>82
D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000
007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001
C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7F
FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F001080
0F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000
0F0000000F0000001F800007FFFE001C1F7E9E21>I<FFFC3FF80FC007C0078003800780
010007800100078001000780010007800100078001000780010007800100078001000780
010007800100078001000780010007800100078001000780010007800100078001000780
01000780010007800100038002000380020001C0020001C0040000E00800007018000038
2000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000600F80006007800040078000
4003C0008003C0008003C0008001E0010001E0010001F0010000F0020000F0020000F806
000078040000780400003C0800003C0800003C0800001E1000001E1000001F3000000F20
00000F20000007C0000007C0000007C000000380000003800000038000000100001F207F
9E22>I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C001000780
07C00200078007C00200078007C0020003C009E0040003C009E0040003C009E0040003E0
10F00C0001E010F0080001E010F0080001F02078080000F02078100000F02078100000F0
403C10000078403C20000078403C20000078C03E2000003C801E4000003C801E4000003C
801E4000001F000F8000001F000F8000001F000F8000001E00078000000E00070000000E
00070000000C000300000004000200002C207F9E2F>I<7FF83FF80FE00FC007C0070003
C0020001E0040001F00C0000F0080000781000007C1000003C2000003E4000001E400000
0F8000000F8000000780000003C0000007E0000005E0000009F0000018F8000010780000
207C0000603C0000401E0000801F0001800F0001000780020007C0070003C01F8007E0FF
E01FFE1F1F7F9E22>I<080410082010201040204020804080408040B85CFC7EFC7E7C3E
381C0F0E7B9F17>92 D<1FE000303000781800781C00300E00000E00000E00000E0000FE
00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C01414
7E9317>97 D<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E0000
0E00000E00000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E0078
0E00780E00780E00780E00700E00700E00E00F00E00D01C00CC300083E0015207F9F19>
I<03F80E0C1C1E381E380C70007000F000F000F000F000F000F00070007000380138011C
020E0C03F010147E9314>I<000380003F80000380000380000380000380000380000380
00038000038000038000038003E380061B801C0780380380380380700380700380F00380
F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003E3F8
15207E9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF
80F00000F00000F000007000007000003800801800800C010007060001F80011147F9314
>I<007C00C6018F038F07060700070007000700070007000700FFF00700070007000700
070007000700070007000700070007000700070007000700070007007FF01020809F0E>
I<0000E003E3300E3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C
001E380033E0002000002000003000003000003FFE001FFF800FFFC03001E0600070C000
30C00030C00030C000306000603000C01C038003FC00141F7F9417>I<0E0000FE00000E
00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000E43000E
81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C001E003E001E001C000000
000000000000000000000E007E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E00000000000
00000000000000007007F000F00070007000700070007000700070007000700070007000
700070007000700070007000700070007000706070F060F0C061803F000C28829E0E>I<
0E00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
0E000E000E000E000E000E000E000E000E000E000E000E000E00FFE00B20809F0C>108
D<0E1F01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E00E00
0E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E
00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE023147F9326>I<
0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0
0E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F800070E
001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000
E07000E03801C03801C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F
00E00E00E00E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E
00E00F01E00F01C00EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E
0000FFE000151D7F9319>I<03E0800619801C05803C0780380380780380700380F00380
F00380F00380F00380F00380F003807003807803803803803807801C0B800E138003E380
000380000380000380000380000380000380000380000380003FF8151D7E9318>I<0E78
FE8C0F1E0F1E0F0C0E000E000E000E000E000E000E000E000E000E000E000E000E000E00
FFE00F147F9312>I<1F9030704030C010C010C010E00078007F803FE00FF00070803880
188018C018C018E030D0608F800D147E9312>I<020002000200060006000E000E003E00
FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E080E080E080610
031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C00E01C00E
01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC16
147F9319>I<FF83F81E01E01C00C00E00800E00800E0080070100070100038200038200
03820001C40001C40001EC0000E80000E80000700000700000700000200015147F9318>
I<FF9FE1FC3C0780701C0300601C0380200E0380400E0380400E03C0400707C0800704C0
800704E080038861000388710003C8730001D0320001D03A0000F03C0000E01C0000E01C
0000601800004008001E147F9321>I<7FC3FC0F01E00701C007018003810001C20000E4
0000EC00007800003800003C00007C00004E000087000107000303800201C00601E01E01
E0FF07FE1714809318>I<FF83F81E01E01C00C00E00800E00800E008007010007010003
820003820003820001C40001C40001EC0000E80000E80000700000700000700000200000
2000004000004000004000F08000F08000F100006200003C0000151D7F9318>I<3FFF38
0E200E201C40384078407000E001E001C00380078007010E011E011C0338027006700EFF
FE10147F9314>I E /Fl 38 122 df<000FE000007FF80000F81C0001E07C0003E07C00
07C07C0007C07C0007C0380007C0000007C0000007C0000007C1FE00FFFFFE00FFFFFE00
07C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E00
07C03E0007C03E0007C03E0007C03E0007C03E0007C03E0007C03E003FF9FFC03FF9FFC0
1A20809F1D>12 D<00E00001E0000FE000FFE000F3E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003
E00003E00003E00003E00003E00003E000FFFF80FFFF80111D7C9C1A>49
D<07F0001FFE00383F007C1F80FE0FC0FE0FC0FE0FE0FE07E07C07E03807E0000FE0000F
C0000FC0001F80001F00003E0000780000F00000E00001C0000380600700600E00601C00
E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131D7D9C1A>I<01FC0007FF000E0F801E0FC03F
07E03F07E03F07E03F07E01E0FC0000FC0000F80001F0001FC0001FC00000F800007C000
03E00003F00003F83803F87C03F8FE03F8FE03F8FE03F0FC03F07807E03C0FC01FFF8003
FC00151D7E9C1A>I<0001C00003C00007C00007C0000FC0001FC0003BC00073C00063C0
00C3C00183C00383C00703C00E03C00C03C01803C03803C07003C0E003C0FFFFFEFFFFFE
0007C00007C00007C00007C00007C00007C000FFFE00FFFE171D7F9C1A>I<3803803FFF
803FFF003FFE003FFC003FF0003F800030000030000030000030000033F80037FE003C1F
00380F801007C00007C00007E00007E07807E0FC07E0FC07E0FC07E0FC07C0780FC0600F
80381F001FFC0007F000131D7D9C1A>I<003F0001FFC007E0E00F81E01F03F01E03F03E
03F07C03F07C01E07C0000FC1000FCFF00FDFFC0FD03E0FE01F0FE01F0FC01F8FC01F8FC
01F8FC01F87C01F87C01F87C01F83C01F03E01F01E03E00F07C007FF8001FE00151D7E9C
1A>I<6000007FFFF87FFFF87FFFF07FFFE07FFFC0E00180C00300C00300C00600000C00
00180000380000380000780000700000F00000F00001F00001F00001F00001F00003F000
03F00003F00003F00003F00003F00001E00000C000151E7D9D1A>I<01FC0007FF000F07
801E03C01C01E03C01E03C01E03E01E03F01E03FC3C01FE3801FFF000FFE0007FF8007FF
C01FFFE03C3FF0780FF07803F8F001F8F000F8F00078F00078F000707800707C00E03E03
C00FFF8003FC00151D7E9C1A>I<0000E000000000E000000001F000000001F000000001
F000000003F800000003F800000006FC00000006FC0000000EFE0000000C7E0000000C7E
000000183F000000183F000000303F800000301F800000701FC00000600FC00000600FC0
0000C007E00000FFFFE00001FFFFF000018003F000018003F000030001F800030001F800
060001FC00060000FC000E0000FE00FFE00FFFE0FFE00FFFE0231F7E9E28>65
D<FFFFFE00FFFFFFC007C007E007C003F007C001F807C001FC07C001FC07C001FC07C001
FC07C001FC07C001F807C003F807C007F007C00FE007FFFF8007FFFFC007C003F007C001
F807C001FC07C000FC07C000FE07C000FE07C000FE07C000FE07C000FE07C000FC07C001
FC07C003F807C007F0FFFFFFE0FFFFFF001F1F7E9E25>I<0007FC02003FFF0E00FE03DE
03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006
FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E000006
7F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF80
0007FC001F1F7D9E26>I<FFFFFFE0FFFFFFE007E007E007E001E007E000E007E0006007
E0007007E0003007E0003007E0603007E0603007E0600007E0E00007E1E00007FFE00007
FFE00007E1E00007E0E00007E0600007E0600C07E0600C07E0000C07E0001807E0001807
E0001807E0003807E0007807E000F807E003F0FFFFFFF0FFFFFFF01E1F7E9E22>69
D<FFFFFFFF07E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007
E007E007E007E007E007E007E007E007E007E007E007E0FFFFFFFF101F7E9E14>73
D<FFFF8000FFFF800007E0000007E0000007E0000007E0000007E0000007E0000007E000
0007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E000
0007E0000007E000C007E000C007E000C007E001C007E001C007E001C007E0038007E003
8007E00F8007E01F80FFFFFF80FFFFFF801A1F7E9E1F>76 D<FFE000003FF8FFF000007F
F807F000007F0006F80000DF0006F80000DF0006F80000DF00067C00019F00067C00019F
00063E00031F00063E00031F00061F00061F00061F00061F00060F800C1F00060F800C1F
000607C0181F000607C0181F000607C0181F000603E0301F000603E0301F000601F0601F
000601F0601F000600F8C01F000600F8C01F0006007D801F0006007D801F0006003F001F
0006003F001F0006003F001F0006001E001F00FFF01E03FFF8FFF00C03FFF82D1F7E9E32
>I<FFFFFE00FFFFFF8007E00FE007E003F007E001F807E001F807E001FC07E001FC07E0
01FC07E001FC07E001FC07E001F807E001F807E003F007E00FE007FFFF8007FFFE0007E0
000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0
000007E0000007E00000FFFF0000FFFF00001E1F7E9E24>80 D<7FFFFFFC7FFFFFFC7C07
E07C7007E01C6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007
E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007
E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00003FFFFC003FF
FFC01F1E7E9D24>84 D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007F
E007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E1714
7F9319>97 D<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F0000
1F00001F00001F1FC01F7FF01FE0F81F807C1F007E1F003E1F003E1F003F1F003F1F003F
1F003F1F003F1F003F1F003E1F003E1F007C1F807C1EC1F81C7FE0181F8018207E9F1D>
I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC00
00FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F800
07F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80F
FEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C
00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C0
1E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C0000
3E00181E00180F807007FFE000FF8015147F9318>I<01FC3C07FFFE0F079E1E03DE3E03
E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF
800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFF
E001FF00171E7F931A>103 D<FF0000FF00001F00001F00001F00001F00001F00001F00
001F00001F00001F00001F00001F0FC01F3FE01F61F01FC0F81F80F81F00F81F00F81F00
F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3
FF18207D9F1D>I<1C003E007F007F007F003E001C00000000000000000000000000FF00
FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0
FFE00B217EA00E>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F
001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FF
E00B207E9F0E>108 D<FE0FE03F80FE1FF07FC01E70F9C3E01E407D01F01E807E01F01F
807E01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F01F00
7C01F01F007C01F01F007C01F01F007C01F01F007C01F01F007C01F0FFE3FF8FFEFFE3FF
8FFE27147D932C>I<FE0FC0FE3FE01E61F01EC0F81E80F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8FFE3FFFFE3FF18147D
931D>I<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC00
7EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>I<FF
1FC0FF7FF01FE1F81F80FC1F007E1F007E1F003E1F003F1F003F1F003F1F003F1F003F1F
003F1F003E1F007E1F007C1F80FC1FC1F81F7FE01F1F801F00001F00001F00001F00001F
00001F00001F0000FFE000FFE000181D7E931D>I<01F81807FE381F87783F01F83E01F8
7E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F8
1F87F80FFEF803F8F80000F80000F80000F80000F80000F80000F80000F80007FF0007FF
181D7E931C>I<FE3E00FE7F801ECFC01E8FC01E8FC01F8FC01F03001F00001F00001F00
001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00012147E9316
>I<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006
F81EFFFCC7F010147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F
800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F
1D7F9C14>I<FF07F8FF07F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
1F00F81F00F81F00F81F00F81F00F81F01F81F01F80F06F807FCFF03F8FF18147D931D>
I<FFE07F80FFE07F801F001C000F8018000F80180007C0300007C0300003E0600003E060
0001F0C00001F0C00001F9C00000F9800000FF8000007F0000007F0000003E0000003E00
00001C0000001C000019147F931C>I<FFE07F80FFE07F801F001C000F8018000F801800
07C0300007C0300003E0600003E0600001F0C00001F0C00001F9C00000F9800000FF8000
007F0000007F0000003E0000003E0000001C0000001C0000001800000018000078300000
FC300000FC600000C0E00000E1C000007F8000001E000000191D7F931C>121
D E /Fm 27 122 df<00000007FF800000000001FFFFF0000000000FFFFFFC000000003F
FFFFFE00000000FFFC00FF00000001FFC0003F80000007FF00007FC000000FFE0001FFC0
00001FFC0001FFE000001FF80003FFE000003FF00003FFE000003FF00003FFE000007FE0
0003FFE000007FE00003FFE000007FE00003FFE000007FE00003FFE000007FE00001FFC0
00007FE00000FF8000007FE000003E0000007FE00000000000007FE00000000000007FE0
0000000000007FE00000000000007FE00000000000007FE00000000000007FE0003FFFF0
00FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFF
FFFFFFF000007FF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
00007FF0003FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFF
E03FFFFFE03FFFFFE03B487EC742>12 D<FFFFFFFFFFFFE00000FFFFFFFFFFFFFE0000FF
FFFFFFFFFFFFC000FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFF800001FFF800001FFFE0000
1FFF8000007FFF00001FFF8000003FFF80001FFF8000001FFFC0001FFF8000000FFFC000
1FFF80000007FFE0001FFF80000007FFF0001FFF80000007FFF0001FFF80000003FFF000
1FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF800
1FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF8001FFF80000003FFF800
1FFF80000003FFF0001FFF80000007FFF0001FFF80000007FFE0001FFF8000000FFFE000
1FFF8000000FFFC0001FFF8000001FFF80001FFF8000003FFF00001FFF8000007FFE0000
1FFF800001FFFC00001FFF800007FFF000001FFFFFFFFFFFC000001FFFFFFFFFFE000000
1FFFFFFFFFFF8000001FFFFFFFFFFFF000001FFF800000FFFC00001FFF8000003FFF0000
1FFF8000000FFFC0001FFF80000007FFE0001FFF80000003FFF0001FFF80000003FFF800
1FFF80000001FFF8001FFF80000001FFFC001FFF80000000FFFC001FFF80000000FFFE00
1FFF80000000FFFE001FFF80000000FFFE001FFF80000000FFFF001FFF800000007FFF00
1FFF800000007FFF001FFF800000007FFF001FFF800000007FFF001FFF80000000FFFF00
1FFF80000000FFFF001FFF80000000FFFF001FFF80000000FFFE001FFF80000000FFFE00
1FFF80000001FFFE001FFF80000001FFFC001FFF80000003FFFC001FFF80000007FFF800
1FFF80000007FFF0001FFF8000001FFFE0001FFF8000003FFFE0001FFF800001FFFF80FF
FFFFFFFFFFFFFF00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFF000FFFFFFFFFFFFFFC000FF
FFFFFFFFFFF8000048477CC654>66 D<000000003FFE00000E0000000FFFFFC0001E0000
007FFFFFF8003E000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000
FFFF80000FF7FE0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE001F
FF800000003FFE003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FF
F80000000007FE03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FF
E00000000000FE0FFFC00000000000FE0FFFC000000000007E1FFFC000000000007E1FFF
8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E7FFF
8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF
000000000000007FFF000000000000007FFF000000000000007FFF000000000000007FFF
8000000000003E3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF
8000000000003E1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C07FF
E000000000007C07FFE00000000000F803FFF00000000000F803FFF00000000001F801FF
F80000000001F000FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0001F
FF800000001F80000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000
FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000
007FFFFFFC00000000000FFFFFE00000000000003FFE000000474979C756>I<FFFFFFFF
FFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFF
FFFFFFFF00001FFFC00001FFFF00001FFFC000001FFF00001FFFC0000007FF00001FFFC0
000003FF00001FFFC0000000FF00001FFFC00000007F00001FFFC00000007F00001FFFC0
0000003F00001FFFC00000003F80001FFFC00000001F80001FFFC00000001F80001FFFC0
0000001F80001FFFC00000000F80001FFFC00000000F80001FFFC0007C000F80001FFFC0
007C000F80001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0007C0007C0001FFFC0
007C0007C0001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC0
01FC000000001FFFC003FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFF
FFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC0
1FFC000000001FFFC003FC000000001FFFC001FC000000001FFFC000FC000000001FFFC0
00FC000000001FFFC000FC000000001FFFC0007C00007C001FFFC0007C00007C001FFFC0
007C00007C001FFFC0007C0000F8001FFFC0007C0000F8001FFFC0007C0000F8001FFFC0
00000000F8001FFFC000000001F8001FFFC000000001F0001FFFC000000001F0001FFFC0
00000001F0001FFFC000000003F0001FFFC000000003F0001FFFC000000007F0001FFFC0
00000007E0001FFFC00000000FE0001FFFC00000001FE0001FFFC00000003FE0001FFFC0
0000007FE0001FFFC0000000FFE0001FFFC0000003FFC0001FFFC000000FFFC0001FFFC0
0000FFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF80FFFFFFFF
FFFFFFFF80FFFFFFFFFFFFFFFF8046467CC54E>69 D<FFFFFFFFFEFFFFFFFFFEFFFFFFFF
FEFFFFFFFFFEFFFFFFFFFE000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000FFFFFFFFFEFFFFFF
FFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE27477DC62D>73 D<FFFFFFFFFF000000FFFFFF
FFFF000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
00001FFFC000000000001FFFC0000000F8001FFFC0000000F8001FFFC0000000F8001FFF
C0000000F8001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0001FFFC0000001
F0001FFFC0000001F0001FFFC0000003F0001FFFC0000003F0001FFFC0000003F0001FFF
C0000007F0001FFFC0000007F0001FFFC000000FE0001FFFC000001FE0001FFFC000001F
E0001FFFC000003FE0001FFFC000007FE0001FFFC00000FFE0001FFFC00003FFE0001FFF
C0000FFFE0001FFFC0007FFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFF
C0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC03D477CC647>76 D<FFFFFFE0000000000003FF
FFFFFFFFFFF0000000000007FFFFFFFFFFFFF0000000000007FFFFFFFFFFFFF800000000
000FFFFFFFFFFFFFF800000000000FFFFFFF001FFFF800000000000FFFF800001FFFFC00
000000001EFFF800001FFFFC00000000001EFFF800001FBFFE00000000003CFFF800001F
BFFE00000000003CFFF800001F9FFF000000000078FFF800001F9FFF000000000078FFF8
00001F8FFF8000000000F0FFF800001F8FFF8000000000F0FFF800001F87FFC000000001
E0FFF800001F87FFC000000001E0FFF800001F87FFC000000001E0FFF800001F83FFE000
000003C0FFF800001F83FFE000000003C0FFF800001F81FFF00000000780FFF800001F81
FFF00000000780FFF800001F80FFF80000000F00FFF800001F80FFF80000000F00FFF800
001F807FFC0000001E00FFF800001F807FFC0000001E00FFF800001F807FFC0000001E00
FFF800001F803FFE0000003C00FFF800001F803FFE0000003C00FFF800001F801FFF0000
007800FFF800001F801FFF0000007800FFF800001F800FFF800000F000FFF800001F800F
FF800000F000FFF800001F8007FFC00001E000FFF800001F8007FFC00001E000FFF80000
1F8003FFE00003C000FFF800001F8003FFE00003C000FFF800001F8003FFE00003C000FF
F800001F8001FFF000078000FFF800001F8001FFF000078000FFF800001F8000FFF8000F
0000FFF800001F8000FFF8000F0000FFF800001F80007FFC001E0000FFF800001F80007F
FC001E0000FFF800001F80003FFE003C0000FFF800001F80003FFE003C0000FFF800001F
80001FFF00780000FFF800001F80001FFF00780000FFF800001F80001FFF00780000FFF8
00001F80000FFF80F00000FF