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 ); 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 ); 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 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 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_ values and the mapping between these new values and the existing MPI_ values. Introduction of MPI implementations with support for the new language bindings can be accomplished gradually, since they will support the old MPI_, eventhough the old implementations do not support the new MPI_. As vendors upgrade their MPI implementations to conform to the new language binding standards, the new MPI_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 ); 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 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 df45 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>I66 D<0003FE0080001FFF818000FF01E38001F8003F8003 E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E00 0001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 0000FE00000000FE000000007E000000007E000001807F000001803F000001803F000003 801F800003000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC000 0003FE000021227DA128>I70 D80 D82 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001 F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF8 7F07E03F18167E951B>97 DI<00FF8007FFE00F83F01F03F03E03F07E03F07C01E0 7C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F0060 0FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000003E0000003E00 00003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0001FC3E00 07FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E00 FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE00 0F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00 F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00 181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F 87E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F 80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F 80000F80000F80000F80007FF8007FF80013237FA211>I<03FC1E0FFF7F1F0F8F3E07CF 3C03C07C03E07C03E07C03E07C03E07C03E03C03C03E07C01F0F801FFF0013FC00300000 3000003800003FFF801FFFF00FFFF81FFFFC3800FC70003EF0001EF0001EF0001EF0001E 78003C7C007C3F01F80FFFE001FF0018217E951C>II<1C003E007F007F007F003E 001C000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F 001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I 108 DII<00FE0007FFC00F83E01E00F03E00F8 7C007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C 3E00F81F01F00F83E007FFC000FE0017167E951C>II114 D<0FF3003FFF00781F00600700E00300E00300F003 00FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E00380E00380F007 00FC0E00EFFC00C7F00011167E9516>I<01800001800001800001800003800003800007 80000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F80000F 80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003 FE0000F80011207F9F16>III 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 DI<00F8E003FEE007 FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E0 0000E00000E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003 FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E0 1C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E0 1C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>III<01F1C0 03FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000 E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC0 0FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7F FF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001 C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001 C0007FFF00FFFF807FFF00111C7D9B18>I<7FE000FFE0007FE0000E00000E00000E0000 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E00700E00700E00700E00700E00707FFFF0FFFFF07FFFF0141C7F9B18> 76 DI<7E07F0FF0FF87F07F01D81C01D81 C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39 C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C 7F9B18>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E0 0380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380F0 0780700700780F007FFF003FFE000FF800111C7D9B18>II<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03 C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C03 801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>82 D<03F3801FFF803FFF80 7C0F80700780E00380E00380E00380E000007000007800003F00001FF00007FE0000FF00 000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00 E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070000070 000070000070000070000070000070000070000070000070000070000070000070000070 0000700000700000700000700007FF0007FF0007FF00151C7F9B18>II89 D91 D93 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>I107 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>II<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 >II E /Fe 31 122 df<60F0F06004047C830C>46 D<0FE03038401CE00EF00EF00EF00E000C 001C0030006000C000800180010001000100010001000100000000000000000000000300 0780078003000F1D7E9C14>63 D66 D<001F808000E0618001801980070007800E0003801C0003801C00018038000180780000 807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F00000 00F0000000700000807800008078000080380000801C0001001C0001000E000200070004 000180080000E03000001FC000191E7E9C1E>I70 D73 D<003F800000E0E0000380380007001C000E000E001C0007003C00078038000380780003 C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F00001 E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C 000380380000E0E000003F80001B1E7E9C20>79 D<7FFFFFC0700F01C0600F00C0400F00 40400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>84 D87 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C 00381C00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97 DI<07E00C301878307870306000E0 00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700 00070000070000070000070000070000070000070000070000070003E7000C1700180F00 300700700700600700E00700E00700E00700E00700E00700E00700600700700700300700 180F000C370007C7E0131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000 E000E00060007002300218040C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E 000E000E000E000E00FFE00E000E000E000E000E000E000E000E000E000E000E000E000E 000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C3880181800381C00381C 00381C00381C001818001C38000C300013C0001000003000001800001FF8001FFF001FFF 803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215>II<18003C003C00180000000000000000 00000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C00FF80091D7F9C0C>I108 DII<03F0000E1C0018060030030070 0380600180E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E 1C0003F00012127F9115>II114 D<1F9030704030C010C010E010F8007F803FE00FF000F880388018C018C018E010D0608F C00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C001C001C001C00 1C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001D8 0000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512 809116>II E /Ff 8 118 df<78FCFCFCFC780000000000 0078FCFCFCFC7806127D910D>58 D68 D<03FC000E0E001C1F00 3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C0180 1C03000E0E0003F80011127E9115>99 D<1E003F003F003F003F001E0000000000000000 0000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F 00FFE0FFE00B1E7F9D0E>105 D110 D<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F800F8F8 00F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I<1FD830786018 E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113> 115 D117 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 D66 D<00003FF001800003FFFE0380000FFFFF8780003F F007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800FF000000F801FE0 000007801FE0000007803FC0000007803FC0000003807FC0000003807F80000003807F80 00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80 00000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007FC0 000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000070007F0 00000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003 FFFF000000003FF8000029297CA832>II70 D 73 D78 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 D109 DI<003FE00001FFFC0003F07E000FC01F801F800F C03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007 F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800F C00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF 803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC00 70FF01E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000 F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807 F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>III121 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>II<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 DI<000FC040007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C0 3C0000C07C0000407C00004078000040F8000000F8000000F8000000F8000000F8000000 F8000000F8000000F8000000F8000000780000007C0000407C0000403C0000401C000040 1E0000800E000080070001000380020001C0040000703800000FC0001A217D9F21>IIII72 DI<0FFFC0007C00003C00003C00003C00003C0000 3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 3C00003C00003C00003C00003C00203C00F83C00F83C00F83C00F0380040780040700030 E0000F800012207E9E17>I76 DII80 D82 D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F00000F000 007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001 C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7F FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F001080 0F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000001F800007FFFE001C1F7E9E21>IIII<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 II<7FC3FC0F01E00701C007018003810001C20000E4 0000EC00007800003800003C00007C00004E000087000107000303800201C00601E01E01 E0FF07FE1714809318>II<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 DI<0007FC02003FFF0E00FE03DE 03F000FE07E0003E0FC0001E1F80001E3F00000E3F00000E7F0000067E0000067E000006 FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E000006 7F0000063F0000063F00000C1F80000C0FC0001807E0003803F0007000FE01C0003FFF80 0007FC001F1F7D9E26>I69 D73 D76 DI80 D<7FFFFFFC7FFFFFFC7C07 E07C7007E01C6007E00C6007E00CE007E00EC007E006C007E006C007E006C007E0060007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007E0000007 E0000007E0000007E0000007E0000007E0000007E0000007E0000007E00003FFFFC003FF FFC01F1E7E9D24>84 D<07FC001FFF003F0F803F07C03F03E03F03E00C03E00003E0007F E007FBE01F03E03C03E07C03E0F803E0F803E0F803E0FC05E07E0DE03FF8FE0FE07E1714 7F9319>97 D I<01FE0007FF801F0FC03E0FC03E0FC07C0FC07C0300FC0000FC0000FC0000FC0000FC00 00FC00007C00007E00003E00603F00C01F81C007FF0001FC0013147E9317>I<0007F800 07F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F801F8F80F FEF81F83F83E01F87E00F87C00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C 00F87C00F87E00F83E01F81F07F80FFEFF03F8FF18207E9F1D>I<01FE0007FF800F83C0 1E01E03E00F07C00F07C00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C0000 3E00181E00180F807007FFE000FF8015147F9318>I<01FC3C07FFFE0F079E1E03DE3E03 E03E03E03E03E03E03E03E03E01E03C00F07800FFF0009FC001800001800001C00001FFF 800FFFF007FFF81FFFFC3C007C70003EF0001EF0001EF0001E78003C78003C3F01F80FFF E001FF00171E7F931A>103 DI<1C003E007F007F007F003E001C00000000000000000000000000FF00 FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0 FFE00B217EA00E>I108 DII<01FF0007FFC01F83F03E00F83E00F87C007C7C007CFC007EFC007EFC007EFC00 7EFC007EFC007E7C007C7C007C3E00F83E00F81F83F007FFC001FF0017147F931A>II<01F81807FE381F87783F01F83E01F8 7E00F87C00F8FC00F8FC00F8FC00F8FC00F8FC00F8FC00F87C00F87E00F87E00F83F01F8 1F87F80FFEF803F8F80000F80000F80000F80000F80000F80000F80000F80007FF0007FF 181D7E931C>II<0FE63FFE701E600EE006E006F800FFC07FF83FFC1FFE03FE001FC007C007E007F006 F81EFFFCC7F010147E9315>I<01800180018003800380038007800F803F80FFFCFFFC0F 800F800F800F800F800F800F800F800F800F800F860F860F860F860F8607CC03F801F00F 1D7F9C14>I II121 D E /Fm 27 122 df<00000007FF800000000001FFFFF0000000000FFFFFFC000000003F FFFFFE00000000FFFC00FF00000001FFC0003F80000007FF00007FC000000FFE0001FFC0 00001FFC0001FFE000001FF80003FFE000003FF00003FFE000003FF00003FFE000007FE0 0003FFE000007FE00003FFE000007FE00003FFE000007FE00003FFE000007FE00001FFC0 00007FE00000FF8000007FE000003E0000007FE00000000000007FE00000000000007FE0 0000000000007FE00000000000007FE00000000000007FE00000000000007FE0003FFFF0 00FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFF FFFFFFF000007FF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0 00007FF0003FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFF E03FFFFFE03FFFFFE03B487EC742>12 D66 D<000000003FFE00000E0000000FFFFFC0001E0000 007FFFFFF8003E000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000 FFFF80000FF7FE0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE001F FF800000003FFE003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FF F80000000007FE03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FF E00000000000FE0FFFC00000000000FE0FFFC000000000007E1FFFC000000000007E1FFF 8000000000007E3FFF8000000000007E3FFF8000000000003E3FFF8000000000003E7FFF 8000000000003E7FFF0000000000003E7FFF000000000000007FFF00000000000000FFFF 00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF 00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF 00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF 000000000000007FFF000000000000007FFF000000000000007FFF000000000000007FFF 8000000000003E3FFF8000000000003E3FFF8000000000003E3FFF8000000000003E1FFF 8000000000003E1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C07FF E000000000007C07FFE00000000000F803FFF00000000000F803FFF00000000001F801FF F80000000001F000FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0001F FF800000001F80000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000 FFFF80000FF80000003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000 007FFFFFFC00000000000FFFFFE00000000000003FFE000000474979C756>I69 D73 D76 DI80 D<3FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFF FF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFFFFFFFFFFFFFFFF003FFF0003 FFF8003FFF007FF80003FFF80007FF807FE00003FFF80001FF807FC00003FFF80000FF80 7F800003FFF800007F807F000003FFF800003F807F000003FFF800003F807E000003FFF8 00001F807E000003FFF800001F807E000003FFF800000F807C000003FFF800000F807C00 0003FFF800000F807C000003FFF800000F807C000003FFF800000F80FC000003FFF80000 0FC0F8000003FFF8000007C0F8000003FFF8000007C0F8000003FFF8000007C0F8000003 FFF8000007C0F8000003FFF8000007C000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF8000000000003FFFFFFFFFFF800000003FFFFFFFF FFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800000003FFFFFFFFFFF800004A46 7CC553>84 D<0007FFFC000000007FFFFFC0000001FFFFFFF8000003FFFFFFFE000007FE 001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007FF0000FFF80 007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F80000 3FFC00000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFF FC000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC 0007FFC0003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC00 7FF800003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FF F000003FFC00FFF000007FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF 0007CFFF000FFFC03F8FFFF807FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF 80007FF8362E7DAD3A>97 D<00001FFFC0000000FFFFF8000007FFFFFE00001FFFFFFF80 007FFC00FFC000FFE001FFC001FFC003FFE003FF8003FFE007FF0003FFE00FFE0003FFE0 0FFE0003FFE01FFC0001FFC01FFC0001FFC03FFC0000FF803FFC00003E007FF800000000 7FF8000000007FF800000000FFF800000000FFF800000000FFF800000000FFF800000000 FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000 7FF8000000007FF8000000007FFC000000003FFC000000003FFC000000001FFC000000F8 1FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001FFE0000FC0 00FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE0000 2D2E7CAD35>99 D<00000000007FC00000000000FFFFC00000000000FFFFC00000000000 FFFFC00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000 01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000 01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000 00000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9FFC000007FFC03 FFFFC00000FFF0007FFFC00001FFC0001FFFC00003FF80000FFFC00007FF000007FFC000 0FFE000003FFC0000FFE000003FFC0001FFC000003FFC0001FFC000003FFC0003FFC0000 03FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC000 FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF80000 03FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000 FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF80000 03FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC000 0FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000 FFFFE000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF80 00001FF803FFFF8039487CC742>I<00001FFE00000001FFFFE0000007FFFFF800001FFF FFFE00007FFC07FF0000FFE001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00 001FF01FFE00000FF81FFC00000FF83FFC00000FFC3FFC000007FC7FFC000007FC7FF800 0007FC7FF8000007FE7FF8000007FEFFF8000007FEFFF8000007FEFFFFFFFFFFFEFFFFFF FFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF800000000FFF800000000FFF800000000FFF800 0000007FF8000000007FF8000000007FFC000000003FFC000000003FFC000000003FFC00 00001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000FC03FF800001F801FFC0 0003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000FFFFF80000000F FF80002F2E7DAD36>I<00000000001F8000007FF000FFE00007FFFF03FFF0001FFFFFC7 FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF0007FE0FF807FE0003FF07 F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80001FFC0001FFC000 1FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0000F FC0001FF80000FFC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF000003FF 0007FE000001FF800FFC000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FF FF00000003C07FF000000007C0000000000007C0000000000007C0000000000007C00000 00000007E0000000000007F0000000000007F8000000000007FFFFFFF0000007FFFFFFFF 000003FFFFFFFFE00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF 80007FFFFFFFFF8003FFFFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE03FE0000001FFE0 7FC00000007FF07FC00000003FF0FF800000001FF0FF800000001FF0FF800000001FF0FF 800000001FF0FF800000001FF07FC00000003FE07FC00000003FE03FE00000007FC03FF0 000000FFC01FFC000003FF800FFF00000FFF0003FFF000FFFC0000FFFFFFFFF000003FFF FFFFC0000007FFFFFE000000003FFFC0000035447DAE3B>103 D<00FC0001FE0003FF00 07FF800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC007FF8003FF0001FE00 00FC00000000000000000000000000000000000000000000000000000000000000000000 007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0 01FFC001FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820> 105 D<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001 FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FF FFFF8019487CC720>108 D<007FC001FFC00000FFE00000FFFFC00FFFF80007FFFC0000 FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FFFFC1FC07FF80FE03FFC000 FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF0001FFE78000FFF000 01FFDE0000FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE00007FF800 01FFF80000FFFC00007FF80001FFF00000FFF800007FF80001FFF00000FFF800007FF800 01FFF00000FFF800007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 01FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF800 FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0 FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF05C2E7CAD63>I<007FC001FF C00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC07FF8000FF FFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC0000 FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001 FFF00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001 FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000 FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000FF FFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07F FFFFE03B2E7CAD42>I<00000FFF0000000000FFFFF000000007FFFFFE0000001FFFFFFF 8000003FFC03FFC00000FFE0007FF00001FF80001FF80003FF00000FFC0007FE000007FE 000FFE000007FF000FFC000003FF001FFC000003FF803FFC000003FFC03FF8000001FFC0 3FF8000001FFC07FF8000001FFE07FF8000001FFE07FF8000001FFE0FFF8000001FFF0FF F8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8 000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FFE07FF800 0001FFE07FF8000001FFE07FF8000001FFE03FFC000003FFC03FFC000003FFC01FFC0000 03FF801FFE000007FF800FFE000007FF0007FF00000FFE0003FF80001FFC0001FFC0003F F80000FFE0007FF000007FFC03FFE000001FFFFFFF80000007FFFFFE00000000FFFFF000 0000000FFF000000342E7DAD3B>I<007FC00FFC000000FFFFC07FFFC00000FFFFC3FFFF F00000FFFFCFFFFFFC0000FFFFDFF01FFF0000FFFFFF8007FF800003FFFE0001FFC00001 FFF80000FFE00001FFF00000FFF00001FFE000007FF80001FFE000003FFC0001FFE00000 3FFC0001FFE000003FFE0001FFE000001FFE0001FFE000001FFF0001FFE000001FFF0001 FFE000001FFF0001FFE000000FFF0001FFE000000FFF8001FFE000000FFF8001FFE00000 0FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001 FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF0001FFE00000 1FFF0001FFE000001FFF0001FFE000001FFE0001FFE000001FFE0001FFE000003FFC0001 FFE000003FFC0001FFE000007FF80001FFF000007FF80001FFF80000FFF00001FFFC0001 FFE00001FFFE0003FFC00001FFFF0007FF800001FFFFE03FFE000001FFEFFFFFFC000001 FFE3FFFFF0000001FFE0FFFF80000001FFE01FF800000001FFE0000000000001FFE00000 00000001FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001 FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000 00000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000FF FFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000000000FFFFFFC000 00000039427CAD42>I<00000FFC0003C0000000FFFF0007C0000007FFFFC00FC000001F FFFFF01FC000003FFE03F81FC00000FFF000FC3FC00001FFE0003E7FC00003FFC0001F7F C00007FF80001FFFC0000FFF00000FFFC0000FFF000007FFC0001FFE000007FFC0001FFE 000003FFC0003FFC000003FFC0003FFC000001FFC0007FFC000001FFC0007FFC000001FF C0007FF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8 000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FFC000FFF8000001FF C000FFF8000001FFC000FFF8000001FFC0007FF8000001FFC0007FFC000001FFC0007FFC 000001FFC0003FFC000001FFC0003FFC000001FFC0003FFE000003FFC0001FFE000003FF C0001FFE000007FFC0000FFF00000FFFC00007FF80001FFFC00003FF80003FFFC00001FF C0007FFFC00000FFF000FFFFC000007FFC07FBFFC000001FFFFFE3FFC0000007FFFFC3FF C0000001FFFF03FFC00000001FF803FFC0000000000003FFC0000000000003FFC0000000 000003FFC0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FF C0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC0000000 000003FFC0000000000003FFC0000000000003FFC0000000000003FFC00000000001FFFF FF8000000001FFFFFF8000000001FFFFFF8000000001FFFFFF8000000001FFFFFF803942 7CAD3F>I<00FF803F8000FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FF FF8F07FF0003FF9E0FFF8001FFBC0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001 FFF007FF0001FFF007FF0001FFE003FE0001FFE000F80001FFE000000001FFE000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001 FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000FF FFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000292E7CAD31>I< 000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F80000FE03F 000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0 000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFF FF8007FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FF FC0000001FFC7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8 FE000003F8FF000003F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC 7FFFFE00F81FFFF800E003FF8000262E7CAD2F>I<0001F000000001F000000001F00000 0001F000000001F000000001F000000003F000000003F000000003F000000007F0000000 07F000000007F00000000FF00000000FF00000001FF00000003FF00000003FF00000007F F0000001FFF0000003FFF000000FFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0FFFFFF FFC000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF000 0000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000 00FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000 FFF0000000FFF0000000FFF001F000FFF001F000FFF001F000FFF001F000FFF001F000FF F001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC 07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF00024427EC12E>I<007F E000003FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFF F000FFFFE0007FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF F00001FFE00000FFF00001FFE00001FFF00001FFE00001FFF00001FFE00001FFF00001FF E00003FFF00000FFE00007FFF00000FFE0000F7FF000007FE0001F7FF000007FF0003E7F F800003FFC00FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FFFF807FFFE00000 3FFE007FFFE03B2E7CAD42>II<7FFFFFC000FFFF807FFFFFC000FFFF807FFF FFC000FFFF807FFFFFC000FFFF807FFFFFC000FFFF8000FFF000000FE00000FFF800000F C00000FFF800000FC000007FFC00000F8000007FFC00001F8000003FFC00001F0000003F FE00003F0000001FFE00003E0000001FFF00007E0000000FFF00007C0000000FFF8000FC 00000007FF8000F800000007FFC001F800000003FFC001F000000003FFE003F000000003 FFE003F000000001FFF003E000000001FFF007E000000000FFF007C000000000FFF80FC0 000000007FF80F80000000007FFC1F80000000003FFC1F00000000003FFE3F0000000000 1FFE3E00000000001FFF7E00000000000FFF7C00000000000FFFFC00000000000FFFFC00 0000000007FFF8000000000007FFF8000000000003FFF0000000000003FFF00000000000 01FFE0000000000001FFE0000000000000FFC0000000000000FFC00000000000007F8000 00000000007F800000000000003F000000000000003F000000000000003F000000000000 003E000000000000007E000000000000007C00000000000000FC000000001F8000F80000 00003FC001F8000000007FE001F000000000FFF003F000000000FFF003E000000000FFF0 07E000000000FFF00FC000000000FFF01F8000000000FFF03F80000000007FE07F000000 00007F43FE00000000003FFFF800000000001FFFF0000000000007FFC0000000000001FE 00000000000039427EAD3F>121 D E /Fn 47 122 df<0000C018000000C018000000C0 180000018030000001803000000180300000018030000003006000000300600000030060 0000030060000003006000000600C000000600C000000600C000000600C000000C018000 FFFFFFFFC0FFFFFFFFC00018030000001803000000180300000018030000003006000000 3006000000300600000030060000FFFFFFFFC0FFFFFFFFC000600C000000C018000000C0 18000000C018000000C01800000180300000018030000001803000000180300000030060 00000300600000030060000003006000000600C000000600C000000600C00000222D7DA2 29>35 D<70F8FCFC7404040404080810102040060F7C840E>44 DI<70F8F8F87005057C840E>I<01F000071C000C06001803003803803803807001C07001 C07001C07001C0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001E0F001 E0F001E0F001E0F001E0F001E07001C07001C07001C07803C03803803803801C07000C06 00071C0001F00013227EA018>48 D<008003800F80F38003800380038003800380038003 800380038003800380038003800380038003800380038003800380038003800380038003 800380038007C0FFFE0F217CA018>I<03F8000C1E001007002007804007C07807C07803 C07807C03807C0000780000780000700000F00000E0000380003F000001C00000F000007 800007800003C00003C00003E02003E07003E0F803E0F803E0F003C04003C04007802007 80100F000C1C0003F00013227EA018>51 D<000200000600000E00000E00001E00001E00 002E00004E00004E00008E00008E00010E00020E00020E00040E00040E00080E00100E00 100E00200E00200E00400E00800E00FFFFF8000E00000E00000E00000E00000E00000E00 000E00001F0001FFF015217FA018>I<1000801E07001FFF001FFE001FF80013E0001000 0010000010000010000010000010000010F800130E001407001803801003800001C00001 C00001E00001E00001E00001E07001E0F001E0F001E0E001C08001C04003C04003802007 001006000C1C0003F00013227EA018>I<007E0001C1000300800601C00E03C01C03C018 0180380000380000780000700000700000F0F800F30C00F40600F40300F80380F801C0F0 01C0F001E0F001E0F001E0F001E0F001E07001E07001E07001E03801C03801C01803801C 03000C0600070C0001F00013227EA018>I<01F800060E000803001001802001802000C0 6000C06000C06000C07000C07801803E01003F02001FC4000FF80003F80003FC00067F00 083F80100F803007C06001C06000E0C000E0C00060C00060C00060C000606000406000C0 3000801803000E0E0003F00013227EA018>56 D<01F000060C000C060018070038038070 0380700380F001C0F001C0F001C0F001E0F001E0F001E0F001E0F001E07001E07003E038 03E01805E00C05E00619E003E1E00001C00001C00001C000038000038030030078070078 0600700C002018001030000FC00013227EA018>I<0001800000018000000180000003C0 000003C0000003C0000005E0000005E000000DF0000008F0000008F0000010F800001078 000010780000203C0000203C0000203C0000401E0000401E0000401E0000800F0000800F 0000FFFF000100078001000780030007C0020003C0020003C0040003E0040001E0040001 E00C0000F00C0000F03E0001F8FF800FFF20237EA225>65 D<0007E0100038183000E006 3001C00170038000F0070000F00E0000701E0000701C0000303C0000303C0000307C0000 107800001078000010F8000000F8000000F8000000F8000000F8000000F8000000F80000 00F800000078000000780000107C0000103C0000103C0000101C0000201E0000200E0000 40070000400380008001C0010000E0020000381C000007E0001C247DA223>67 D69 DI< FFFC0FC00780078007800780078007800780078007800780078007800780078007800780 078007800780078007800780078007800780078007800780078007800FC0FFFC0E227EA1 12>73 D<03FFF0001F00000F00000F00000F00000F00000F00000F00000F00000F00000F 00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F 00000F00000F00000F00700F00F80F00F80F00F80E00F01E00401C0020380018700007C0 0014237EA119>I77 DI80 D82 D<03F0200C0C601802603001E07000E0600060E00060E00060E00020E0 0020E00020F00000F000007800007F00003FF0001FFE000FFF0003FF80003FC00007E000 01E00000F00000F0000070800070800070800070800070C00060C00060E000C0F000C0C8 0180C6070081FC0014247DA21B>I<7FFFFFF87807807860078018400780084007800840 078008C007800C8007800480078004800780048007800400078000000780000007800000 078000000780000007800000078000000780000007800000078000000780000007800000 078000000780000007800000078000000780000007800000078000000780000007800000 0FC00003FFFF001E227EA123>I<0FE0001838003C0C003C0E0018070000070000070000 070000FF0007C7001E07003C0700780700700700F00708F00708F00708F00F087817083C 23900FC1E015157E9418>97 D<0E0000FE00001E00000E00000E00000E00000E00000E00 000E00000E00000E00000E00000E00000E00000E1F000E61C00E80600F00300E00380E00 3C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E001C0E003C0E00380F00 700C80600C41C0083F0017237FA21B>I<01FE000703000C07801C078038030078000070 0000F00000F00000F00000F00000F00000F00000F000007000007800403800401C00800C 010007060001F80012157E9416>I<0000E0000FE00001E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00000E001F8E00704E00C02E01C01E03800E0 7800E07000E0F000E0F000E0F000E0F000E0F000E0F000E0F000E07000E07800E03800E0 1801E00C02E0070CF001F0FE17237EA21B>I<01FC000707000C03801C01C03801C07801 E07000E0F000E0FFFFE0F00000F00000F00000F00000F000007000007800203800201C00 400E008007030000FC0013157F9416>I<003C00C6018F038F030F070007000700070007 000700070007000700FFF807000700070007000700070007000700070007000700070007 000700070007000700070007807FF8102380A20F>I<00007001F198071E180E0E181C07 001C07003C07803C07803C07803C07801C07001C07000E0E000F1C0019F0001000001000 001800001800001FFE000FFFC00FFFE03800F0600030400018C00018C00018C000186000 306000303800E00E038003FE0015217F9518>I<0E0000FE00001E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E00000E00000E1F800E60C00E80E00F 00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E 00700E00700E00700E00700E0070FFE7FF18237FA21B>I<1C001E003E001E001C000000 00000000000000000000000000000E00FE001E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E00FFC00A227FA10E>I<01C003E003E003E001 C00000000000000000000000000000000001E00FE001E000E000E000E000E000E000E000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0 C0F18061803E000B2C82A10F>I<0E0000FE00001E00000E00000E00000E00000E00000E 00000E00000E00000E00000E00000E00000E00000E03FC0E01F00E01C00E01800E02000E 04000E08000E10000E38000EF8000F1C000E1E000E0E000E07000E07800E03C00E01C00E 01E00E00F00E00F8FFE3FE17237FA21A>I<0E00FE001E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E00FFE00B237FA20E>I<0E1FC07F00FE60E183801E8072 01C00F003C00E00F003C00E00E003800E00E003800E00E003800E00E003800E00E003800 E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E00E003800E0 0E003800E00E003800E00E003800E0FFE3FF8FFE27157F942A>I<0E1F80FE60C01E80E0 0F00700F00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0070 0E00700E00700E00700E00700E0070FFE7FF18157F941B>I<01FC000707000C01801800 C03800E0700070700070F00078F00078F00078F00078F00078F00078F000787000707800 F03800E01C01C00E038007070001FC0015157F9418>I<0E1F00FE61C00E80600F00700E 00380E003C0E001C0E001E0E001E0E001E0E001E0E001E0E001E0E001E0E003C0E003C0E 00380F00700E80E00E41C00E3F000E00000E00000E00000E00000E00000E00000E00000E 00000E0000FFE000171F7F941B>I<0E3CFE461E8F0F0F0F060F000E000E000E000E000E 000E000E000E000E000E000E000E000E000F00FFF010157F9413>114 D<0F8830786018C018C008C008E008F0007F803FE00FF001F8003C801C800C800CC00CC0 08E018D0308FC00E157E9413>I<02000200020002000600060006000E001E003E00FFF8 0E000E000E000E000E000E000E000E000E000E000E000E040E040E040E040E040E040708 030801F00E1F7F9E13>I<0E0070FE07F01E00F00E00700E00700E00700E00700E00700E 00700E00700E00700E00700E00700E00700E00700E00700E00F00E00F006017003827800 FC7F18157F941B>III121 D E /Fo 20 118 df45 D68 D73 D77 D 80 D<007F802001FFE02007C078600F001C601E0006E03C0003E0380001E0780000E070 0000E070000060F0000060F0000060F0000020F0000020F0000020F8000020F80000007C 0000007E0000003F0000003FC000001FF800000FFF800007FFF80003FFFC0000FFFF0000 0FFF800000FFC000001FE0000007E0000003F0000001F0000000F0000000F8000000F880 00007880000078800000788000007880000078C0000078C0000070E00000F0E00000E0F0 0000E0F80001C0EC000380C7000700C1F01E00807FFC00800FF0001D337CB125>83 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E 0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E 003E001E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E 047C005E043E008F080F0307F003FC03E01E1F7D9E21>97 D<003F8000E0600380180700 040F00041E001E1C003E3C003E7C003E7C0008780000F80000F80000F80000F80000F800 00F80000F80000F80000F800007800007C00007C00003C00011E00011E00020F00020700 0403801800E060003F80181F7D9E1D>99 D<000001E000003FE000003FE0000003E00000 01E0000001E0000001E0000001E0000001E0000001E0000001E0000001E0000001E00000 01E0000001E0000001E0000001E0000001E0000001E0001F81E000F061E001C019E00780 05E00F0003E00E0003E01E0001E03C0001E03C0001E07C0001E0780001E0F80001E0F800 01E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0F80001E0780001E07800 01E03C0001E03C0001E01C0001E01E0003E00E0005E0070009E0038011F000E061FF003F 81FF20327DB125>I<003F800000E0E0000380380007003C000E001E001E001E001C000F 003C000F007C000F0078000F8078000780F8000780F8000780FFFFFF80F8000000F80000 00F8000000F8000000F8000000F8000000780000007C0000003C0000003C0000801E0000 800E0001000F0002000780020001C00C0000F03000001FC000191F7E9E1D>I<0007E000 1C1000383800707C00E07C01E07C01C03803C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C000FFFFC0FFFFC003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C00003C00003C00003C00003C00007E0007FFF007F FF0016327FB114>I<000000F0007F030801C1C41C0380E81C070070080F0078001E003C 001E003C003E003E003E003E003E003E003E003E003E003E003E003E001E003C001E003C 000F007800070070000780E00009C1C000087F0000180000001800000018000000180000 00180000001C0000000E0000000FFFF80007FFFF0003FFFF800E000FC0180001E0300000 F070000070E0000038E0000038E0000038E0000038E00000387000007070000070380000 E01C0001C00700070001C01C00003FE0001E2F7E9F21>I<07000F801F801F800F800700 000000000000000000000000000000000000000000000780FF80FF800F80078007800780 078007800780078007800780078007800780078007800780078007800780078007800780 0780078007800FC0FFF8FFF80D307EAF12>105 D<0780FE001FC000FF83078060F000FF 8C03C18078000F9001E2003C0007A001E4003C0007A000F4001E0007C000F8001E0007C0 00F8001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000 F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0 001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000 1E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E 000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0341F7E9E38>109 D<0780FE0000FF83078000FF8C03C0000F9001E00007A001E00007A000F00007C000F000 07C000F000078000F000078000F000078000F000078000F000078000F000078000F00007 8000F000078000F000078000F000078000F000078000F000078000F000078000F0000780 00F000078000F000078000F000078000F000078000F000078000F000078000F0000FC001 F800FFFC1FFF80FFFC1FFF80211F7E9E25>I<001FC00000F0780001C01C00070007000F 0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0F80000F8F8 0000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001F03C 0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D 1F7E9E21>I<0783E0FF8C18FF907C0F907C07A07C07C03807C00007C00007C000078000 078000078000078000078000078000078000078000078000078000078000078000078000 0780000780000780000780000780000780000FC000FFFE00FFFE00161F7E9E19>114 D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800007E00 003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000 1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>I<00400000400000 400000400000400000C00000C00000C00001C00001C00003C00007C0000FC0001FFFE0FF FFE003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003 C00003C00003C00003C00003C00003C01003C01003C01003C01003C01003C01003C01003 C01001C02001E02000E0400078C0001F00142C7FAB19>I<078000F000FF801FF000FF80 1FF0000F8001F000078000F000078000F000078000F000078000F000078000F000078000 F000078000F000078000F000078000F000078000F000078000F000078000F000078000F0 00078000F000078000F000078000F000078000F000078000F000078000F000078001F000 078001F000078001F000038002F00003C004F00001C008F800007030FF80001FC0FF8021 1F7E9E25>I E /Fp 5 85 df<00000000C00000000000E00000000001E00000000003E0 0000000003E00000000007E00000000007E0000000000FE0000000000FE0000000001FE0 000000001FE00000000037E00000000067E00000000067E000000000C7E000000000C7F0 0000000183F00000000183F00000000303F00000000703F00000000603F00000000C03F0 0000000C03F00000001803F00000001803F00000003003F00000003003F00000006003F0 000000C003F0000000C003F00000018003F00000018003F8000003FFFFF8000003FFFFF8 0000060001F800000E0001F800000C0001F80000180001F80000180001F80000300001F8 0000300001F80000600001F80000E00001F80000C00001F80001C00001F80001C00001F8 0007C00001FC001FC00003FC00FFF8007FFFE0FFF8007FFFE02B327BB135>65 D<000FFFFFFE0000000FFFFFFF800000007F000FE00000007E0003F00000007E0000F800 00007E0000FC0000007E00007C000000FC00003E000000FC00003E000000FC00003F0000 00FC00001F000001F800001F000001F800001F800001F800001F800001F800001F800003 F000001F800003F000001F800003F000001F800003F000001F800007E000003F800007E0 00003F800007E000003F800007E000003F80000FC000003F00000FC000007F00000FC000 007F00000FC000007F00001F8000007E00001F800000FE00001F800000FE00001F800000 FC00003F000001FC00003F000001F800003F000001F800003F000003F000007E000003E0 00007E000007E000007E00000FC000007E00000F800000FC00001F800000FC00003F0000 00FC00007E000000FC0000FC000001F80001F0000001F80003E0000001F8000FC0000003 F8007F000000FFFFFFFC000000FFFFFFE000000031317BB036>68 D<000FFFFFFFFC000FFFFFFFFC00007F0001FC00007E00007C00007E00003C00007E0000 3C00007E0000180000FC0000180000FC0000180000FC0000180000FC0000180001F80000 180001F80000180001F80000180001F80000180003F00080100003F00180000003F00180 000003F00180000007E00300000007E00300000007E00700000007E01F0000000FFFFE00 00000FFFFE0000000FC01E0000000FC00E0000001F800C0000001F800C0000001F800C00 00001F800C0000003F00180000003F00080000003F00000000003F00000000007E000000 00007E00000000007E00000000007E0000000000FC0000000000FC0000000000FC000000 0000FC0000000001F80000000001F80000000001F80000000003F800000000FFFFF00000 00FFFFF00000002E317BB02F>70 D<000FFFFFF000000FFFFFFE0000007F003F8000007E 000FC000007E0007E000007E0003F000007E0001F80000FC0001F80000FC0001F80000FC 0001F80000FC0001F80001F80003F80001F80003F80001F80003F80001F80003F00003F0 0007F00003F00007E00003F0000FC00003F0000FC00007E0001F000007E0007E000007E0 00FC000007E007F000000FFFFFC000000FFFFF0000000FC00F8000000FC003C000001F80 03E000001F8001F000001F8001F000001F8001F800003F0001F800003F0001F800003F00 01F800003F0001F800007E0003F800007E0003F800007E0003F000007E0003F00000FC00 07F00000FC0007F00000FC0007F00800FC0007F00C01F80007F01801F80007F01801F800 03F03003F80003F030FFFFE001F0E0FFFFE000FFC0000000003F002E327BB034>82 D<07FFFFFFFFF00FFFFFFFFFF00FC00FE003F01E000FC000F01C000FC000E018000FC000 E038000FC0006030001F8000E030001F8000E060001F8000C060001F8000C060003F0000 C0C0003F0000C0C0003F0000C0C0003F0000C080007E00008000007E00000000007E0000 0000007E0000000000FC0000000000FC0000000000FC0000000000FC0000000001F80000 000001F80000000001F80000000001F80000000003F00000000003F00000000003F00000 000003F00000000007E00000000007E00000000007E00000000007E0000000000FC00000 00000FC0000000000FC0000000000FC0000000001F80000000001F80000000001F800000 00001F80000000003F00000000003F00000000003F0000000000FF00000000FFFFFF0000 00FFFFFF0000002C3173B033>84 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300dpi TeXDict begin %%EndSetup %%Page: 0 1 0 0 bop 795 908 a Fp(D)26 b(R)g(A)f(F)h(T)225 999 y Fo(Do)r(cumen)n(t) 20 b(for)i(a)f(Standard)g(Message-P)n(assing)f(In)n(terface)621 1194 y Fn(Message)c(P)o(assing)h(In)o(terface)e(F)l(orum)828 1320 y(June)i(15,)f(1993)87 1378 y(This)g(w)o(ork)g(w)o(as)h(supp)q (orted)g(b)o(y)f(ARP)l(A)g(and)g(NSF)g(under)g(con)o(tract)g(n)o(um)o (b)q(er)f(###,)g(b)o(y)g(the)192 1436 y(National)h(Science)f(F)l (oundation)i(Science)e(and)i(T)l(ec)o(hnology)f(Cen)o(ter)f(Co)q(op)q (erativ)o(e)76 1494 y(Agreemen)o(t)e(No.)22 b(CCR-8809615,)d(and)e(b)o (y)e(the)h(Commission)e(of)j(the)f(Europ)q(ean)i(Comm)o(unit)n(y)654 1552 y(through)f(Esprit)f(pro)s(ject)g(P6643.)p eop %%Page: 1 2 1 1 bop 75 377 a Fm(Con)m(ten)m(ts)75 645 y Fl(1)42 b(In)o(tro)q (duction)19 b(to)f(MPI)1230 b(1)75 747 y(2)42 b(P)o(oin)o(t)17 b(to)h(P)o(oin)o(t)g(Comm)o(unication)1001 b(2)75 849 y(3)42 b(Collectiv)o(e)19 b(Comm)o(unication)1103 b(3)75 951 y(4)42 b(Pro)q(cess)17 b(T)l(op)q(ologies)1276 b(4)75 1053 y(5)42 b(Language)19 b(Binding)1294 b(5)143 1109 y Fk(5.1)46 b(In)o(tro)q(duction)15 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:) g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(5)143 1166 y(5.2)46 b(Data)14 b(T)o(yp)q(es)h(and)g(Naming)h(Con)o(v)o(en)o (tions)43 b Fj(:)22 b(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(5)143 1222 y(5.3)46 b(F)l(ortran)14 b(77)g(Binding)j(Issues)34 b Fj(:)23 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(6)143 1279 y(5.4)46 b(C)15 b(Binding)i(Issues)35 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f (:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(6)143 1335 y(5.5)46 b(Sp)q(eci\014c)17 b(Bindings)32 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)g (:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)91 b Fk(6)248 1392 y(5.5.1)50 b(C)15 b(bindings)i(for)e(P)o(oin)o(t-to-P)o (oin)o(t)f(Comm)o(unication)k Fj(:)k(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)91 b Fk(7)248 1448 y(5.5.2)50 b(F)l(ortran)14 b(Bindings)j(for)e(P)o(oin)o(t-to-P)o(oin)o(t)f(Routines)34 b Fj(:)22 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)69 b Fk(10)75 1550 y Fl(6)42 b(Correctness)16 b(Issues)1258 b(14)75 1652 y(7)42 b(En)o(vironmen)o(tal)18 b(Managemen)o(t)f(and)h (Inquiry)743 b(15)75 1754 y(8)42 b(Pro\014ling)1484 b(16)969 2828 y Fk(i)p eop %%Page: 0 3 0 2 bop 875 722 a Fl(Abstract)75 828 y Fk(The)18 b(Message)f(P)o (assing)h(In)o(terface)f(F)l(orum)h(\(MPIF\),)e(with)i(participation)h (from)e(o)o(v)o(er)g(40)g(organiza-)75 885 y(tions,)f(has)h(b)q(een)g (meeting)g(since)h(Jan)o(uary)e(1993)f(to)h(discuss)h(and)g(de\014ne)g (a)f(set)h(of)f(library)h(in)o(terface)75 941 y(standards)f(for)h (message)f(passing.)25 b(MPIF)16 b(is)i(not)e(sanctioned)i(or)e(supp)q (orted)h(b)o(y)g(an)o(y)g(o\016cial)g(stan-)75 998 y(dards)e (organization.)166 1054 y(This)22 b(is)f(a)g(draft)f(of)h(what)g(will)h (b)q(ecome)g(the)f(Final)h(Rep)q(ort,)h(V)l(ersion)f(1.0,)f(of)f(the)i (Message)75 1111 y(P)o(assing)c(In)o(terface)h(F)l(orum.)29 b(This)19 b(do)q(cumen)o(t)g(con)o(tains)g(all)g(the)g(tec)o(hnical)h (features)e(prop)q(osed)h(for)75 1167 y(the)c(in)o(terface.)20 b(This)c(cop)o(y)f(of)g(the)g(draft)g(w)o(as)f(pro)q(cessed)i(b)o(y)f (L)1174 1161 y Fi(a)1195 1167 y Fk(T)1220 1181 y(E)1246 1167 y(X)g(on)g(June)h(15,)f(1993.)166 1224 y(MPIF)j(in)o(vites)h (commen)o(ts)f(on)h(the)f(tec)o(hnical)i(con)o(ten)o(t)e(of)g(MPI,)g (as)g(w)o(ell)i(as)e(on)g(the)h(editorial)75 1280 y(presen)o(tation)14 b(in)g(the)g(do)q(cumen)o(t.)19 b(Commen)o(ts)13 b(receiv)o(ed)i(b)q (efore)e(July)i(1,)e(1993)g(will)i(b)q(e)f(considered)h(in)75 1336 y(pro)q(ducing)i(the)e(\014nal)h(draft)e(of)h(V)l(ersion)h(1.0)e (of)h(the)g(Message)g(P)o(assing)g(In)o(terface)g(Sp)q(eci\014cation.) 166 1393 y(The)i(goal)f(of)g(the)g(Message)g(P)o(assing)g(In)o (terface,)g(simply)i(stated,)e(is)g(to)g(dev)o(elop)h(a)g(widely)g (used)75 1449 y(standard)g(for)f(writing)i(message-passing)f(programs.) 24 b(As)17 b(suc)o(h)h(the)f(in)o(terface)g(should)h(establishing)75 1506 y(a)d(practical,)h(p)q(ortable,)f(e\016cien)o(t,)g(and)h (\015exible)h(standard)e(for)f(message)h(passing.)p eop %%Page: 1 4 1 3 bop 75 356 a Fh(Chapter)34 b(1)75 564 y Fm(In)m(tro)s(duction)41 b(to)g(MPI)964 2828 y Fk(1)p eop %%Page: 2 5 2 4 bop 75 356 a Fh(Chapter)34 b(2)75 564 y Fm(P)m(oin)m(t)41 b(to)f(P)m(oin)m(t)h(Comm)m(unication)964 2828 y Fk(2)p eop %%Page: 3 6 3 5 bop 75 356 a Fh(Chapter)34 b(3)75 564 y Fm(Collecti)q(v)m(e)42 b(Comm)m(unication)964 2828 y Fk(3)p eop %%Page: 4 7 4 6 bop 75 356 a Fh(Chapter)34 b(4)75 564 y Fm(Pro)s(cess)40 b(T)-10 b(op)s(ologi)q(es)964 2828 y Fk(4)p eop %%Page: 5 8 5 7 bop 75 358 a Fh(Chapter)34 b(5)75 568 y Fm(Language)41 b(Binding)75 811 y Fg(5.1)70 b(In)n(tro)r(duction)75 916 y Fk(This)21 b(c)o(hapter)g(de\014nes)h(the)f(rules)g(for)g(MPI)f (language)h(binding)i(in)f(general)f(and)g(for)f(F)l(ortran)g(77,)75 972 y(F)l(ortran)15 b(90,)g(ANSI)i(C,)e(and)i(ANSI)f(C++)h(in)g (particular.)23 b(De\014ned)17 b(here)f(are)g(v)m(arious)g(ob)s(ject)g (repre-)75 1029 y(sen)o(tations,)d(as)h(w)o(ell)g(as)f(the)h(naming)g (con)o(v)o(en)o(tions)g(used)g(for)f(expressing)i(this)f(standard.)19 b(The)14 b(actual)75 1085 y(calling)j(sequences)f(are)f(de\014ned)i (elsewhere.)166 1144 y(It)23 b(is)g(exp)q(ected)h(that)e(an)o(y)g(F)l (ortran)g(90)g(and)h(C++)g(implemen)o(tations)h(use)f(the)g(F)l(ortran) f(77)75 1200 y(and)f(ANSI)h(C)e(bindings,)k(resp)q(ectiv)o(ely)l(.)39 b(Although)22 b(w)o(e)e(consider)i(it)f(premature)g(to)f(de\014ne)i (other)75 1257 y(bindings)e(to)d(F)l(ortran)g(90)g(and)h(C++,)h(the)f (curren)o(t)f(bindings)j(are)e(designed)h(to)e(encourage,)i(rather)75 1313 y(than)c(discourage,)g(exp)q(erimen)o(tation)i(with)e(b)q(etter)g (bindings)i(whic)o(h)f(migh)o(t)f(b)q(e)h(adopted)g(later.)166 1371 y(There)i(are)g(sev)o(eral)g(imp)q(ortan)o(t)f(language)h(binding) i(issues)f(not)e(addressed)i(b)o(y)e(this)i(standard.)75 1428 y(It)f(is)g(b)q(ey)o(ond)h(the)f(scop)q(e)g(of)g(this)g(standard)g (to)f(discuss)i(the)f(in)o(terop)q(erabilit)o(y)i(of)d(message)h (passing)75 1484 y(b)q(et)o(w)o(een)c(languages.)19 b(Although)c(it)e (w)o(ould)i(b)q(e)f(con)o(v)o(enien)o(t)g(to)f(b)q(e)h(able)h(to)e (guaran)o(tee)g(that)f(messages)75 1541 y(sen)o(t)k(b)q(et)o(w)o(een)h (languages)f(w)o(ere)h(prop)q(erly)g(in)o(terpreted,)g(the)f(matc)o (hing)h(of)f(t)o(yp)q(es)g(across)g(languages)75 1597 y(prev)o(en)o(ts)f(the)h(inclusion)i(of)d(suc)o(h)h(a)f(guaran)o(tee)g (in)i(this)f(standard.)k(It)c(is)g(fully)h(exp)q(ected)g(that)d(man)o (y)75 1654 y(implemen)o(tations)i(will)g(ha)o(v)o(e)f(suc)o(h)g (features,)f(and)h(that)f(suc)o(h)h(features)g(are)f(a)h(sign)g(of)f (the)h(qualit)o(y)g(of)75 1710 y(the)g(implemen)o(tation.)166 1851 y Ff(Discussion:)f Fe(There)f(w)o(as)e(some)g(informal)d (discussion)k(of)f(this)g(issue)h(at)g(the)g(last)f(meeting.)16 b(Is)c(it)f(p)q(ossible)75 1908 y(to)j(sa)o(y)f(something)g(stronger?) 75 2145 y Fg(5.2)70 b(Data)23 b(T)n(yp)r(es)g(and)g(Naming)f(Con)n(v)n (en)n(tions)75 2250 y Fk(All)15 b(named)f(constan)o(ts,)f(routine)h (names,)g(and)g(v)m(ariable)h(names)f(will)h(b)q(egin)g(with)f(the)g (letters)g(\\MPI".)75 2306 y(In)21 b(the)f(C)g(binding,)j(these)d(will) i(b)q(e)f(upp)q(er)g(case,)g(with)f(all)h(remaining)h(letters)e(in)h (lo)o(w)o(er)f(case.)34 b(In)75 2363 y(F)l(ortran,)14 b(the)h(en)o(tire)h(name)f(will)i(b)q(e)f(lo)o(w)o(er)e(case.)166 2421 y(Handles)e(are)g(represen)o(ted)f(as)h(in)o(tegers)f(in)h(F)l (ortran)f(and)g(as)g(p)q(oin)o(ters)h(to)f(structures)g(in)i(C.)d(T)o (yp)q(ed)75 2478 y(comm)o(unication)20 b(routines)g(supp)q(ort)g Fl(string)p Fk(s,)g Fl(double)j(precision)p Fk(,)e Fl(real)p Fk(,)f(and)g Fl(in)o(teger)f Fk(data)g(in)75 2534 y(F)l(ortran.)34 b(Null-terminated)23 b Fl(string)p Fk(s,)e Fl(double)p Fk(,)h Fl(real)p Fk(,)g Fl(short)p Fk(,)f Fl(c)o(har)p Fk(,)g(and)g Fl(long)g Fk(are)f(supp)q(orted)75 2591 y(in)g(C.)e(In)i(addition,)g(a)f(sp)q(ecial)h Fl(b)o(yte)f Fk(t)o(yp)q(e)g(is)g(supp)q(orted)g(in)h(b)q(oth)f(languages.)31 b(This)20 b(t)o(yp)q(e)f(allo)o(ws)75 2647 y(comm)o(unication)h(to)f(b) q(e)h(p)q(erformed)g(with)g(no)f(t)o(yp)q(e)h(con)o(v)o(ersion)g(at)f (all.)33 b(In)21 b(C,)d(the)i(de\014nitions)h(of)75 2704 y(named)14 b(constan)o(ts,)f(function)i(protot)o(yp)q(es,)f(and)g (aggregate)f(t)o(yp)q(e)h(information)g(m)o(ust)g(b)q(e)h(supplied)h (in)964 2828 y(5)p eop %%Page: 6 9 6 8 bop 75 -100 a Fk(6)977 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15 b(BINDING)290 81 y Fc(double)23 b(precision)f(a)290 138 y(call)h(foo\(a\))385 194 y(.)385 251 y(.)385 307 y(.)290 363 y(subroutine)f(foo\(b\))290 420 y(integer)h(b)75 568 y Fk(Figure)e(5.1:)29 b(This)21 b(is)g(an)f(example)h(of)f(calling) i(a)e(routine)h(with)g(mismatc)o(hed)f(formal)g(and)h(actual)75 624 y(parameters.)75 768 y(an)15 b(include)j(\014le)e Fc(mpi.h)p Fk(.)75 941 y Fg(5.3)70 b(F)-6 b(ortran)24 b(77)g(Binding)e(Issues)75 1053 y Fk(There)17 b(are)g(sev)o(eral)g(p)q (oin)o(ts)h(w)o(ere)f(this)g(standard)g(div)o(erges)h(from)e(the)h (ANSI)h(F)l(ortran)e(77)h(standard.)75 1109 y(Unless)j(explicitly)i (stated,)d(the)h(MPI)f(F77)f(binding)j(is)f(consisten)o(t)f(with)g (ANSI)h(standard)f(F)l(ortran)75 1166 y(77.)26 b(These)18 b(exceptions)g(are)g(consisten)o(t)f(with)h(common)f(practice)h(in)h (the)e(F)l(ortran)f(comm)o(unit)o(y)l(.)27 b(In)75 1222 y(particular:)143 1337 y Fb(\017)c Fk(Iden)o(ti\014ers)16 b(are)f(limited)i(to)e(31,)f(not)h(six,)g(signi\014can)o(t)h(c)o (haracters.)143 1452 y Fb(\017)23 b Fk(Iden)o(ti\014ers)16 b(ma)o(y)f(con)o(tain)g(underscores)h(after)e(the)h(\014rst)g(c)o (haracter.)143 1567 y Fb(\017)23 b Fk(The)14 b(t)o(yp)q(es)f(of)g(the)h (formal)f(parameter)g(list)i(ma)o(y)e(not)g(matc)o(h)g(the)h(calling)h (parameter)e(list.)20 b(\(An)189 1623 y(example)c(is)f(giv)o(en)h(in)g (\014gure)f(5.3.\))143 1738 y Fb(\017)23 b Fk(Although)16 b(not)g(required,)g(it)h(is)f(strongly)g(suggested)f(that)h(named)g (constan)o(ts)f(b)q(e)h(pro)o(vided)h(in)189 1794 y(an)e(include)i (\014le.)75 2021 y Fg(5.4)70 b(C)22 b(Binding)g(Issues)75 2132 y Fk(W)l(e)15 b(use)h(the)f(ANSI)h(C)f(declaration)h(format.)75 2306 y Fg(5.5)70 b(Sp)r(eci\014c)21 b(Bindings)75 2500 y Ff(Discussion:)13 b Fe(What)c(w)o(ould)g(b)q(e)h(the)g(b)q(est)h(w)o (a)o(y)e(to)g(presen)o(t)i(the)f(follo)o(wing)d(information?)14 b(One)c(big)f(alphab)q(etical)75 2556 y(list?)16 b(In)10 b(order)h(of)e(presen)o(tation)i(in)e(the)i(individual)d(c)o(hapters?) 18 b(By)10 b(c)o(hapter)h(but)f(alphab)q(etical)f(within)g(c)o(hapter?) 75 2613 y(C)14 b(and)g(F)m(ortran)f(mixed)g(or)g(separate?)p eop %%Page: 7 10 7 9 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1213 b Fk(7)75 45 y Fa(5.5.1)55 b(C)19 b(bindings)g(for)g(P)n(oin)n(t-to-P)n (oin)n(t)g(Comm)n(unication)75 138 y Fk(These)d(are)e(in)i(alphab)q (etical)i(order.)75 199 y Fc(MPI)p 150 199 15 2 v 17 w(append)p 311 199 V 16 w(contiguous\()k(MPI)p 685 199 V 17 w(BD)i(bd,)f(void*)g(start,)h(int)f(count,)393 255 y(MPI)p 468 255 V 17 w(DATATYPE)g(datatype)f(\))75 345 y(MPI)p 150 345 V 17 w(append)p 311 345 V 16 w(hindexed\()h(MPI)p 638 345 V 17 w(BD)g(bd,)h(void*)f(start,)g(int)g(count,)g(int)h(*index) p 1634 345 V 16 w(array,)393 402 y(MPI)p 468 402 V 17 w(DATATYPE)f(datatype)f(\))75 492 y(MPI)p 150 492 V 17 w(append)p 311 492 V 16 w(hvec\()h(MPI)p 542 492 V 17 w(BD)h(bd,)f(void*)g(start,)g(int)h(count,)f(int)g(stride,)g(int)h (lenblk,)393 548 y(MPI)p 468 548 V 17 w(DATATYPE)f(datatype)f(\))75 639 y(MPI)p 150 639 V 17 w(append)p 311 639 V 16 w(indexed\()h(MPI)p 614 639 V 17 w(BD)g(bd,)h(void*)f(start,)g(int)g(count,)g(int)h(*index) p 1610 639 V 16 w(array,)393 695 y(MPI)p 468 695 V 17 w(DATATYPE)f(datatype)f(\))75 785 y(MPI)p 150 785 V 17 w(append)p 311 785 V 16 w(vec\()h(MPI)p 518 785 V 17 w(BD)h(bd,)f(int)h(count,)f(int)g(stride,)g(int)h(lenblk,)393 842 y(MPI)p 468 842 V 17 w(DATATYPE)f(datatype)f(\))75 932 y(MPI)p 150 932 V 17 w(associated\(MPI)p 503 932 V 15 w(HANDLE)h(handle,)g(MPI)p 948 932 V 17 w(HANDLE)g(handle)p 1276 932 V 16 w(type)g(\))75 1022 y(MPI)p 150 1022 V 17 w(cancel\()g(MPI)p 430 1022 V 16 w(HANDLE)g(handle,)g(int)h(flag)f (\))75 1113 y(MPI)p 150 1113 V 17 w(commit)p 311 1113 V 16 w(buffer\()g(MPI)p 590 1113 V 17 w(BD)g(bd)h(\))75 1203 y(MPI)p 150 1203 V 17 w(create)p 311 1203 V 16 w(status\()f(MPI)p 590 1203 V 17 w(HANDLE)g(handle)g(\))75 1293 y(MPI)p 150 1293 V 17 w(create)p 311 1293 V 16 w(buffer\()g(MPI)p 590 1293 V 17 w(BD)g(*bd,)h(MPI)p 870 1293 V 16 w(LIFETIME)f (persistence)g(\))75 1383 y(MPI)p 150 1383 V 17 w(free\()g(MPI)p 382 1383 V 17 w(HANDLE)g(handle)g(\))75 1474 y(MPI)p 150 1474 V 17 w(get)p 239 1474 V 17 w(len\()g(int)g(count,)g(MPI)p 709 1474 V 17 w(STATUS)g(*status,)g(MPI)p 1180 1474 V 17 w(BD)g(bd)h(\))75 1564 y(MPI)p 150 1564 V 17 w(init)p 263 1564 V 16 w(recv)g(\()f(MPI)p 518 1564 V 17 w(HANDLE)g(handle,)g (MPI)p 965 1564 V 17 w(BD)h(bd,)f(int)g(source,)g(MPI)p 1507 1564 V 17 w(TAG)h(tag,)393 1620 y(MPI)p 468 1620 V 17 w(COMMUNICATOR)e(context,)h(MPI)p 1082 1620 V 17 w(LIFETIME)f(persistence)h(\))75 1710 y(MPI)p 150 1710 V 17 w(init)p 263 1710 V 16 w(rsend)h(\()f(MPI)p 542 1710 V 17 w(HANDLE)g(handle,)g(MPI)p 989 1710 V 17 w(BD)g(bd,)h(int)f (dest,)g(MPI)p 1483 1710 V 17 w(TAG)h(tag,)393 1767 y(MPI)p 468 1767 V 17 w(COMMUNICATOR)e(context,)h(MPI)p 1082 1767 V 17 w(LIFETIME)f(persistence)h(\))75 1857 y(MPI)p 150 1857 V 17 w(init)p 263 1857 V 16 w(send)h(\()f(MPI)p 518 1857 V 17 w(HANDLE)g(handle,)g(MPI)p 965 1857 V 17 w(BD)h(bd,)f(int)g(dest,)h(MPI)p 1460 1857 V 16 w(TAG)g(tag,)393 1914 y(MPI)p 468 1914 V 17 w(COMUNICATOR)e(context,)h(MPI)p 1058 1914 V 17 w(LIFETIME)g(persistence)f(\))75 2004 y(MPI)p 150 2004 V 17 w(init)p 263 2004 V 16 w(ssend)i(\()f(MPI)p 542 2004 V 17 w(HANDLE)g(handle,)g(MPI)p 989 2004 V 17 w(BD)g(bd,)h(int)f(dest,)g(MPI)p 1483 2004 V 17 w(TAG)h(tag,)393 2060 y(MPI)p 468 2060 V 17 w(COMMUNICATOR)e(context,)h(MPI)p 1082 2060 V 17 w(LIFETIME)f(persistence)h(\))75 2151 y(MPI)p 150 2151 V 17 w(iprobe\()g(int)g(source,)g(MPI)p 716 2151 V 17 w(TAG)g(tag,)h(MPI)p 1020 2151 V 16 w(COMMUNICATOR)f (context,)f(int)i(flag,)393 2207 y(type,)f(MPI)p 611 2207 V 17 w(STATUS)g(*status)g(\))75 2297 y(MPI)p 150 2297 V 17 w(irecv\()g(MPI)p 406 2297 V 17 w(HANDLE)g(handle,)g(MPI)p 853 2297 V 16 w(BD)h(bd,)f(int)h(source,)f(MPI)p 1395 2297 V 16 w(TAG)h(tag,)393 2354 y(MPI)p 468 2354 V 17 w(COMMUNICATOR)e(context)h(\))75 2444 y(MPI)p 150 2444 V 17 w(irecvc\()g(MPI)p 430 2444 V 16 w(HANDLE)g(handle,)g(void*)h (start,)f(int)g(count,)g(MPI)p 1449 2444 V 17 w(DATATYPE)393 2500 y(datatype,)g(int)g(source,)g(MPI)p 993 2500 V 17 w(TAG)g(tag,)h(MPI)p 1297 2500 V 16 w(COMMUNICATOR)f(context,)393 2557 y(MPI)p 468 2557 V 17 w(STATUS)g(*status)g(\))75 2647 y(MPI)p 150 2647 V 17 w(irsend)g(\()h(MPI)p 454 2647 V 16 w(HANDLE)f(handle,)g(MPI)p 900 2647 V 17 w(BD)h(bd,)f(int)h (dest,)f(MPI)p 1395 2647 V 16 w(TAG)h(tag,)393 2704 y(MPI)p 468 2704 V 17 w(COMMUNICATOR)e(context)h(\))p eop %%Page: 8 11 8 10 bop 75 -100 a Fk(8)977 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15 b(BINDING)75 45 y Fc(MPI)p 150 45 15 2 v 17 w(irsendc)23 b(\()g(MPI)p 477 45 V 17 w(HANDLE)g(handle,)g(void*)g(start,)g(int)h (count,)393 102 y(MPI)p 468 102 V 17 w(DATATYPE)f(datatype,)f(int)i (dest,)f(MPI)p 1249 102 V 17 w(TAG)g(tag,)h(MPI)p 1553 102 V 16 w(COMMUNICATOR)393 158 y(context)f(\))75 246 y(MPI)p 150 246 V 17 w(isend)g(\()h(MPI)p 430 246 V 16 w(HANDLE)f(handle,)g(MPI)p 876 246 V 17 w(BD)h(bd,)f(int)h(dest,)f(MPI) p 1371 246 V 17 w(TAG)g(tag,)393 302 y(MPI)p 468 302 V 17 w(COMMUNICATOR)f(context)h(\))75 390 y(MPI)p 150 390 V 17 w(isendc)g(\()h(MPI)p 454 390 V 16 w(HANDLE)f(handle,)g(void*) g(start,)g(int)h(count,)393 446 y(MPI)p 468 446 V 17 w(DATATYPE)f(datatype,)f(int)i(dest,)f(MPI)p 1249 446 V 17 w(TAG)g(tag,)h(MPI)p 1553 446 V 16 w(COMMUNICATOR)393 503 y(context)f(\))75 591 y(MPI)p 150 591 V 17 w(issend)g(\()h(MPI)p 454 591 V 16 w(HANDLE)f(handle,)g(MPI)p 900 591 V 17 w(BD)h(bd,)f(int)h(dest,)f(MPI)p 1395 591 V 16 w(TAG)h(tag,)393 647 y(MPI)p 468 647 V 17 w(COMMUNICATOR)e(context)h(\))75 735 y(MPI)p 150 735 V 17 w(issendc)g(\()g(MPI)p 477 735 V 17 w(HANDLE)g(handle,)g(void*)g(start,)g(int)h(count,)393 791 y(MPI)p 468 791 V 17 w(DATATYPE)f(datatype,)f(int)i(dest,)f(MPI)p 1249 791 V 17 w(TAG)g(tag,)h(MPI)p 1553 791 V 16 w(COMMUNICATOR)393 848 y(context)f(\))75 936 y(MPI)p 150 936 V 17 w(probe\()g(int)g (source,)g(MPI)p 692 936 V 17 w(TAG)g(tag,)h(MPI)p 996 936 V 16 w(COMMUNICATOR)f(context,)393 992 y(MPI)p 468 992 V 17 w(DATATYPE)g(datatype,)f(MPI)p 1010 992 V 17 w(STATUS)h(*status)g(\))75 1080 y(MPI)p 150 1080 V 17 w(query\()g(MPI)p 406 1080 V 17 w(HANDLE)g(handle,)g(int)g(count,)g (int)g(source,)g(MPI)p 1401 1080 V 17 w(TAG)h(tag\))75 1168 y(MPI)p 150 1168 V 17 w(recv\()f(MPI)p 382 1168 V 17 w(BD)g(bd,)h(int)f(source,)g(MPI)p 924 1168 V 17 w(TAG)g(tag,)h(MPI)p 1228 1168 V 16 w(COMMUNICATOR)f(context,)393 1224 y(MPI)p 468 1224 V 17 w(STATUS)g(*status)g(\))75 1312 y(MPI)p 150 1312 V 17 w(recvc)g(\()h(void*)f(start,)g(int)g (count,)g(MPI)p 1002 1312 V 17 w(DATATYPE)g(datatype,)g(int)g(source,) 393 1368 y(MPI)p 468 1368 V 17 w(TAG)g(tag,)h(MPI)p 772 1368 V 16 w(COMMUNICATOR)f(context,)f(MPI)p 1385 1368 V 17 w(STATUS)h(*status)g(\))75 1456 y(MPI)p 150 1456 V 17 w(rsend)g(\()h(MPI)p 430 1456 V 16 w(BD)g(bd,)f(int)h(dest,)f(MPI) p 924 1456 V 17 w(TAG)g(tag,)h(MPI)p 1228 1456 V 16 w(COMMUNICATOR)f (context)g(\))75 1544 y(MPI)p 150 1544 V 17 w(rsendc)g(\()h(void*)f (start,)g(int)g(count,)g(MPI)p 1026 1544 V 17 w(DATATYPE)g(datatype,)f (int)i(dest,)393 1600 y(MPI)p 468 1600 V 17 w(TAG)f(tag,)h(MPI)p 772 1600 V 16 w(COMMUNICATOR)f(context)g(\))75 1688 y(MPI)p 150 1688 V 17 w(send)g(\()h(MPI)p 406 1688 V 17 w(BD)f(bd,)h(int)f (dest,)g(MPI)p 900 1688 V 17 w(TAG)g(tag,)h(MPI)p 1204 1688 V 17 w(COMMUNICATOR)e(context)h(\))75 1776 y(MPI)p 150 1776 V 17 w(sendc)g(\()h(void*)f(start,)g(int)g(count,)g(MPI)p 1002 1776 V 17 w(DATATYPE)g(datatype,)g(int)g(dest,)393 1832 y(MPI)p 468 1832 V 17 w(TAG)g(tag,)h(MPI)p 772 1832 V 16 w(COMMUNICATOR)f(context)g(\))75 1920 y(MPI)p 150 1920 V 17 w(ssend)g(\()h(MPI)p 430 1920 V 16 w(BD)g(bd,)f(int)h(dest,)f (MPI)p 924 1920 V 17 w(TAG)g(tag,)h(MPI)p 1228 1920 V 16 w(COMMUNICATOR)f(context)g(\))75 2008 y(MPI)p 150 2008 V 17 w(ssendc)g(\()h(void*)f(start,)g(int)g(count,)g(MPI)p 1026 2008 V 17 w(DATATYPE)g(datatype,)f(int)i(dest,)393 2064 y(MPI)p 468 2064 V 17 w(TAG)f(tag,)h(MPI)p 772 2064 V 16 w(COMMUNICATOR)f(context)g(\))75 2152 y(MPI)p 150 2152 V 17 w(start\()g(MPI)p 406 2152 V 17 w(HANDLE)g(handle)g(\))75 2240 y(MPI)p 150 2240 V 17 w(status)g(\()h(MPI)p 454 2240 V 16 w(HANDLE)f(handle,)g(flag,)g(MPI)p 1043 2240 V 17 w(STATUS)g(*status)g(\))75 2327 y(MPI)p 150 2327 V 17 w(statusany)f(\()i(MPI)p 525 2327 V 17 w(HANDLE)f(*handle)p 877 2327 V 16 w(list,)g(int)h(count,)f(int)g(index,)393 2384 y(MPI)p 468 2384 V 17 w(STATUS)g(*status)g(\))75 2472 y(MPI)p 150 2472 V 17 w(wait)g(\()h(MPI)p 406 2472 V 17 w(HANDLE)f(handle,)g(MPI)p 853 2472 V 16 w(STATUS)g(*status)g(\)) 75 2559 y(MPI)p 150 2559 V 17 w(waitall\()g(MPI)p 454 2559 V 16 w(HANDLE)g(*handle)p 805 2559 V 17 w(list,)g(int)g(count,)g (list)p 1323 2559 V 17 w(of)p 1388 2559 V 17 w(return)p 1549 2559 V 16 w(handles\))75 2647 y(MPI)p 150 2647 V 17 w(waitany)g(\()g(MPI)p 477 2647 V 17 w(HANDLE)g(*handle)p 829 2647 V 16 w(list,)h(int)f(count,)g(int)h(index,)393 2704 y(MPI)p 468 2704 V 17 w(STATUS)f(*status)g(\))p eop %%Page: 9 12 9 11 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1213 b Fk(9)75 45 y Fa(5.5.2)55 b(C)19 b(Bindings)g(for)f(Collectiv)n(e)f (Comm)n(unication)g(Chapter)75 142 y Fk(These)f(are)e(in)i(order)f(of)g (presen)o(tation)g(in)h(the)g(Collectiv)o(e)g(Comm)o(unication)g(c)o (hapter.)75 204 y Fc(MPI)p 150 204 15 2 v 17 w(comm)p 263 204 V 16 w(init\()24 b(MPI)p 495 204 V 16 w(GROUP)g(group)f(\))75 296 y(MPI)p 150 296 V 17 w(rank\()g(MPI)p 382 296 V 17 w(GROUP)g(group,)g(int)g(rank)h(\))75 388 y(MPI)p 150 388 V 17 w(gsize\()f(MPI)p 406 388 V 17 w(GROUP)g(group,)g(int)g(size)h (\))75 481 y(MPI)p 150 481 V 17 w(barrier\()f(MPI)p 454 481 V 16 w(GROUP)g(group)h(\))75 573 y(MPI)p 150 573 V 17 w(synch\()f(MPI)p 406 573 V 17 w(GROUP)g(group,)g(MPI)p 805 573 V 17 w(MAP)g(map)g(\))75 665 y(MPI)p 150 665 V 17 w(bcast\()g(MPI)p 406 665 V 17 w(BD)g(bd,)h(MPI)p 662 665 V 16 w(GROUP)g(group,)f(int)g(root)g(\))75 757 y(MPI)p 150 757 V 17 w(bcastc\()g(buf,)g(int)g(len,)h(MPI)p 764 757 V 17 w(DATATYPE)e(datatype,)h(MPI)p 1306 757 V 17 w(GROUP)g(group,)g(int)g(root)h(\))75 849 y(MPI)p 150 849 V 17 w(gather\()f(MPI)p 430 849 V 16 w(BD)h(inbd,)f(list)p 757 849 V 17 w(of)p 822 849 V 17 w(MPI)p 911 849 V 17 w(BD)g(outbds,)g(MPI)p 1262 849 V 17 w(GROUP)g(group,)g(int)g(root)h (\))75 941 y(MPI)p 150 941 V 17 w(gatherc\()f(void*)g(inbuf,)g(void*)g (outbuf,)g(int)g(len,)h(MPI)p 1313 941 V 16 w(DATATYPE)f(datatype,)393 998 y(MPI)p 468 998 V 17 w(GROUP)g(group,)g(int)h(root)f(\))75 1090 y(MPI)p 150 1090 V 17 w(scatter\()g(list)p 478 1090 V 16 w(of)p 542 1090 V 17 w(MPI)p 631 1090 V 17 w(BD)g(inbds,)g(MPI)p 958 1090 V 17 w(BD)h(outbd,)f(MPI)p 1286 1090 V 17 w(GROUP)g(group,)g (int)g(root)h(\))75 1182 y(MPI)p 150 1182 V 17 w(scatterc\()e(void*)i (inbuf,)f(void*)g(outbuf,)g(int)g(len,)g(MPI)p 1336 1182 V 17 w(DATATYPE)g(datatype,)393 1238 y(MPI)p 468 1238 V 17 w(GROUP)g(group,)g(int)h(root)f(\))75 1331 y(MPI)p 150 1331 V 17 w(allscatter\()f(MPI)p 525 1331 V 17 w(BD)h(inbds[],)g (MPI)p 900 1331 V 17 w(BD)h(outbds[],)e(MPI)p 1299 1331 V 17 w(GROUP)h(group)g(\))75 1423 y(MPI)p 150 1423 V 17 w(allscatterc\()f(void*)h(inbuf,)g(void*)g(outbuf,)g(int)h(len,)f (MPI)p 1408 1423 V 17 w(DATATYPE)g(datatype,)393 1479 y(MPI)p 468 1479 V 17 w(GROUP)g(group)g(\))75 1571 y(MPI)p 150 1571 V 17 w(allcast\()g(MPI)p 454 1571 V 16 w(BD)h(inbds[],)f(MPI)p 829 1571 V 16 w(BD)h(outbds[],)f(MPI)p 1228 1571 V 16 w(GROUP)h(group)f(\))75 1663 y(MPI)p 150 1663 V 17 w(allcastc\()f (void*)i(inbuf,)f(void*)g(outbuf,)g(int)g(len,)g(MPI)p 1336 1663 V 17 w(DATATYPE)g(datatype,)393 1720 y(MPI)p 468 1720 V 17 w(GROUP)g(group)g(\))75 1812 y(MPI)p 150 1812 V 17 w(reduce\()g(MPI)p 430 1812 V 16 w(BD)h(inbd,)f(MPI)p 733 1812 V 17 w(BD)h(outbd,)f(MPI)p 1061 1812 V 16 w(GROUP)h(group,)f (int)g(root,)g(MPI)p 1698 1812 V 17 w(OP)h(op)393 1868 y(\))75 1961 y(MPI)p 150 1961 V 17 w(reducec\()f(void*)g(inbuf,)g (void*)g(outbuf,)g(int)g(len,)h(MPI)p 1313 1961 V 16 w(DATATYPE)f(datatype,)393 2017 y(MPI)p 468 2017 V 17 w(GROUP)g(group,)g(int)h(root,)f(MPI)p 1106 2017 V 17 w(OP)g(op)h(\))75 2109 y(MPI)p 150 2109 V 17 w(user)p 263 2109 V 16 w(reduce\()f(MPI)p 542 2109 V 17 w(BD)h(inbd,)f(MPI)p 846 2109 V 17 w(BD)g(outbd,)g(MPI)p 1173 2109 V 17 w(GROUP)g(group,)g (int)h(root,)393 2166 y(void)f(*userfunc\(\),)g(int)g(unitsize)g(\))75 2258 y(MPI)p 150 2258 V 17 w(user)p 263 2258 V 16 w(reducec\()g(void*)g (inbuf,)g(void*)h(outbuf,)e(int)i(len,)f(MPI)p 1425 2258 V 17 w(DATATYPE)g(datatype,)393 2314 y(MPI)p 468 2314 V 17 w(GROUP)g(group,)g(int)h(root,)f(void)g(*userfunc\(\),)f(unitsize) h(\))75 2406 y(MPI)p 150 2406 V 17 w(allreduce\()f(MPI)p 501 2406 V 17 w(BD)i(inbd,)f(MPI)p 805 2406 V 17 w(BD)g(outbd,)g(MPI)p 1132 2406 V 17 w(GROUP)g(group,)g(MPI)p 1531 2406 V 17 w(OP)h(op)f(\))75 2499 y(MPI)p 150 2499 V 17 w(allreducec\()f(void*)h (inbuf,)g(void*)h(outbuf,)e(int)i(len,)f(MPI)p 1384 2499 V 17 w(DATATYPE)g(datatype,)393 2555 y(MPI)p 468 2555 V 17 w(GROUP)g(group,)g(MPI)p 867 2555 V 17 w(OP)h(op)f(\))75 2647 y(MPI)p 150 2647 V 17 w(user)p 263 2647 V 16 w(allreduce\()g(MPI)p 614 2647 V 17 w(BD)g(inbd,)g(MPI)p 917 2647 V 17 w(BD)h(outbd,)f(MPI)p 1245 2647 V 17 w(GROUP)g(group,)393 2704 y(void)g(*userfunc\(\)\))p eop %%Page: 10 13 10 12 bop 75 -100 a Fk(10)954 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15 b(BINDING)75 45 y Fc(MPI)p 150 45 15 2 v 17 w(user)p 263 45 V 16 w(allreducec\()23 b(void*)g(inbuf,)g(void*) g(outbuf,)g(int)h(len,)393 102 y(MPI)p 468 102 V 17 w(DATATYPE)f (datatype,)f(MPI)p 1010 102 V 17 w(GROUP)h(group,)g(void)h (*userfunc\(\)\))75 189 y(MPI)p 150 189 V 17 w(scan\()f(MPI)p 382 189 V 17 w(BD)g(inbd,)g(MPI)p 685 189 V 17 w(BD)h(outbd,)f(MPI)p 1013 189 V 17 w(GROUP)g(group,)g(MPI)p 1412 189 V 17 w(OP)g(op)h(\))75 277 y(MPI)p 150 277 V 17 w(scanc\()f(void*)g(inbuf,)g (void*)g(outbuf,)g(int)h(len,)f(MPI)p 1265 277 V 17 w(DATATYPE)f (datatype,)393 333 y(MPI)p 468 333 V 17 w(GROUP)h(group,)g(MPI)p 867 333 V 17 w(OP)h(op)f(\))75 421 y(MPI)p 150 421 V 17 w(user)p 263 421 V 16 w(scan\()h(MPI)p 495 421 V 16 w(BD)g(inbd,)f(MPI)p 798 421 V 17 w(BD)g(outbd,)h(MPI)p 1126 421 V 16 w(GROUP)f(group,)h(void)f(*userfunc\(\))393 477 y(\))75 565 y(MPI)p 150 565 V 17 w(user)p 263 565 V 16 w(scanc\()g(void*)h(inbuf,)f(void*)g(outbuf,)g(int)g(len,)h(MPI)p 1378 565 V 16 w(DATATYPE)f(datatype,)393 621 y(MPI)p 468 621 V 17 w(GROUP)g(group,)g(void)g(*userfunc\(\)\))75 780 y Fa(5.5.3)55 b(F)-5 b(ortran)19 b(Bindings)g(for)f(P)n(oin)n (t-to-P)n(oin)n(t)i(Routines)75 868 y Fc(mpi)p 150 868 V 17 w(append)p 311 868 V 16 w(contiguous\()i(bd,)i(start,)f(count,)g (datatype)g(\))170 924 y(real)h(start\(*\))170 981 y(integer)f(bd,)h (count,)f(dataype)75 1068 y(mpi)p 150 1068 V 17 w(append)p 311 1068 V 16 w(hindexed\()g(bd,)g(start,)g(count,)g(index)p 1115 1068 V 17 w(array,)g(datatype)g(\))170 1125 y(real)h(start\(*\)) 170 1181 y(integer)f(index)p 484 1181 V 17 w(array\(*\))170 1238 y(integer)g(bd,)h(count,)f(datatype)75 1325 y(mpi)p 150 1325 V 17 w(append)p 311 1325 V 16 w(hvec\()g(bd,)h(start,)f (count,)g(stride,)g(lenblk,)g(datatype)f(\))170 1382 y(real)i(start\(*\))170 1438 y(integer)f(bd,)h(count,)f(stride,)g (lenblk,)g(datatype)75 1526 y(mpi)p 150 1526 V 17 w(append)p 311 1526 V 16 w(indexed\()g(bd,)g(start,)g(count,)g(index)p 1091 1526 V 17 w(array,)g(datatype)g(\))170 1582 y(real)h(start\(*\)) 170 1639 y(integer)f(index)p 484 1639 V 17 w(array\(*\))170 1695 y(integer)g(bd,)h(count,)f(datatype)75 1783 y(mpi)p 150 1783 V 17 w(append)p 311 1783 V 16 w(vec\()g(bd,)h(count,)f (stride,)g(lenblk,)g(datatype)g(\))170 1839 y(integer)g(bd,)h(count,)f (stride,)g(lenblk,)g(datatype)75 1927 y(mpi)p 150 1927 V 17 w(associated\()f(handle,)h(handle)p 788 1927 V 16 w(type)h(\))170 1983 y(integer)f(handle,)g(handle)p 699 1983 V 17 w(type)75 2071 y(mpi)p 150 2071 V 17 w(cancel\()g(handle,)g (flag)g(\))170 2127 y(integer)g(handle,)g(flag)75 2215 y(mpi)p 150 2215 V 17 w(commit)p 311 2215 V 16 w(buffer\()g(bd)h(\))170 2271 y(integer)f(bd)75 2359 y(mpi)p 150 2359 V 17 w(create)p 311 2359 V 16 w(buffer\()g(bd,)g(persistence)g(\))170 2415 y(integer)g(bd,)h(persistence)75 2503 y(mpi)p 150 2503 V 17 w(create)p 311 2503 V 16 w(status\()f(handle)g(\))170 2560 y(integer)g(handle)75 2647 y(mpi)p 150 2647 V 17 w(free\()g(handle)g(\))170 2704 y(integer)g(handle)p eop %%Page: 11 14 11 13 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1191 b Fk(11)75 45 y Fc(mpi)p 150 45 15 2 v 17 w(get)p 239 45 V 17 w(len\()23 b(count,)g(status,)g(bd)g(\))170 102 y(integer)g(count,)g(status,)g(bd)75 188 y(mpi)p 150 188 V 17 w(init)p 263 188 V 16 w(recv)h(\()f(handle,)g(bd,)h(source,)f (tag,)g(context,)g(persistence)f(\))170 245 y(integer)h(handle,)g(bd,)h (source,)f(tag,)g(context,)g(persistence)75 331 y(mpi)p 150 331 V 17 w(init)p 263 331 V 16 w(rsend)h(\()f(handle,)g(bd,)h (dest,)f(tag,)g(context,)g(persistence)f(\))170 388 y(integer)h (handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)75 474 y(mpi)p 150 474 V 17 w(init)p 263 474 V 16 w(send)h(\()f(handle,)g (bd,)h(dest,)f(tag,)g(context,)g(persistence)f(\))170 531 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence) 75 617 y(mpi)p 150 617 V 17 w(init)p 263 617 V 16 w(ssend)h(\()f (handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence)f(\))170 674 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context,)g(persistence) 75 761 y(mpi)p 150 761 V 17 w(iprobe\()g(source,)g(tag,)g(context,)g (flag,)g(type,)g(status)g(\))170 817 y(integer)g(source,)g(tag,)h (context,)e(flag,)i(type,)f(status)75 904 y(mpi)p 150 904 V 17 w(irecv\()g(handle,)g(bd,)g(source,)g(tag,)g(context)g(\))170 960 y(integer)g(handle,)g(bd,)h(source,)f(tag,)g(context)75 1047 y(mpi)p 150 1047 V 17 w(irecvc\()g(handle,)g(start,)g(count,)g (datatype,)f(source,)h(tag,)h(context,)e(status)h(\))170 1103 y(real)h(start\(*\))170 1160 y(integer)f(handle,)g(count,)g (datatype,)g(source,)g(tag,)g(context,)g(status)75 1246 y(mpi)p 150 1246 V 17 w(irsend)g(\()h(handle,)e(bd,)i(dest,)f(tag,)g (context)g(\))170 1303 y(integer)g(handle,)g(bd,)h(dest,)f(tag,)g (context)75 1389 y(mpi)p 150 1389 V 17 w(irsendc)g(\()g(handle,)g (start,)g(count,)g(datatype,)g(dest,)g(tag,)h(context)e(\))170 1446 y(real)i(start\(*\))170 1502 y(integer)f(handle,)g(count,)g (datatype,)g(dest,)g(tag,)g(context)75 1589 y(mpi)p 150 1589 V 17 w(isend)g(\()h(handle,)f(bd,)g(dest,)g(tag,)h(context)e(\)) 170 1645 y(integer)h(handle,)g(bd,)h(dest,)f(tag,)g(context)75 1732 y(mpi)p 150 1732 V 17 w(isendc)g(\()h(handle,)e(start,)h(count,)h (datatype,)e(dest,)h(tag,)h(context)f(\))170 1789 y(real)h(start\(*\)) 170 1845 y(integer)f(handle,)g(count,)g(datatype,)g(dest,)g(tag,)g (context)75 1932 y(mpi)p 150 1932 V 17 w(issend)g(\()h(handle,)e(bd,)i (dest,)f(tag,)g(context)g(\))170 1988 y(integer)g(handle,)g(bd,)h (dest,)f(tag,)g(context)75 2075 y(mpi)p 150 2075 V 17 w(issendc)g(\()g(handle,)g(start,)g(count,)g(datatype,)g(dest,)g(tag,)h (context)e(\))170 2131 y(real)i(start\(*\))170 2188 y(integer)f (handle,)g(count,)g(datatype,)g(dest,)g(tag,)g(context)75 2274 y(mpi)p 150 2274 V 17 w(probe\()g(source,)g(tag,)g(context,)g (datatype,)f(status)h(\))170 2331 y(integer)g(source,)g(tag,)h (context,)e(datatype,)h(status)75 2417 y(mpi)p 150 2417 V 17 w(query\()g(handle,)g(count,)g(source,)g(tag)g(\))170 2474 y(integer)g(handle,)g(count,)g(source,)g(tag)75 2560 y(mpi)p 150 2560 V 17 w(recv\()g(bd,)g(source,)g(tag,)h(context,)e (status)h(\))170 2617 y(integer)g(bd,)h(source,)f(tag,)g(context,)g (status)75 2704 y(mpi)p 150 2704 V 17 w(recvc)g(\(start,)g(count,)g (datatype,)g(source,)f(tag,)i(context,)f(status\))p eop %%Page: 12 15 12 14 bop 75 -100 a Fk(12)954 b Fd(CHAPTER)16 b(5.)34 b(LANGUA)o(GE)15 b(BINDING)170 45 y Fc(real)24 b(start\(*\))170 102 y(integer)f(count,)g(datatype,)g(source,)g(tag,)g(context,)g (status)75 189 y(mpi)p 150 189 15 2 v 17 w(rsend)g(\()h(bd,)f(dest,)g (tag,)h(context)f(\))170 246 y(integer)g(bd,)h(dest,)f(tag,)g(context) 75 333 y(mpi)p 150 333 V 17 w(rsendc)g(\(start,)g(count,)g(datatype,)f (dest,)i(tag,)f(context)g(\))170 390 y(real)h(start\(*\))170 446 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75 534 y(mpi)p 150 534 V 17 w(send)f(\()h(bd,)f(dest,)g(tag,)h(context)f (\))170 590 y(integer)g(bd,)h(dest,)f(tag,)g(context)75 678 y(mpi)p 150 678 V 17 w(sendc)g(\(start,)g(count,)g(datatype,)g (dest,)g(tag,)g(context)g(\))170 734 y(real)h(start\(*\))170 791 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75 878 y(mpi)p 150 878 V 17 w(ssend)f(\()h(bd,)f(dest,)g(tag,)h(context)f (\))170 935 y(integer)g(bd,)h(dest,)f(tag,)g(context)75 1022 y(mpi)p 150 1022 V 17 w(ssendc)g(\(start,)g(count,)g(datatype,)f (dest,)i(tag,)f(context)g(\))170 1079 y(real)h(start\(*\))170 1135 y(integer)f(count,)g(datatype,)g(dest,)g(tag,)h(context)75 1223 y(mpi)p 150 1223 V 17 w(start\()f(handle)g(\))170 1279 y(integer)g(handle)75 1367 y(mpi)p 150 1367 V 17 w(status)g(\()h(handle,)e(flag,)i(status)f(\))170 1423 y(integer)g(handle,)g(flag,)g(status)75 1511 y(mpi)p 150 1511 V 17 w(statusany)f(\()i(handle)p 597 1511 V 16 w(list,)g(count,)f(index,)g(status)g(\))170 1567 y(integer)g(handle) p 508 1567 V 17 w(list\(*\))170 1624 y(integer)g(count,)g(index,)g (status)75 1711 y(mpi)p 150 1711 V 17 w(wait)g(\()h(handle,)f(status)g (\))170 1768 y(integer)g(handle,)g(status)75 1855 y(mpi)p 150 1855 V 17 w(waitall\()g(handle)p 526 1855 V 16 w(list,)g(count,)g (list)p 948 1855 V 17 w(of)p 1013 1855 V 17 w(return)p 1174 1855 V 16 w(handles)g(\))170 1912 y(integer)g(handle)p 508 1912 V 17 w(list\(*\))170 1968 y(integer)g(count)170 2024 y(integer)g(list)p 460 2024 V 17 w(of)p 525 2024 V 17 w(return)p 686 2024 V 16 w(handles\(*\))75 2112 y(mpi)p 150 2112 V 17 w(waitany)g(\()g(handle)p 549 2112 V 17 w(list,)g(count,)g(index,)g(status)g(\))170 2168 y(integer)g(handle)p 508 2168 V 17 w(list\(*\))170 2225 y(integer)g(count,)g(index,)g(status)75 2383 y Fa(5.5.4)55 b(F)-5 b(ortran)19 b(Bindings)g(for)f(Collectiv)n(e)f(Comm)n(unciation) g(Chapter)75 2471 y Fk(These)f(are)e(not)h(done)h(y)o(et.)75 2528 y Fc(mpi)p 150 2528 V 17 w(comm)p 263 2528 V 16 w(init\()24 b(group)f(\))75 2616 y(mpi)p 150 2616 V 17 w(rank\()g(group,)g(rank)g(\))75 2704 y(mpi)p 150 2704 V 17 w(gsize\()g(group,)g(size)g(\))p eop %%Page: 13 16 13 15 bop 75 -100 a Fd(5.5.)34 b(SPECIFIC)15 b(BINDINGS)1191 b Fk(13)75 45 y Fc(mpi)p 150 45 15 2 v 17 w(barrier\()23 b(group)g(\))75 132 y(mpi)p 150 132 V 17 w(synch\()g(group,)g(map)g(\)) 75 218 y(mpi)p 150 218 V 17 w(bcast\()g(buffer)p 478 218 V 16 w(handle,)g(group,)g(root)g(\))75 304 y(mpi)p 150 304 V 17 w(bcastc\()g(buf,)g(len,)g(type,)g(group,)h(root)f(\))75 391 y(mpi)p 150 391 V 17 w(gather\()g(inhandle,)f(list)p 692 391 V 17 w(of)p 757 391 V 17 w(outhandles,)g(group,)h(root)h(\))75 477 y(mpi)p 150 477 V 17 w(gatherc\()f(inbuf,)g(outbuf,)f(inlen,)i (type,)f(group,)g(root)g(\))75 564 y(mpi)p 150 564 V 17 w(scatter\()g(list)p 478 564 V 16 w(of)p 542 564 V 17 w(inhandles,)g(outhandle,)f(group,)h(root)g(\))75 650 y(mpi)p 150 650 V 17 w(scatterc\()f(inbuf,)h(outbuf,)g(len,)h (type,)f(group,)g(root)g(\))75 737 y(mpi)p 150 737 V 17 w(allscatter\()f(list)p 549 737 V 17 w(of)p 614 737 V 17 w(inhandles,)g(list)p 989 737 V 17 w(of)p 1054 737 V 17 w(outhandles,)g(group)h(\))75 823 y(mpi)p 150 823 V 17 w(allscatterc\()f(inbuf,)h(outbuf,)g(len,)g(type,)g(group\))75 910 y(mpi)p 150 910 V 17 w(allcast\()g(inhandle,)f(list)p 716 910 V 17 w(of)p 781 910 V 17 w(outhandles,)g(group)h(\))75 996 y(mpi)p 150 996 V 17 w(allcastc\()f(inbuf,)h(outbuf,)g(len,)h (type,)f(group\))75 1083 y(mpi)p 150 1083 V 17 w(reduce\()g(inhandle,)f (outhandle,)h(group,)g(root,)g(op)h(\))75 1169 y(mpi)p 150 1169 V 17 w(reducec\()f(inbuf,)g(outbuf,)f(len,)i(type,)f(group,)g (root,)g(op)h(\))75 1255 y(mpi)p 150 1255 V 17 w(user)p 263 1255 V 16 w(reduce\()f(inhandle,)g(outhandle,)f(group,)h(root,)h (function,)e(unitsize)h(\))75 1342 y(mpi)p 150 1342 V 17 w(user)p 263 1342 V 16 w(reducec\()g(inbuf,)g(outbuf,)g(len,)g (type,)h(group,)f(root,)g(function,)f(unitsize)393 1398 y(\))75 1485 y(mpi)p 150 1485 V 17 w(allreduce\()g(inhandle,)h (outhandle,)f(group,)h(op)h(\))75 1571 y(mpi)p 150 1571 V 17 w(allreducec\()e(inbuf,)h(outbuf,)g(len,)g(type,)h(group,)f(op)g (\))75 1658 y(mpi)p 150 1658 V 17 w(user)p 263 1658 V 16 w(allreduce\()g(inhandle,)g(outhandle,)f(group,)h(function)g(\))75 1744 y(mpi)p 150 1744 V 17 w(user)p 263 1744 V 16 w(allreducec\()g (inbuf,)g(outbuf,)g(len,)g(type,)g(group,)g(function)g(\))75 1831 y(mpi)p 150 1831 V 17 w(scan\()g(inhandle,)g(outhandle,)f(group,)h (op)h(\))75 1917 y(mpi)p 150 1917 V 17 w(scanc\()f(inbuf,)g(outbuf,)g (len,)g(type,)g(group,)g(op)h(\))75 2004 y(mpi)p 150 2004 V 17 w(user)p 263 2004 V 16 w(scan\()g(inhandle,)e(outhandle,)h (group,)g(function)g(\))75 2090 y(mpi)p 150 2090 V 17 w(user)p 263 2090 V 16 w(scanc\()g(inbuf,)g(outbuf,)g(len,)h(type,)f (group,)g(function)g(\))p eop %%Page: 14 17 14 16 bop 75 356 a Fh(Chapter)34 b(6)75 564 y Fm(Correctness)40 b(Issues)952 2828 y Fk(14)p eop %%Page: 15 18 15 17 bop 75 356 a Fh(Chapter)34 b(7)75 564 y Fm(En)m(vironmen)m(tal)41 b(Managemen)m(t)f(and)75 689 y(Inquiry)952 2828 y Fk(15)p eop %%Page: 16 19 16 18 bop 75 356 a Fh(Chapter)34 b(8)75 564 y Fm(Pro\014ling)952 2828 y Fk(16)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF From owner-mpi-lang@CS.UTK.EDU Wed Jun 16 11:15:03 1993 Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib) id AA16506; Wed, 16 Jun 93 11:15:03 -0400 Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA20290; Wed, 16 Jun 93 11:15:13 -0400 X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 16 Jun 1993 11:15:12 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 AA20221; Wed, 16 Jun 93 11:15:04 -0400 Received: from donner.mcs.anl.gov by antares.mcs.anl.gov with SMTP id AA18953 (5.65c/IDA-1.4.4 for ); Wed, 16 Jun 1993 10:15:19 -0500 Message-Id: <199306161515.AA18953@antares.mcs.anl.gov> To: par@teak.cray.com (Peter Rigsbee) Cc: mpi-lang@cs.utk.edu Subject: Re: language binding draft In-Reply-To: Your message of "Wed, 16 Jun 1993 09:42:47 CDT." <9306161442.AA17492@teak18.cray.com> Date: Wed, 16 Jun 1993 10:15:18 -0500 From: Rusty Lusk Dear Peter, Thanks for your prompt comments. | | 1. You make the statement in 5.2 that "In Fortran, the entire name will be | lower case". Fortran 77 is case insensitive, and so the name 'mpi_free' | matches the name 'MPI_FREE' (as well as the name 'MpI_FrEe'). (I'm not sure | about Fortran 90, but I suspect the same applies.) | | The MPI document can use lower case because its easier to read and type in, | but should not make any comments about case sensitivity of Fortran compilers. | The primary problem here is with the symbols exported to and expected by the linkers. This always turns out to present a portability problem. We thought the safest thing would be to mandate that C routine names are mixed case, and that the Fortran would be monocase. Advice from all those who have ported mixed Fortran and C libraries to a wide variety of environments (and in so doing cursed the lack of standardization in this area) is welcome. | | 2. I'd question whether in the C bindings it is appropriate to use | upper case for MPI-specific types (MPI_TAG, MPI_HANDLE, etc.). Most of | the time, upper case is used for constants, and types have lower case names | (although for consistency, the "MPI_" prefix should be upper case). | I agree with you. The process of processing all those declarations was so mind-numbing that I accidentally lumped all the "mpi.h"-declared things into the same format, constants and typedefs alike. If I get a chance today, I will change the types. Regards, Rusty Lusk From owner-mpi-lang@CS.UTK.EDU Wed Jun 16 11:54:49 1993 Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib) id AA16907; Wed, 16 Jun 93 11:54:49 -0400 Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA23175; Wed, 16 Jun 93 11:54:48 -0400 X-Resent-To: mpi-lang@CS.UTK.EDU ; Wed, 16 Jun 1993 11:54:47 EDT Errors-To: owner-mpi-lang@CS.UTK.EDU Received: from timbuk.cray.com by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA23166; Wed, 16 Jun 93 11:54:45 -0400 Received: from teak18.cray.com by cray.com (4.1/CRI-MX 2.19) id AA01471; Wed, 16 Jun 93 10:55:03 CDT Received: by teak18.cray.com id AA17583; 4.1/CRI-5.6; Wed, 16 Jun 93 10:54:59 CDT From: par@teak.cray.com (Peter Rigsbee) Message-Id: <9306161554.AA17583@teak18.cray.com> Subject: Re: language binding draft To: lusk@mcs.anl.gov (Rusty Lusk) Date: Wed, 16 Jun 93 10:54:53 CDT Cc: mpi-lang@cs.utk.edu In-Reply-To: <199306161515.AA18953@antares.mcs.anl.gov>; from "Rusty Lusk" at Jun 16, 93 10:15 am X-Mailer: ELM [version 2.3 PL11b-CRI] Rusty Lusk writes: > > | 1. You make the statement in 5.2 that "In Fortran, the entire name will be > | lower case". Fortran 77 is case insensitive, and so the name 'mpi_free' > | matches the name 'MPI_FREE' (as well as the name 'MpI_FrEe'). (I'm not sure > | about Fortran 90, but I suspect the same applies.) > | > | The MPI document can use lower case because its easier to read and type in, > | but should not make any comments about case sensitivity of Fortran compilers. > | > > The primary problem here is with the symbols exported to and expected by the > linkers. This always turns out to present a portability problem. We thought > the safest thing would be to mandate that C routine names are mixed case, and > that the Fortran would be monocase. Advice from all those who have ported > mixed Fortran and C libraries to a wide variety of environments (and in so > doing cursed the lack of standardization in this area) is welcome. I'm afraid this is something MPI cannot affect. The portability problem arises, in general, because implementors mix languages. In particular, in many cases, they are writing the Fortran interfaces in C. So they have to know what name the Fortran compiler produces for a given string of characters. And there is no standard here. But this is an implementation issue that need not and cannot be addressed by MPI. But the Fortran MPI binding is targeted simply at what the Fortran programmer must type to get their compilation system to link to the appropriate MPI function. The MPI spec cannot diverge from the Fortran standard in this area. Vendors aren't going to make changes in their compilers, loaders, system libraries, etc., just because of the MPI spec. I suspect there are Fortran compilers that distinguish between: call mpi_start and call MPI_START as calling two different subroutines. But this is a non-standard extension, and I am sure any such compilers either do this as an option, or else allow the user to dictate case insensitivity. Otherwise, there are lots of Fortran codes out there that will not work. - Peter From owner-mpi-lang@CS.UTK.EDU Mon Aug 9 09:22:00 1993 Received: from CS.UTK.EDU by netlib2.cs.utk.edu with SMTP (5.61+IDA+UTK-930125/2.8t-netlib) id AA13401; Mon, 9 Aug 93 09:22:00 -0400 Received: from localhost by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA27803; Mon, 9 Aug 93 09:21:21 -0400 X-Resent-To: mpi-lang@CS.UTK.EDU ; Mon, 9 Aug 1993 09:21:20 EDT Errors-To: owner-mpi-lang@CS.UTK.EDU Received: from rios2.EPM.ORNL.GOV by CS.UTK.EDU with SMTP (5.61+IDA+UTK-930125/2.8s-UTK) id AA27794; Mon, 9 Aug 93 09:21:19 -0400 Received: by rios2.epm.ornl.gov (AIX 3.2/UCB 5.64/4.03) id AA22046; Mon, 9 Aug 1993 09:21:18 -0400 Message-Id: <9308091321.AA22046@rios2.epm.ornl.gov> To: mpi-lang@cs.utk.edu Subject: Fortran 90 bindings Date: Mon, 09 Aug 93 09:21:17 -0500 From: David W. Walker ------- Forwarded Message Received: from sun2.nsfnet-relay.ac.uk by rios2.epm.ornl.gov (AIX 3.2/UCB 5.64/4.03) id AA22760; Mon, 9 Aug 1993 06:26:33 -0400 Via: uk.ac.edinburgh.castle; Mon, 9 Aug 1993 11:26:10 +0100 Date: 09 Aug 93 11:24:34 BST From: D Muxworthy Subject: Guidelines for Bindings to Fortran 90 To: David Walker Message-Id: <9308091124.aa21464@uk.ac.ed.castle> Dick Weaver has circulated your e-mail message about the MPI meeting in Dallas in August to the Fortran standardization lists with a comment that the bindings subcommittee might be interested in "the bindings document". This is a (15 page) document produced by SC22/WG5 (Fortran) intended to advise other language and/or function groups about bindings to Fortran 90, highlighting the new features in F90 compared with F77. It is based very much on experience with existing Fortran bindings and may be weak on novel areas. If you would like a copy please let me know. Its basic form is in WordPerfect but I also have it so far in Word and postscript forms (plain text is not advisable). David Muxworthy (editor of the aforesaid document) ------- End of Forwarded Message .