This commit is contained in:
Arkadiusz Hypki 2024-12-10 15:56:09 +01:00
commit df55bf6c97
21 changed files with 5709 additions and 0 deletions

BIN
balnxxe/baar Executable file

Binary file not shown.

BIN
balnxxe/bacc Executable file

Binary file not shown.

BIN
balnxxe/badis Executable file

Binary file not shown.

16
balnxxe/bagui Executable file
View File

@ -0,0 +1,16 @@
#!/bin/sh
# Let the BACI user know that bagui is no longer supported
echo "In 2012, We decided to stop supporting the BACI graphical user"
echo "interface PCODE interpreter, bagui, because of its dependence"
echo "on Tcl and Tk. For the functionality of bagui, we strongly"
echo "recommend that you use the bagui built into the JavaBACI"
echo "system. This application is easier to install and use"
echo "because it is Java based."
echo ""
echo " Bill Bynum bynum@cs.wm.edu"
echo " Tracy Camp tcamp@mines.edu"
echo " September, 2012"
#
#
# $Id: bagui,v 1.1 2012/09/29 20:44:36 bynum Exp $
#

BIN
balnxxe/bainterp Executable file

Binary file not shown.

BIN
balnxxe/bald Executable file

Binary file not shown.

BIN
balnxxe/bapas Executable file

Binary file not shown.

21
projects/README Normal file
View File

@ -0,0 +1,21 @@
BACI PROJECTS
July 15, 2001
This directory contains sample course projects for an
undergraduate operating system course that uses BACI.
These projects are briefly described in:
B. Bynum and T. Camp, After you Alfonse: A Mutual
Exclusion Toolkit, Proceedings of the 27th SIGCSE
Conference, February 1996.
B. Bynum and T. Camp, BACI: The Ben-Ari Concurrent
Programming System, in Operating Systems: Fourth
Edition by W. Stallings, 2001.
If you are a professor teaching an OS course, we are happy to
share our solutions to these projects with you. Please contact
either of us at:
Tracy Camp tcamp@mines.edu
Bill Bynum bynum@cs.wm.edu

1352
projects/a-b-sem.ps Normal file

File diff suppressed because it is too large Load Diff

78
projects/a-b-sem.tex Normal file
View File

@ -0,0 +1,78 @@
% HOMEWORK #2
% re: processes
%
\documentstyle[11pt,fullpage]{article}
\pagestyle{empty}
\begin{document}
\begin{center}
{\large\bf BACI Projects for an OS Course}
\end{center}
\begin{enumerate}
\item {\bf A's and B's:} For the following
program outline in Ben-Ari Concurrent Pascal,
\begin{tabbing}
xxxxxx \= xxx \= \kill
\> PROGRAM As\_and\_Bs; \\
\\
\> VAR \\
\>\> \{ semaphore declarations \} \\
\\
\> PROCEDURE A; \\
\> BEGIN (P's and V's only) END; \\
\\
\> PROCEDURE B; \\
\> BEGIN (P's and V's only) END; \\
\\
\> BEGIN \\
\>\> \{ semaphore initializations \} \\
\>\> COBEGIN A;A;A;B;B; COEND; \\
\> END.
\end{tabbing}
complete the program using {\it general} semaphores so that the
processes ALWAYS terminate in the order A (any copy), B (any copy), A
(any copy), A, B. In addition to the program,
hand in the results of FIVE executions of the
program using the -apt option.
Include an explanation (or proof, if you prefer) of why the
program works like it should.
\item {\bf Binary Semaphores:}
Repeat problem 1 using only BINARY semaphores. In addition, you
can use assignment, incrementing, and decrementing auxiliary INTEGER
variables, along with IF-(testing INTEGER expressions)-THEN-ELSE.
Consider why this problem can not be solved without counting
variables.
\item {\bf More A's and B's:}
Repeat the A and B problem using four concurrent processes
(A, A, A, and B) such that they terminate in the order A (any copy),
B, A, A.
\item {\bf Even More A's and B's:}
Repeat the A and B problem using eight concurrent processes (A, A, A, A,
B, B, B, B) such that they terminate in the order AABABABB. {\bf
Tough one!}
\item {\small\bf Busy Waiting versus Semaphores:}
Using the program developed in the
general semaphore project above (ABAAB), consider
the performance effect of its execution with your fair and
your unfair (random) semaphore implementations.
That is, calculate the total number of
busy waiting loops that occur in each implementation.
Compare the performance of these two semaphore implementations
with a busy waiting implementation, i.e., an implementation that
uses the exchange operation for synchronization. In each case,
use a large number of executions (say,
1000) to obtain better statistics.
Discuss your results, explaining why one implementation is preferred
over another.
\end{enumerate}
\end{document}

56
projects/add.cm Normal file
View File

@ -0,0 +1,56 @@
//**************************************************************//
// //
// Program: Concurrent Add Exercise //
// Filename: add.cm //
// Original author: Neil Bergmann //
// Modification: Tracy Camp //
// //
// This program is a concurrent add example for use with //
// the BACI system. In its current version, it gives //
// indeterminate, incorrect answers. //
// //
// You need to add additional code to this file; do NOT //
// delete, replace, or modify existing code. //
// //
//**************************************************************//
//Global Variable Declarations //
int total; //Global variable to hold accumulating total//
//**************************************************************//
void add(int lower, int upper)
//Adds numbers in the range lower to upper inclusive to total//
{
int i;
for (i=lower;i<=upper;i++)
{
total = total + i;
}
}
//**************************************************************//
void initialize()
//Initializes all global variables and data structures//
{
total = 0;
}
//**************************************************************//
//main program//
main() {
cobegin {
add(1,10); add(11,20); add(21,30); add(31,40); add(41,50);
add(51,60); add(61,70); add(71,80); add(81,90); add(91,100);
}
cout << "Sum [1..100] = " << total << endl;
} //main program//
//**************************************************************//

897
projects/bakery.ps Normal file
View File

@ -0,0 +1,897 @@
%!PS-Adobe-2.0
%%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software
%%Title: bakery.dvi
%%Pages: 1
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%DocumentPaperSizes: Letter
%%EndComments
%DVIPSCommandLine: dvips -o bakery.ps bakery.dvi
%DVIPSParameters: dpi=600, comments removed
%DVIPSSource: TeX output 1998.02.05:0953
%%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 round sub abs 0.00001 lt{round}if}
forall round exch round exch]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 sub]{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 userdict
/eop-hook known{eop-hook}if showpage}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 newpath 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 40258431 52099146 1000 600 600 (bakery.dvi)
@start /Fa 38 122 df<1E007F80FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC07F807F
807F807F807F807F807F807F807F807F807F807F803F003F003F003F003F003F003F003F
003F003F003F001E001E001E001E001E001E001E001E001E001E001E001E000C000C000C
000C000C0000000000000000000000000000000000000000001E007F807F80FFC0FFC0FF
C0FFC07F807F801E000A4778C61B>33 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E
60006000600060006000E000C000C000C001C0018003800300070006000E001C00380070
0060000B1D78891B>44 D<FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC01A
067F9721>I<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A0A78891B>I<000FFC00
00007FFFC00001F007F000078001FC000E0000FE001C00007F003800003F807000003FC0
6000001FC0FE00001FE0FF00001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF
80001FE07F00001FE01C00003FC00000003FC00000007F800000007F80000000FF000000
01FE00000003F800000007F000000007E00000000FC00000001F800000001F000000003E
000000003C00000000780000000078000000007000000000F000000000E000000000E000
000000C000000001C000000001C000000001C00000000180000000018000000001800000
000180000000018000000001800000000180000000018000000001800000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000003C00000000FF00000000FF00000001FF80000001FF80000001FF8
0000001FF80000000FF00000000FF000000003C0000023467BC52E>63
D<00000000C00000000000000001E00000000000000001E00000000000000001E0000000
0000000003F00000000000000003F00000000000000003F00000000000000007F8000000
0000000007F80000000000000007F8000000000000000FFC000000000000000FFC000000
000000000FFC0000000000000019FE0000000000000019FE0000000000000019FE000000
0000000030FF0000000000000030FF0000000000000070FF80000000000000607F800000
00000000607F80000000000000E07FC0000000000000C03FC0000000000000C03FC00000
00000001C03FE0000000000001801FE0000000000001801FE0000000000003001FF00000
00000003000FF0000000000003000FF0000000000006000FF80000000000060007F80000
000000060007F800000000000C0003FC00000000000C0003FC00000000000C0003FC0000
000000180001FE0000000000180001FE0000000000180001FE0000000000300000FF0000
000000300000FF0000000000700000FF80000000006000007F80000000006000007F8000
000000E000007FC000000000FFFFFFFFC000000000FFFFFFFFC000000001FFFFFFFFE000
0000018000001FE0000000018000001FE0000000030000001FF0000000030000000FF000
0000030000000FF0000000060000000FF80000000600000007F80000000600000007F800
00000C00000003FC0000000C00000003FC0000000C00000003FC0000001800000001FE00
00001800000001FE0000001800000001FE0000003000000000FF0000003000000000FF00
00007800000000FF800000F800000000FF800001FC00000000FFC0000FFF00000003FFE0
00FFFFE000007FFFFFC0FFFFE000007FFFFFC0FFFFE000007FFFFFC042477DC649>65
D<FFFFFFFFFF000000FFFFFFFFFFE00000FFFFFFFFFFFC000001FFC00003FF0000007F80
0000FF8000007F8000003FC000007F8000001FE000007F8000000FF000007F80000007F8
00007F80000007FC00007F80000003FC00007F80000003FE00007F80000001FE00007F80
000001FF00007F80000001FF00007F80000001FF00007F80000001FF00007F80000001FF
00007F80000001FF00007F80000001FF00007F80000001FE00007F80000001FE00007F80
000003FE00007F80000003FC00007F80000007FC00007F80000007F800007F8000000FF0
00007F8000001FE000007F8000007FC000007F800000FF0000007F800003FE0000007F80
003FF00000007FFFFFFFE00000007FFFFFFFFC0000007F800000FF8000007F8000001FC0
00007F8000000FF000007F80000007F800007F80000003FC00007F80000001FE00007F80
000000FF00007F80000000FF80007F800000007F80007F800000007FC0007F800000007F
C0007F800000003FC0007F800000003FE0007F800000003FE0007F800000003FE0007F80
0000003FE0007F800000003FE0007F800000003FE0007F800000003FE0007F800000003F
E0007F800000007FC0007F800000007FC0007F800000007F80007F80000000FF80007F80
000001FF00007F80000001FF00007F80000003FE00007F8000000FFC00007F8000001FF8
00007F8000007FE00001FFC00003FFC000FFFFFFFFFFFF0000FFFFFFFFFFFC0000FFFFFF
FFFFC000003B447CC345>I<0000000FFE000060000000FFFFC000E0000003FFFFF000E0
00000FFC01FC01E000003FC0003E01E00000FF00000F83E00003FC000003C7E00007F800
0001E7E0000FF0000000FFE0001FE00000007FE0003FC00000003FE0007F800000001FE0
00FF000000000FE001FE000000000FE001FC0000000007E003FC0000000007E007F80000
000003E007F80000000003E00FF00000000001E00FF00000000001E01FE00000000000E0
1FE00000000000E03FE00000000000E03FE00000000000E03FC00000000000607FC00000
000000607FC00000000000607FC00000000000607FC0000000000000FF80000000000000
FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF800000
00000000FF80000000000000FF80000000000000FF80000000000000FF80000000000000
FF80000000000000FF80000000000000FF80000000000000FF800000000000007FC00000
000000007FC00000000000007FC00000000000607FC00000000000603FC0000000000060
3FE00000000000603FE00000000000601FE00000000000E01FF00000000000E00FF00000
000000C00FF00000000000C007F80000000001C007F800000000018003FC000000000380
01FC00000000038001FE00000000070000FF000000000600007F800000000E00003FC000
00001C00001FE00000003800000FF000000078000007F8000000F0000003FC000001E000
0000FF000007800000003FC0001F000000000FFC00FC0000000003FFFFF00000000000FF
FFC000000000000FFE0000003B487BC546>I<FFFFFFF0FFFFFFF0FFFFFFF000FFF00000
7FE000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC00000
3FC000003FC000003FC000003FC000003FC000007FE00000FFF000FFFFFFF0FFFFFFF0FF
FFFFF01C447DC323>73 D<FFFF800000000007FFFCFFFFC0000000000FFFFCFFFFC00000
00000FFFFC01FFC0000000000FFE00006FE0000000001BF800006FE0000000001BF80000
6FE0000000001BF8000067F00000000033F8000067F00000000033F8000063F800000000
63F8000063F80000000063F8000063F80000000063F8000061FC00000000C3F8000061FC
00000000C3F8000061FC00000000C3F8000060FE0000000183F8000060FE0000000183F8
0000607F0000000303F80000607F0000000303F80000607F0000000303F80000603F8000
000603F80000603F8000000603F80000603F8000000603F80000601FC000000C03F80000
601FC000000C03F80000600FE000001803F80000600FE000001803F80000600FE0000018
03F800006007F000003003F800006007F000003003F800006007F000003003F800006003
F800006003F800006003F800006003F800006001FC0000C003F800006001FC0000C003F8
00006001FC0000C003F800006000FE00018003F800006000FE00018003F800006000FE00
018003F8000060007F00030003F8000060007F00030003F8000060003F80060003F80000
60003F80060003F8000060003F80060003F8000060001FC00C0003F8000060001FC00C00
03F8000060001FC00C0003F8000060000FE0180003F8000060000FE0180003F800006000
07F0300003F80000600007F0300003F80000600007F0300003F80000600003F8600003F8
0000600003F8600003F80000600003F8600003F80000600001FCC00003F80000600001FC
C00003F80000600000FF800003F80000600000FF800003F80000600000FF800003F80000
6000007F000003F80000F000007F000003F80000F000007F000003F80001F800003E0000
03F8000FFF00003E00000FFE00FFFFF0001C0007FFFFFCFFFFF0001C0007FFFFFCFFFFF0
001C0007FFFFFC4E447BC359>77 D<FFFF8000000FFFFFFFFFC000000FFFFFFFFFE00000
0FFFFF00FFE0000000FFF0007FF00000001F80006FF80000000F00006FF80000000F0000
67FC00000006000063FE00000006000063FE00000006000061FF00000006000060FF8000
0006000060FF800000060000607FC00000060000603FE00000060000603FE00000060000
601FF00000060000600FF80000060000600FF800000600006007FC00000600006003FE00
000600006003FE00000600006001FF00000600006000FF80000600006000FF8000060000
60007FC00006000060003FE00006000060003FE00006000060001FF00006000060000FF8
0006000060000FF800060000600007FC00060000600003FE00060000600003FE00060000
600001FF00060000600000FF80060000600000FF800600006000007FC00600006000003F
E00600006000003FE00600006000001FF00600006000000FF80600006000000FF8060000
60000007FC06000060000003FE06000060000003FE06000060000001FF06000060000000
FF86000060000000FF860000600000007FC60000600000003FE60000600000003FE60000
600000001FF60000600000000FFE0000600000000FFE00006000000007FE000060000000
03FE00006000000003FE00006000000001FE00006000000000FE00006000000000FE0000
F0000000007E0000F0000000003E0001F8000000003E000FFF000000001E00FFFFF00000
000E00FFFFF00000000E00FFFFF0000000060040447CC349>I<0000001FFC0000000000
0001FFFFC0000000000007F007F000000000001F8000FC00000000007E00003F00000000
01F800000FC000000003F0000007E000000007E0000003F00000000FC0000001F8000000
1F80000000FC0000003F000000007E0000007E000000003F000000FE000000003F800001
FC000000001FC00003F8000000000FE00003F8000000000FE00007F00000000007F00007
F00000000007F0000FF00000000007F8000FE00000000003F8001FE00000000003FC001F
E00000000003FC003FC00000000001FE003FC00000000001FE003FC00000000001FE007F
C00000000001FF007FC00000000001FF007F800000000000FF007F800000000000FF007F
800000000000FF00FF800000000000FF80FF800000000000FF80FF800000000000FF80FF
800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF
800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF
800000000000FF80FF800000000000FF807FC00000000001FF007FC00000000001FF007F
C00000000001FF007FC00000000001FF003FC00000000001FE003FE00000000003FE003F
E00000000003FE001FE00000000003FC001FE00000000003FC000FF00000000007F8000F
F00000000007F80007F8000000000FF00007F8000000000FF00003F8000000000FE00003
FC000000001FE00001FE000000003FC00000FE000000003F8000007F000000007F000000
7F80000000FF0000003F80000000FE0000001FC0000001FC00000007E0000003F0000000
03F0000007E000000001FC00001FC0000000007E00003F00000000001F8000FC00000000
0007F007F0000000000001FFFFC00000000000001FFC0000000041487BC54C>I<0001FF
000300000FFFE00700003FFFF8070000FE00FE0F0001F8001F0F0007E000079F0007C000
03DF000F800001FF001F000000FF003F0000007F003E0000003F007E0000003F007E0000
001F007C0000001F00FC0000000F00FC0000000F00FC0000000700FC0000000700FC0000
000700FE0000000700FE0000000300FE0000000300FF0000000300FF00000003007F8000
0000007FC0000000007FE0000000003FF8000000003FFE000000001FFFE00000000FFFFE
00000007FFFFE0000003FFFFFC000001FFFFFF000000FFFFFFC000003FFFFFF000000FFF
FFF8000001FFFFFC0000001FFFFE00000001FFFE000000001FFF0000000003FF80000000
01FF8000000000FFC0000000007FC0000000003FC0000000001FC0000000001FE0C00000
000FE0C00000000FE0C00000000FE0C000000007E0C000000007E0C000000007E0E00000
0007E0E000000007E0E000000007E0F000000007C0F00000000FC0F80000000FC0F80000
000F80FC0000001F80FE0000001F00FF0000003F00FF8000007E00FBC00000FC00F9F000
01F800F07C0003F000F03FC00FE000E00FFFFF8000E001FFFE0000C0003FF000002B487B
C536>83 D<FFFFFF8000000FFFFCFFFFFF8000000FFFFCFFFFFF8000000FFFFC01FFF800
000003FFC0007FE000000000FE00007FE000000000FC00003FE000000000F000001FF000
000000E000001FF800000000E000000FF800000000C0000007FC0000000180000007FC00
00000380000003FE0000000300000003FF0000000600000001FF0000000E00000000FF80
00000C00000000FF8000001C000000007FC0000018000000003FE0000030000000003FE0
000070000000001FF0000060000000001FF00000E0000000000FF80000C00000000007FC
0001800000000007FC0003800000000003FE0003000000000003FE0007000000000001FF
0006000000000000FF800C000000000000FF801C0000000000007FC0180000000000007F
C0300000000000003FE0300000000000001FF0600000000000001FF0E00000000000000F
F8C00000000000000FF98000000000000007FF8000000000000003FF0000000000000003
FF0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000001FE0000000000000001FE0000000000000001FE0000000000000001
FE0000000000000007FF80000000000003FFFFFF000000000003FFFFFF000000000003FF
FFFF00000046447FC349>89 D<0007FC000000003FFF80000000F80FE0000003C003F000
00070001F800000E0000FC00000FC0007E00001FE0007F00001FF0003F80001FF0003F80
001FF0003F80001FF0001FC0001FF0001FC0000FE0001FC0000380001FC0000000001FC0
000000001FC0000000001FC0000000001FC00000000FFFC0000001FFFFC000000FFE1FC0
00003FC01FC00000FF001FC00003FC001FC00007F8001FC0000FF0001FC0001FE0001FC0
003FC0001FC0007FC0001FC0007F80001FC0007F80001FC060FF00001FC060FF00001FC0
60FF00001FC060FF00003FC060FF00003FC060FF00003FC060FF80007FC0607F8000EFC0
607FC000C7E0C03FC001C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00001FE0007C
002B2E7CAC31>97 D<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC00
00000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC03FC000001FC0FFF800001FC3C07E00001FC70
01F80001FDE0007E0001FD80003F0001FF80001F8001FF00001FC001FE00000FE001FC00
0007E001FC000007F001FC000007F001FC000003F801FC000003F801FC000003FC01FC00
0003FC01FC000001FC01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC00
0001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC00
0001FE01FC000001FC01FC000003FC01FC000003FC01FC000003F801FC000003F801FC00
0007F001FC000007F001FE00000FE001FE00000FC001FF00001FC001FB00003F8001F380
007E0001E1C000FC0001E0F001F80001C03C07E00001801FFF8000000003FC00002F467D
C436>I<00007F80000003FFF000000FC07C00003F000F0000FC00038001F80001C003F8
000FC007F0001FE007E0003FE00FE0003FE01FC0003FE01FC0003FE03F80003FE03F8000
1FC07F800007007F800000007F800000007F00000000FF00000000FF00000000FF000000
00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000
FF000000007F000000007F800000007F800000003F800000003F800000303FC00000301F
C00000700FE00000600FE00000E007F00000C003F80001C001F800038000FC000700003F
001E00001FC078000007FFF0000000FF8000242E7DAC2B>I<000000007F000000003FFF
000000003FFF000000003FFF0000000001FF0000000000FF00000000007F00000000007F
00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F
00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F
00000000007F00000000007F00000000007F00000000007F00000000007F0000007F807F
000003FFF07F00000FC07C7F00003F000E7F00007E00077F0000FC0003FF0003F80001FF
0007F00000FF0007E00000FF000FE000007F001FC000007F001FC000007F003F8000007F
003F8000007F007F8000007F007F8000007F007F0000007F00FF0000007F00FF0000007F
00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F
00FF0000007F00FF0000007F00FF0000007F007F0000007F007F8000007F007F8000007F
003F8000007F003F8000007F001FC000007F001FC000007F000FC00000FF000FE00000FF
0007F00001FF0003F00003FF0001F800077F8000FC000E7FC0003F001C7FFE000FC0F87F
FE0003FFE07FFE00007F007F002F467DC436>I<0001FE00000007FFC000001F03F00000
7E00FC0000FC007E0001F8003F0003F0003F0007E0001F800FE0001FC00FC0000FC01FC0
000FC03F80000FE03F800007E03F800007E07F800007F07F000007F07F000007F0FF0000
07F0FF000007F0FF000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF00000000FF000000
00FF00000000FF00000000FF000000007F000000007F000000007F800000007F80000000
3F800000003F800000301FC00000301FC00000700FC00000600FE00000E007F00000C003
F00001C001F800038000FC000700003E001E00001F80F8000003FFE0000000FF0000242E
7DAC2B>I<00000FE00000007FF8000001F81E000003F03F00000FE07F80001FC0FF8000
1F80FF80003F80FF80007F00FF80007F00FF80007F007F0000FE001C0000FE00000000FE
00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
000000FE00000000FE00000000FE00000000FE00000000FE00000000FE000000FFFFFF80
00FFFFFF8000FFFFFF800000FE00000000FE00000000FE00000000FE00000000FE000000
00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000
FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000
0000FE00000000FE00000001FF8000007FFFFF00007FFFFF00007FFFFF000021467EC51E
>I<000000000F800001FC007FE0000FFF81F0F0003F07E381F000FC01FF03F001F800FE
01F003F0007E01E007F0007F000007E0003F00000FE0003F80000FC0001F80001FC0001F
C0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001F
C0001FC0001FC0001FC0001FC0000FC0001F80000FE0003F800007E0003F000007F0007F
000003F0007E000001F800FC000001FC01F8000003BF07E00000030FFF8000000701FC00
00000700000000000700000000000F00000000000F00000000000F00000000000F800000
000007C00000000007E00000000007FFFFF8000003FFFFFF000003FFFFFFE00001FFFFFF
F800007FFFFFFC0001FFFFFFFE0007C0000FFF000F800000FF003F0000003F803E000000
1F807C0000000FC07C0000000FC0F800000007C0F800000007C0F800000007C0F8000000
07C0F800000007C0FC0000000FC07C0000000F807E0000001F803E0000001F001F000000
3E000F8000007C0007E00001F80001F80007E000007F003F8000001FFFFE00000001FFE0
00002C427DAC31>I<01FC00000000FFFC00000000FFFC00000000FFFC0000000007FC00
00000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC01FE000001FC07FFC00001FC1E07F00001FC38
01F80001FC7001FC0001FCE000FC0001FDC000FE0001FD8000FE0001FF80007F0001FF00
007F0001FF00007F0001FE00007F0001FE00007F0001FE00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC436>I<01E0
0007F80007F8000FFC000FFC000FFC000FFC0007F80007F80001E0000000000000000000
0000000000000000000000000000000000000000000000000000000000000001FC00FFFC
00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0003FE00FFFFF8FFFFF8FFFFF815437DC21C>I<00003C000000FF000000
FF000001FF800001FF800001FF800001FF800000FF000000FF0000003C00000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000007F80003FFF80003FFF80003FFF800000FF8000007F800000
3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
3F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F800000
3F803E003F807F003F80FF807F00FF807F00FF807E00FF807E00FF80FC007F00F8003C01
F0001E03E00007FF800001FE0000195785C21E>I<01FC00000000FFFC00000000FFFC00
000000FFFC0000000007FC0000000003FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
00000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00
1FFFE001FC001FFFE001FC001FFFE001FC000FFF0001FC0007F80001FC0007E00001FC00
07C00001FC0007800001FC000E000001FC001C000001FC0038000001FC0070000001FC00
E0000001FC01C0000001FC0380000001FC0700000001FC0F00000001FC3F80000001FC7F
C0000001FCFFC0000001FDCFE0000001FF8FF0000001FF07F0000001FE03F8000001FC03
FC000001FC01FC000001FC00FE000001FC00FF000001FC007F000001FC003F800001FC00
3FC00001FC001FC00001FC000FE00001FC000FF00001FC0007F00001FC0007F80001FC00
03FC0001FC0003FE0001FC0003FF0003FE0007FF80FFFFF81FFFF8FFFFF81FFFF8FFFFF8
1FFFF82D457DC433>I<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC
0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00FFFFF8FFFFF8FFFF
F815457DC41C>I<01FC00FF00001FE00000FFFC07FFE000FFFC0000FFFC0F03F801E07F
0000FFFC3C01FC07803F800007FC7000FE0E001FC00003FCE0007E1C000FC00001FDC000
7F38000FE00001FD80007F30000FE00001FF80003FF00007F00001FF00003FE00007F000
01FF00003FE00007F00001FE00003FC00007F00001FE00003FC00007F00001FE00003FC0
0007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC
00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007
F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC0000
3F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F000
01FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F80
0007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC
00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007
F00001FC00003F800007F00003FE00007FC0000FF800FFFFF81FFFFF03FFFFE0FFFFF81F
FFFF03FFFFE0FFFFF81FFFFF03FFFFE04B2C7DAB52>I<01FC01FE0000FFFC07FFC000FF
FC1E07F000FFFC3801F80007FC7001FC0003FCE000FC0001FDC000FE0001FD8000FE0001
FF80007F0001FF00007F0001FF00007F0001FE00007F0001FE00007F0001FE00007F0001
FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001
FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001
FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001
FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001
FC00007F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F
2C7DAB36>I<00007F8000000003FFF00000000FC0FC0000003E001F0000007C000F8000
00F80007C00001F00003E00003E00001F00007C00000F8000FC00000FC000FC00000FC00
1F8000007E003F8000007F003F8000007F003F0000003F007F0000003F807F0000003F80
7F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0
FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0
7F0000003F807F0000003F807F8000007F803F8000007F003F8000007F001F8000007E00
1FC00000FE000FC00000FC000FE00001FC0007E00001F80003F00003F00001F80007E000
00FC000FC000003E001F0000001FC0FE00000007FFF8000000007F8000002A2E7DAC31>
I<01FC03FC0000FFFC0FFF8000FFFC3C07E000FFFC7001F80007FDE000FE0001FD80007F
0001FF80003F8001FF00001FC001FE00001FE001FC00000FE001FC00000FF001FC000007
F001FC000007F801FC000003F801FC000003FC01FC000003FC01FC000003FC01FC000001
FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001
FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000003FC01FC000003
FC01FC000003FC01FC000007F801FC000007F801FC000007F001FC00000FF001FE00000F
E001FE00001FC001FF00003FC001FF00003F8001FF80007E0001FDC000FC0001FCF003F8
0001FC3C0FE00001FC1FFF800001FC03FC000001FC0000000001FC0000000001FC000000
0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC000000
0001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000003FE000000
00FFFFF8000000FFFFF8000000FFFFF80000002F3F7DAB36>I<03F803F0FFF81FFCFFF8
3C3EFFF8707F07F8E0FF03F9C0FF01F980FF01FB80FF01FB007E01FB003C01FF000001FE
000001FE000001FE000001FE000001FC000001FC000001FC000001FC000001FC000001FC
000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC
000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC
000001FC000003FF0000FFFFFE00FFFFFE00FFFFFE00202C7DAB26>114
D<003FE01801FFFC3807E01F780F0003F81E0001F83C0000F87C00007878000078F80000
38F8000038F8000018F8000018FC000018FC000018FE000018FF8000007FC000007FFC00
003FFFE0001FFFFC000FFFFF0007FFFFC003FFFFE000FFFFF0001FFFF80000FFF800000F
FC000003FCC00001FEC00000FEC000007EE000007EE000003EE000003EF000003EF00000
3EF000003EF800003CFC00007CFC000078FE0000F8FF0001F0F38003E0F1F00F80E07FFE
00C00FF0001F2E7DAC26>I<0006000000060000000600000006000000060000000E0000
000E0000000E0000000E0000001E0000001E0000001E0000003E0000007E0000007E0000
00FE000001FE000007FE00001FFFFFF0FFFFFFF0FFFFFFF000FE000000FE000000FE0000
00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
00FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
00FE000000FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C
00FE000C00FE000C007E001C007F0018007F0018003F0038001F8030001FC0700007E0E0
0001FFC000007F001E3E7EBC26>I<01FC00007F00FFFC003FFF00FFFC003FFF00FFFC00
3FFF0007FC0001FF0003FC0000FF0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00
007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000FF0001FC00
00FF0001FC0000FF0001FC0001FF0001FC0001FF0000FC0001FF0000FE0003FF00007E00
077F80007F000E7FC0003F001C7FFE000FC0787FFE0003FFF07FFE00007F807F002F2D7D
AB36>I<FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC07FF00007FE003FE00001F8001FE
00001F0001FE00000E0000FE00000E0000FE00000C00007F00001800007F00001800007F
80001800003F80003000003F80003000003FC0007000001FC0006000001FE0006000000F
E000C000000FE000C000000FF001C0000007F00180000007F00180000003F80300000003
F80300000003FC0700000001FC0600000001FC0600000000FE0C00000000FE0C00000000
FF0C000000007F18000000007F18000000007FB8000000003FB0000000003FF000000000
1FE0000000001FE0000000001FE0000000000FC0000000000FC000000000078000000000
078000000000078000000000030000002E2C7EAA33>I<FFFFE0FFFFE03FFF80FFFFE0FF
FFE03FFF80FFFFE0FFFFE03FFF8007FF000FFE000FFC0003FC0003F80003F80003FC0003
F80001E00001FC0003F80001E00001FC0001F80001C00001FE0001FC0001C00000FE0001
FC0001800000FE0001FC0001800000FF0001FE00038000007F00037E00030000007F0003
7E00030000007F80037F00070000003F80063F00060000003F80063F00060000001FC006
3F800C0000001FC00C1F800C0000001FC00C1F800C0000000FE00C1FC0180000000FE018
0FC0180000000FE0180FC01800000007F0180FE03000000007F03007E03000000007F030
07E03000000003F83007F06000000003F86003F06000000003F86003F06000000001FCE0
03F8C000000001FCC001F8C000000001FCC001FCC000000000FFC001FD8000000000FF80
00FD8000000000FF8000FF80000000007F8000FF00000000007F00007F00000000007F00
007F00000000003F00007E00000000003E00003E00000000003E00003E00000000001E00
003C00000000001C00001C00000000001C00001C000000412C7EAA46>I<FFFFF007FFFC
FFFFF007FFFCFFFFF007FFFC03FFC001FFC000FF8000FF00007F8000FC00003F8000F800
003FC000E000001FE000E000000FE001C0000007F00380000007F80300000003FC060000
0001FC0E00000001FE1C00000000FF18000000007F30000000003FF0000000003FE00000
00001FE0000000000FE00000000007F00000000007F8000000000FF8000000000DFC0000
000019FE0000000038FF00000000707F00000000603F80000000C03FC0000001C01FC000
0003800FE0000003000FF00000060007F800000E0003F800001C0001FC00003C0001FE00
007C0001FF0001FC0001FF800FFE0003FFC0FFFF800FFFFFFFFF800FFFFFFFFF800FFFFF
302B7FAA33>I<FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC07FF00007FE003FE00001F
8001FE00001F0001FE00000E0000FE00000C0000FF00001C00007F00001800007F000018
00007F80003800003F80003000003F80003000001FC0006000001FC0006000001FE000E0
00000FE000C000000FE000C0000007F00180000007F00180000007F80380000003F80300
000003F80300000001FC0600000001FC0600000001FE0E00000000FE0C00000000FE0C00
0000007F18000000007F18000000007FB8000000003FB0000000003FB0000000001FE000
0000001FE0000000001FE0000000000FC0000000000FC000000000078000000000078000
000000078000000000030000000000030000000000060000000000060000000000060000
0000000C00000000000C0000000000180000000000180000003C00180000007E00300000
00FF0030000000FF0060000000FF0060000000FF00C0000000FE01C00000007C03800000
007007000000003C1E000000000FFC0000000003F0000000002E3F7EAA33>I
E /Fb 15 116 df<0FC01FE03FF07FF8FFFCFFFCFFFCFFFEFFFEFFFE7FFE3FFE1FFE0FDE
001E001E003E003C003C007C0078007800F801F001F003E007C00F801F803F001E000C00
0F2079BE1D>39 D<0FC01FE03FF07FF8FFFCFFFCFFFCFFFCFFFCFFFC7FF83FF01FE00FC0
0000000000000000000000000000000000000000000000000FC01FE03FF07FF8FFFCFFFC
FFFCFFFCFFFCFFFC7FF83FF01FE00FC00E2879A71D>58 D<FFFFFFFFFFF80000FFFFFFFF
FFFF8000FFFFFFFFFFFFF000FFFFFFFFFFFFFC00FFFFFFFFFFFFFE00003FFC00003FFF00
003FFC00000FFF80003FFC000007FFC0003FFC000003FFE0003FFC000001FFE0003FFC00
0001FFF0003FFC000001FFF0003FFC000000FFF8003FFC000000FFF8003FFC000000FFF8
003FFC000000FFF8003FFC000000FFF8003FFC000000FFF8003FFC000000FFF8003FFC00
0000FFF0003FFC000001FFF0003FFC000001FFF0003FFC000003FFE0003FFC000003FFC0
003FFC000007FF80003FFC00000FFF00003FFC00003FFE00003FFC0001FFF800003FFFFF
FFFFE000003FFFFFFFFF8000003FFFFFFFFFF800003FFFFFFFFFFE00003FFC00000FFF80
003FFC000003FFC0003FFC000001FFE0003FFC000000FFF0003FFC000000FFF8003FFC00
00007FFC003FFC0000007FFC003FFC0000003FFE003FFC0000003FFE003FFC0000003FFF
003FFC0000003FFF003FFC0000003FFF003FFC0000001FFF003FFC0000003FFF003FFC00
00003FFF003FFC0000003FFF003FFC0000003FFF003FFC0000003FFE003FFC0000007FFE
003FFC0000007FFE003FFC000000FFFC003FFC000001FFF8003FFC000003FFF8003FFC00
0007FFF0003FFC00003FFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFF00FFFFFFFFFFFFFC00
FFFFFFFFFFFFF000FFFFFFFFFFFF0000403E7DBD4A>66 D<FFFFFFFFFFF00000FFFFFFFF
FFFF0000FFFFFFFFFFFFC000FFFFFFFFFFFFF000FFFFFFFFFFFFFC00003FFC0000FFFE00
003FFC00001FFF00003FFC00000FFF80003FFC000007FFC0003FFC000003FFE0003FFC00
0003FFE0003FFC000001FFF0003FFC000001FFF0003FFC000001FFF0003FFC000001FFF8
003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF8003FFC00
0001FFF8003FFC000001FFF8003FFC000001FFF8003FFC000001FFF0003FFC000001FFF0
003FFC000001FFF0003FFC000003FFE0003FFC000003FFC0003FFC000007FFC0003FFC00
000FFF80003FFC00003FFF00003FFC0000FFFE00003FFFFFFFFFF800003FFFFFFFFFF000
003FFFFFFFFF8000003FFFFFFFFC0000003FFE0000000000003FFE0000000000003FFE00
00000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000
003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00
00000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000
003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE00
00000000003FFE0000000000FFFFFFFF80000000FFFFFFFF80000000FFFFFFFF80000000
FFFFFFFF80000000FFFFFFFF800000003D3E7DBD47>80 D<3FFFFFFFFFFFFFFC3FFFFFFF
FFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFFFFFFFFFFFFFC3FFE003FFE003FFC
7FF0003FFE000FFE7FC0003FFE0003FE7F80003FFE0001FE7F00003FFE0000FE7F00003F
FE00007E7E00003FFE00007E7E00003FFE00007E7C00003FFE00003E7C00003FFE00003E
7C00003FFE00003E7C00003FFE00003EFC00003FFE00003FF800003FFE00001FF800003F
FE00001FF800003FFE00001FF800003FFE00001FF800003FFE00001F0000003FFE000000
0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
FE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000000
0000003FFE0000000000003FFE0000000000003FFE0000000000003FFE0000000000003F
FE000000000FFFFFFFFFF800000FFFFFFFFFF800000FFFFFFFFFF800000FFFFFFFFFF800
000FFFFFFFFFF800403D7CBC49>84 D<0007FFC00000003FFFF8000001FFFFFF000003FF
FFFF800007FE03FFC0000FF800FFE0000FFC003FF0001FFE003FF8001FFE001FFC001FFE
001FFC001FFE001FFC001FFE000FFE001FFE000FFE000FFC000FFE0007F8000FFE0001E0
000FFE000000000FFE000000003FFE000000FFFFFE00000FFFFFFE00007FFFFFFE0001FF
FE0FFE0003FFE00FFE000FFF800FFE001FFE000FFE003FFC000FFE003FF8000FFE007FF0
000FFE00FFF0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0000FFE00FFE0
001FFE00FFF0001FFE007FF0003FFE007FF8007BFF803FFC00FBFFFE1FFF07F3FFFE0FFF
FFE1FFFE03FFFF80FFFE00FFFF003FFE001FF80000002F2B7DA933>97
D<00FF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF0000000000
FFFF000000000007FF000000000003FF000000000003FF000000000003FF000000000003
FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF
000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF00
0000000003FF000000000003FF00FFE0000003FF07FFFC000003FF1FFFFF800003FF7FFF
FFC00003FFFF81FFF00003FFFC003FF80003FFF0001FFC0003FFE0000FFE0003FFC00007
FE0003FF800007FF0003FF800003FF8003FF800003FF8003FF800003FFC003FF800001FF
C003FF800001FFC003FF800001FFC003FF800001FFE003FF800001FFE003FF800001FFE0
03FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003FF800001FFE003
FF800001FFE003FF800001FFE003FF800001FFC003FF800001FFC003FF800003FFC003FF
800003FF8003FF800003FF8003FF800003FF0003FF800007FF0003FFC00007FE0003FFE0
000FFC0003FFF0001FF80003FFFC007FF00003FCFF01FFE00003F87FFFFFC00003F01FFF
FF000003E007FFFC0000000001FFC0000033407DBE3A>I<0000FFF000000007FFFE0000
001FFFFF8000007FFFFFC00000FFE07FE00001FF801FF00003FF000FF80007FE0007FC00
0FFC0003FE001FFC0003FE001FF80001FE003FF80001FF003FF80001FF007FF00001FF00
7FF00000FF807FF00000FF80FFF00000FF80FFF00000FF80FFFFFFFFFF80FFFFFFFFFF80
FFFFFFFFFF80FFFFFFFFFF80FFF000000000FFF000000000FFF000000000FFF000000000
FFF0000000007FF0000000007FF0000000007FF8000000003FF8000000003FF800000F80
1FFC00000F801FFC00001F800FFE00001F0007FF00003F0003FF80007E0001FFE001FC00
00FFF80FF800003FFFFFF000001FFFFFC0000003FFFF000000007FF80000292B7DA930>
101 D<00FF0000000000FFFF0000000000FFFF0000000000FFFF0000000000FFFF000000
0000FFFF000000000007FF000000000003FF000000000003FF000000000003FF00000000
0003FF000000000003FF000000000003FF000000000003FF000000000003FF0000000000
03FF000000000003FF000000000003FF000000000003FF000000000003FF000000000003
FF000000000003FF000000000003FF001FF8000003FF00FFFE000003FF03FFFF800003FF
07FFFFC00003FF0FE0FFE00003FF1F007FE00003FF3C007FF00003FF78007FF00003FFF0
003FF80003FFE0003FF80003FFE0003FF80003FFC0003FF80003FFC0003FF80003FFC000
3FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003F
F80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF8
0003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF800
03FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003
FF80003FF80003FF80003FF800FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFFFE0FFFF
FE0FFFFFE0FFFFFE0FFFFFE0333F7CBE3A>104 D<00FF0000000000FFFF0000000000FF
FF0000000000FFFF0000000000FFFF0000000000FFFF000000000007FF000000000003FF
000000000003FF000000000003FF000000000003FF000000000003FF000000000003FF00
0000000003FF000000000003FF000000000003FF000000000003FF000000000003FF0000
00000003FF000000000003FF000000000003FF000000000003FF000000000003FF000000
000003FF000FFFFE0003FF000FFFFE0003FF000FFFFE0003FF000FFFFE0003FF000FFFFE
0003FF0001FE000003FF0003FC000003FF0007F0000003FF001FE0000003FF003FC00000
03FF007F80000003FF00FF00000003FF03FC00000003FF07F800000003FF0FF000000003
FF1FF000000003FF7FF800000003FFFFFC00000003FFFFFC00000003FFFFFE00000003FF
FFFF00000003FFE7FF80000003FFC3FFC0000003FF81FFC0000003FF00FFE0000003FF00
FFF0000003FF007FF8000003FF003FFC000003FF001FFC000003FF000FFE000003FF000F
FF000003FF0007FF800003FF0003FFC00003FF0001FFC00003FF0000FFE000FFFFFC07FF
FFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0FFFFFC07FFFFC0323F7DBE37>
107 D<00FF00FFFF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF0003FF00
03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00FFFFFC
FFFFFCFFFFFCFFFFFCFFFFFC163F7CBE1D>I<00FF001FF80000FFC00000FFFF00FFFF00
07FFF80000FFFF03FFFFC01FFFFE0000FFFF07FFFFE03FFFFF0000FFFF0FE0FFF07F07FF
8000FFFF1F003FF0F801FF800007FF3E003FF9F001FFC00003FF78003FFBC001FFC00003
FFF0001FFF8000FFE00003FFF0001FFF8000FFE00003FFE0001FFF0000FFE00003FFC000
1FFE0000FFE00003FFC0001FFE0000FFE00003FFC0001FFE0000FFE00003FF80001FFC00
00FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE0
0003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF
80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001F
FC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000
FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE000
03FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80001FFC0000FFE00003FF80
001FFC0000FFE00003FF80001FFC0000FFE000FFFFFE07FFFFF03FFFFF80FFFFFE07FFFF
F03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03FFFFF80FFFFFE07FFFFF03FFF
FF8051297CA858>I<00007FF000000003FFFE0000001FFFFFC000007FFFFFF00000FFE0
3FF80001FF800FFC0003FE0003FE0007FC0001FF000FFC0001FF801FF80000FFC01FF800
00FFC03FF80000FFE03FF000007FE07FF000007FF07FF000007FF07FF000007FF07FF000
007FF0FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000
007FF8FFF000007FF8FFF000007FF8FFF000007FF8FFF000007FF87FF000007FF07FF000
007FF07FF000007FF07FF000007FF03FF80000FFE03FF80000FFE01FF80000FFC00FFC00
01FF800FFC0001FF8007FE0003FF0003FF800FFE0001FFE03FFC00007FFFFFF000001FFF
FFC0000007FFFF000000007FF000002D2B7DA934>111 D<01FE01FE00FFFE07FF80FFFE
0FFFE0FFFE1FFFF0FFFE3F1FF0FFFE7C3FF807FEF83FF803FEF03FF803FFE03FF803FFE0
3FF803FFC01FF003FFC00FE003FF8007C003FF80000003FF80000003FF80000003FF0000
0003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003
FF00000003FF00000003FF00000003FF00000003FF000000FFFFFF0000FFFFFF0000FFFF
FF0000FFFFFF0000FFFFFF000025297DA82B>114 D<003FFC1E0001FFFFBE0007FFFFFE
000FFFFFFE001FF00FFE003F8001FE007F0000FE007E00007E007E00007E00FE00003E00
FE00003E00FF00003E00FF80003E00FFC0000000FFF8000000FFFFE000007FFFFF00007F
FFFFC0003FFFFFF0001FFFFFF8000FFFFFFC0007FFFFFE0003FFFFFF0000FFFFFF80001F
FFFF800000FFFF80000007FFC0000000FFC07800007FC0F800003FC0F800001FC0FC0000
1FC0FC00001FC0FE00001FC0FE00001F80FF00003F80FF80003F00FFE000FF00FFF803FE
00FFFFFFFC00FFFFFFF000F87FFFC000E00FFE0000222B7DA929>I
E /Fc 18 118 df<00000000001F00000000000000000000003F80000000000000000000
007FC0000000000000000000007FC000000000000000000000FFE0000000000000000000
00FFE000000000000000000000FFE000000000000000000001FFF0000000000000000000
01FFF000000000000000000003FFF800000000000000000003FFF8000000000000000000
03FFF800000000000000000007FFFC00000000000000000007FFFC000000000000000000
07FFFC0000000000000000000FFFFE0000000000000000000FFFFE000000000000000000
1FFFFF0000000000000000001FFFFF0000000000000000001FFFFF000000000000000000
3FFFFF8000000000000000003F7FFF8000000000000000007F7FFFC00000000000000000
7E7FFFC000000000000000007E3FFFC00000000000000000FE3FFFE00000000000000000
FC1FFFE00000000000000001FC1FFFF00000000000000001F81FFFF00000000000000001
F80FFFF00000000000000003F80FFFF80000000000000003F007FFF80000000000000007
F007FFFC0000000000000007E007FFFC0000000000000007E003FFFC000000000000000F
E003FFFE000000000000000FC001FFFE000000000000001FC001FFFF000000000000001F
8001FFFF000000000000001F8000FFFF000000000000003F8000FFFF800000000000003F
00007FFF800000000000007F00007FFFC00000000000007E00007FFFC00000000000007E
00003FFFC0000000000000FE00003FFFE0000000000000FC00001FFFE0000000000001FC
00001FFFF0000000000001F800001FFFF0000000000001F800000FFFF0000000000003F8
00000FFFF8000000000003F0000007FFF8000000000007F0000007FFFC000000000007E0
000007FFFC000000000007E0000003FFFC00000000000FFFFFFFFFFFFE00000000000FFF
FFFFFFFFFE00000000001FFFFFFFFFFFFF00000000001FFFFFFFFFFFFF00000000001FFF
FFFFFFFFFF00000000003F80000000FFFF80000000003F000000007FFF80000000007F00
0000007FFFC0000000007F000000007FFFC0000000007E000000003FFFC000000000FE00
0000003FFFE000000000FC000000001FFFE000000001FC000000001FFFF000000001FC00
0000001FFFF000000001F8000000000FFFF000000003F8000000000FFFF800000003F000
00000007FFF800000007F00000000007FFFC00000007F00000000007FFFC00000007E000
00000003FFFC0000000FE00000000003FFFE0000000FC00000000003FFFE0000001FC000
00000001FFFF000000FFFC0000000001FFFF0000FFFFFFF800000FFFFFFFFFE0FFFFFFF8
00000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF8
00000FFFFFFFFFE05B547BD366>65 D<FFFFFFFFFFFFFFC0000000FFFFFFFFFFFFFFFE00
0000FFFFFFFFFFFFFFFFC00000FFFFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFFFC000000
07FFF0000003FFFF00000007FFF00000007FFF80000007FFF00000003FFFC0000007FFF0
0000000FFFE0000007FFF000000007FFF0000007FFF000000007FFF8000007FFF0000000
03FFF8000007FFF000000003FFFC000007FFF000000001FFFC000007FFF000000001FFFE
000007FFF000000000FFFE000007FFF000000000FFFE000007FFF000000000FFFF000007
FFF000000000FFFF000007FFF000000000FFFF000007FFF000000000FFFF000007FFF000
000000FFFF000007FFF000000000FFFF000007FFF000000000FFFF000007FFF000000000
FFFF000007FFF000000001FFFE000007FFF000000001FFFE000007FFF000000001FFFC00
0007FFF000000003FFFC000007FFF000000003FFF8000007FFF000000007FFF8000007FF
F000000007FFF0000007FFF00000000FFFE0000007FFF00000001FFFC0000007FFF00000
007FFF00000007FFF0000001FFFE00000007FFF0000007FFF800000007FFFFFFFFFFFFE0
00000007FFFFFFFFFFFF0000000007FFFFFFFFFFFF8000000007FFFFFFFFFFFFF0000000
07FFF0000003FFFE00000007FFF00000003FFF80000007FFF00000000FFFE0000007FFF0
00000007FFF0000007FFF000000001FFF8000007FFF000000001FFFC000007FFF0000000
00FFFE000007FFF0000000007FFF000007FFF0000000007FFF800007FFF0000000003FFF
C00007FFF0000000003FFFC00007FFF0000000001FFFE00007FFF0000000001FFFE00007
FFF0000000001FFFE00007FFF0000000001FFFF00007FFF0000000001FFFF00007FFF000
0000001FFFF00007FFF0000000000FFFF00007FFF0000000000FFFF00007FFF000000000
0FFFF00007FFF0000000001FFFF00007FFF0000000001FFFF00007FFF0000000001FFFF0
0007FFF0000000001FFFE00007FFF0000000001FFFE00007FFF0000000003FFFE00007FF
F0000000003FFFC00007FFF0000000003FFFC00007FFF0000000007FFF800007FFF00000
0000FFFF800007FFF000000000FFFF000007FFF000000001FFFE000007FFF000000007FF
FE000007FFF00000000FFFFC000007FFF00000003FFFF0000007FFF0000001FFFFE000FF
FFFFFFFFFFFFFFFF8000FFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFF80000FFFFFFFF
FFFFFFFFC00000FFFFFFFFFFFFFFF800000054527CD160>I<0000000001FFFC000001C0
000000007FFFFFC00003C000000007FFFFFFF80007C00000003FFFFFFFFE001FC0000000
FFFFFFFFFF803FC0000003FFFFE003FFC07FC000000FFFFC00003FF0FFC000003FFFE000
000FF9FFC000007FFF80000003FFFFC00001FFFE00000000FFFFC00003FFF8000000007F
FFC00007FFF0000000003FFFC0000FFFE0000000001FFFC0001FFFC0000000000FFFC000
3FFF800000000007FFC0007FFF000000000003FFC000FFFE000000000001FFC000FFFE00
0000000001FFC001FFFC000000000000FFC003FFF8000000000000FFC003FFF800000000
00007FC007FFF00000000000007FC00FFFF00000000000003FC00FFFF00000000000003F
C01FFFE00000000000001FC01FFFE00000000000001FC01FFFE00000000000001FC03FFF
C00000000000001FC03FFFC00000000000000FC03FFFC00000000000000FC07FFFC00000
000000000FC07FFFC00000000000000FC07FFFC000000000000000007FFF800000000000
0000007FFF800000000000000000FFFF800000000000000000FFFF800000000000000000
FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF80
0000000000000000FFFF800000000000000000FFFF800000000000000000FFFF80000000
0000000000FFFF800000000000000000FFFF800000000000000000FFFF80000000000000
0000FFFF800000000000000000FFFF8000000000000000007FFF8000000000000000007F
FF8000000000000000007FFFC000000000000000007FFFC000000000000000007FFFC000
000000000007C03FFFC000000000000007C03FFFC000000000000007C03FFFC000000000
000007C01FFFE000000000000007C01FFFE000000000000007C01FFFE00000000000000F
C00FFFF00000000000000F800FFFF00000000000000F8007FFF00000000000001F8003FF
F80000000000001F8003FFF80000000000001F0001FFFC0000000000003F0000FFFE0000
000000007E0000FFFE0000000000007E00007FFF000000000000FC00003FFF8000000000
01F800001FFFC00000000003F800000FFFE00000000007F0000007FFF0000000000FE000
0003FFFC000000001FC0000001FFFE000000007F800000007FFF80000000FF000000003F
FFE0000007FE000000000FFFFE00001FF80000000003FFFFE001FFF00000000000FFFFFF
FFFFC000000000003FFFFFFFFF00000000000007FFFFFFFC000000000000007FFFFFE000
00000000000001FFFC00000000525479D261>I<FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFF
FFC0FFFFFFFFFFC0FFFFFFFFFFC00007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF800000007FFF800000007FFF800000007FFF800000007FFF8
00000007FFF800000007FFF80000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFF
FFC0FFFFFFFFFFC02A527CD132>73 D<000000000FFFC00000000000000003FFFFFF0000
00000000001FFFFFFFE0000000000000FFFFFFFFFC000000000003FFFC00FFFF00000000
000FFFC0000FFFC0000000003FFF000003FFF0000000007FFC000000FFF800000001FFF8
0000007FFE00000003FFE00000001FFF00000007FFC00000000FFF8000000FFF80000000
07FFC000001FFF0000000003FFE000003FFF0000000003FFF000007FFE0000000001FFF8
0000FFFC0000000000FFFC0000FFFC0000000000FFFC0001FFF800000000007FFE0003FF
F800000000007FFF0003FFF000000000003FFF0007FFF000000000003FFF8007FFE00000
0000001FFF800FFFE000000000001FFFC00FFFE000000000001FFFC01FFFE00000000000
1FFFE01FFFC000000000000FFFE01FFFC000000000000FFFE03FFFC000000000000FFFF0
3FFFC000000000000FFFF03FFFC000000000000FFFF07FFF80000000000007FFF87FFF80
000000000007FFF87FFF80000000000007FFF87FFF80000000000007FFF87FFF80000000
000007FFF8FFFF80000000000007FFFCFFFF80000000000007FFFCFFFF80000000000007
FFFCFFFF80000000000007FFFCFFFF80000000000007FFFCFFFF80000000000007FFFCFF
FF80000000000007FFFCFFFF80000000000007FFFCFFFF80000000000007FFFCFFFF8000
0000000007FFFCFFFF80000000000007FFFCFFFF80000000000007FFFCFFFF8000000000
0007FFFCFFFF80000000000007FFFCFFFF80000000000007FFFC7FFF80000000000007FF
F87FFFC000000000000FFFF87FFFC000000000000FFFF87FFFC000000000000FFFF87FFF
C000000000000FFFF83FFFC000000000000FFFF03FFFC000000000000FFFF03FFFE00000
0000001FFFF01FFFE000000000001FFFE01FFFE000000000001FFFE01FFFE00000000000
1FFFE00FFFF000000000003FFFC00FFFF000000000003FFFC007FFF800000000007FFF80
07FFF800000000007FFF8003FFF800000000007FFF0001FFFC0000000000FFFE0001FFFE
0000000001FFFE0000FFFE0000000001FFFC00007FFF0000000003FFF800003FFF800000
0007FFF000001FFFC00000000FFFE000000FFFE00000001FFFC0000007FFF00000003FFF
80000003FFF80000007FFF00000001FFFC000000FFFE00000000FFFF000003FFFC000000
003FFFE0001FFFF0000000000FFFFC00FFFFC00000000003FFFFFFFFFF000000000000FF
FFFFFFFC0000000000001FFFFFFFE000000000000003FFFFFF00000000000000001FFFE0
00000000565479D265>79 D<FFFFFFFFFFFFFF000000FFFFFFFFFFFFFFF80000FFFFFFFF
FFFFFFFF0000FFFFFFFFFFFFFFFFE000FFFFFFFFFFFFFFFFF0000007FFF000001FFFFC00
0007FFF0000001FFFF000007FFF00000007FFF800007FFF00000003FFFC00007FFF00000
000FFFE00007FFF00000000FFFF00007FFF000000007FFF00007FFF000000003FFF80007
FFF000000003FFFC0007FFF000000003FFFC0007FFF000000001FFFE0007FFF000000001
FFFE0007FFF000000001FFFE0007FFF000000001FFFE0007FFF000000001FFFF0007FFF0
00000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF
0007FFF000000001FFFF0007FFF000000001FFFF0007FFF000000001FFFF0007FFF00000
0001FFFE0007FFF000000001FFFE0007FFF000000001FFFE0007FFF000000001FFFC0007
FFF000000003FFFC0007FFF000000003FFFC0007FFF000000003FFF80007FFF000000007
FFF00007FFF00000000FFFE00007FFF00000001FFFE00007FFF00000003FFFC00007FFF0
0000007FFF000007FFF0000001FFFE000007FFF000001FFFFC000007FFFFFFFFFFFFF000
0007FFFFFFFFFFFFC0000007FFFFFFFFFFFE00000007FFFFFFFFFFE000000007FFF80000
000000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007
FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800000000
00000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8
0000000000000007FFF80000000000000007FFF80000000000000007FFF8000000000000
0007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF80000
000000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007
FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF800000000
00000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FFF8
0000000000000007FFF80000000000000007FFF8000000000000FFFFFFFFFFC000000000
FFFFFFFFFFC000000000FFFFFFFFFFC000000000FFFFFFFFFFC000000000FFFFFFFFFFC0
0000000050527CD15C>I<00000FFF800007000000FFFFF8000F000007FFFFFF001F0000
1FFFFFFFC03F00003FFFFFFFF07F0000FFFC00FFF8FF0001FFE0000FFDFF0003FF800001
FFFF0007FE0000007FFF000FFC0000003FFF000FF80000000FFF001FF800000007FF001F
F000000003FF003FF000000003FF003FE000000001FF007FE000000000FF007FE0000000
00FF007FE0000000007F00FFE0000000007F00FFE0000000003F00FFE0000000003F00FF
F0000000003F00FFF0000000003F00FFF8000000001F00FFF8000000001F00FFFC000000
001F00FFFE000000001F00FFFF000000000000FFFFC000000000007FFFF000000000007F
FFFF00000000007FFFFFF8000000003FFFFFFF800000003FFFFFFFFC0000001FFFFFFFFF
C000001FFFFFFFFFF000000FFFFFFFFFFC000007FFFFFFFFFF000003FFFFFFFFFFC00001
FFFFFFFFFFE00000FFFFFFFFFFF000007FFFFFFFFFF800003FFFFFFFFFFC00000FFFFFFF
FFFE000003FFFFFFFFFE000000FFFFFFFFFF0000001FFFFFFFFF80000000FFFFFFFF8000
00000FFFFFFFC0000000007FFFFFC00000000007FFFFE00000000000FFFFE00000000000
3FFFE000000000000FFFF0000000000007FFF0000000000003FFF0000000000003FFF078
0000000001FFF0F80000000000FFF0F80000000000FFF0F80000000000FFF0F800000000
007FF0F800000000007FF0FC00000000007FF0FC00000000007FF0FC00000000007FE0FE
00000000007FE0FE00000000007FE0FF0000000000FFC0FF0000000000FFC0FF80000000
00FFC0FFC000000001FF80FFE000000001FF00FFF000000003FF00FFFC00000007FE00FF
FF0000000FFC00FFFFC000001FF800FFFFF800007FF000FF1FFFC003FFE000FE0FFFFFFF
FFC000FC03FFFFFFFF0000F8007FFFFFFC0000F0000FFFFFF00000E000007FFF0000003C
5479D24B>83 D<00007FFF000000000007FFFFF0000000003FFFFFFE00000000FFFFFFFF
80000001FFE00FFFC0000003FE0001FFF0000007FF0000FFF8000007FF80003FFC00000F
FF80003FFE00000FFFC0001FFE00000FFFC0001FFF00000FFFC0000FFF80000FFFC0000F
FF80000FFFC0000FFF800007FF800007FFC00007FF800007FFC00003FF000007FFC00001
FE000007FFC0000000000007FFC0000000000007FFC0000000000007FFC0000000000007
FFC0000000000007FFC0000000000007FFC0000000007FFFFFC00000000FFFFFFFC00000
00FFFFFFFFC0000007FFFF87FFC000003FFFF007FFC000007FFF8007FFC00001FFFC0007
FFC00003FFF00007FFC00007FFE00007FFC0000FFFC00007FFC0001FFF800007FFC0003F
FF000007FFC0007FFF000007FFC0007FFE000007FFC0007FFE000007FFC000FFFC000007
FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC00000FFFC000FF
FC00000FFFC000FFFE00001FFFC0007FFE00001DFFC0007FFE00003DFFC0003FFF000079
FFE0001FFF8000F1FFF8000FFFC003E1FFFFE007FFF81FC0FFFFF003FFFFFF807FFFF000
FFFFFF001FFFF0001FFFFC0007FFE00001FFE0000000003C387CB641>97
D<000001FFF8000000001FFFFF80000000FFFFFFF0000003FFFFFFFC00000FFFC00FFE00
001FFE0001FF00007FFC0003FF8000FFF00007FF8001FFF00007FFC003FFE0000FFFC003
FFC0000FFFC007FFC0000FFFC00FFF80000FFFC00FFF80000FFFC01FFF800007FF801FFF
000007FF803FFF000003FF003FFF000001FE007FFF00000000007FFE00000000007FFE00
000000007FFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000
000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE000000
0000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000000007FFE00000000
007FFF00000000007FFF00000000003FFF00000000003FFF00000000003FFF00000003E0
1FFF80000003E01FFF80000007E00FFFC0000007C007FFC0000007C007FFE000000FC003
FFE000001F8001FFF000003F0000FFF800007E00007FFE0000FC00003FFF0003F800000F
FFE01FF0000003FFFFFFE0000000FFFFFF800000003FFFFE0000000001FFE0000033387C
B63C>99 D<000003FFC0000000003FFFFC00000001FFFFFF00000007FFFFFFC000000FFF
81FFE000003FFC007FF800007FF8003FFC0000FFF0001FFE0001FFE0000FFE0003FFC000
07FF0007FFC00007FF800FFF800003FF800FFF800003FFC01FFF800001FFC01FFF000001
FFC03FFF000001FFE03FFF000001FFE07FFF000000FFE07FFE000000FFE07FFE000000FF
F07FFE000000FFF0FFFE000000FFF0FFFE000000FFF0FFFE000000FFF0FFFE000000FFF0
FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFE0FFFE0000000000FF
FE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE00000000007FFE
00000000007FFE00000000007FFF00000000003FFF00000000003FFF00000000003FFF00
000000E01FFF00000001F01FFF80000003F00FFF80000003F007FFC0000007E007FFC000
0007E003FFE000000FC001FFF000001FC000FFF800003F80007FFC0000FF00001FFE0003
FE00000FFFC03FF8000003FFFFFFF0000000FFFFFFC00000001FFFFE0000000001FFF000
0034387CB63D>101 D<0000003FFC00000003FFFF0000000FFFFFC000003FFFFFE00000
FFF81FF00001FFC03FF80003FF807FF80007FF00FFFC000FFE00FFFC001FFC00FFFC001F
FC00FFFC003FF800FFFC003FF800FFFC003FF8007FF8007FF0007FF8007FF0003FF0007F
F0000FC0007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F
F0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007F
F0000000007FF0000000007FF0000000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFF
FFFFE000FFFFFFFFE000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007F
F8000000007FF8000000007FF80000007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFF
FFFE00007FFFFFFE00002E547CD329>I<0000007F00000000FF80000003FFE0000007FF
F0000007FFF000000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF8
00000FFFF8000007FFF0000007FFF0000003FFE0000000FF800000007F00000000000000
000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000001FF80000FFFFF80000FF
FFF80000FFFFF80000FFFFF80000FFFFF8000001FFF80000007FF80000007FF80000007F
F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8
0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF800
00007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000
007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8000000
7FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007F
F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8
0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF807
80007FF81FE0007FF83FF0007FF87FF8007FF8FFFC00FFF8FFFC00FFF0FFFC00FFF0FFFC
00FFE0FFFC01FFE0FFFC01FFC0FFFC03FF807FF807FF007FF00FFE003FF01FFC000FFFFF
F00007FFFFE00001FFFF8000001FFC0000256C87D329>106 D<003FF0001FFC000000FF
FFF000FFFFC00000FFFFF003FFFFF00000FFFFF00FFFFFF80000FFFFF01FE07FFC0000FF
FFF03F001FFE000003FFF07C001FFF000000FFF0F0000FFF000000FFF1E0000FFF800000
FFF3C0000FFF800000FFF7800007FF800000FFF7800007FFC00000FFFF000007FFC00000
FFFE000007FFC00000FFFE000007FFC00000FFFC000007FFC00000FFFC000007FFC00000
FFFC000007FFC00000FFFC000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000
FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000FF
FFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FF
FFFFF807FFFFFFC042367BB54B>110 D<000001FFE000000000001FFFFE0000000000FF
FFFFC000000003FFFFFFF00000000FFF807FFC0000001FFC000FFE0000007FF80007FF80
0000FFF00003FFC00001FFE00001FFE00003FFC00000FFF00003FF8000007FF00007FF80
00007FF8000FFF0000003FFC000FFF0000003FFC001FFF0000003FFE001FFF0000003FFE
003FFE0000001FFF003FFE0000001FFF003FFE0000001FFF007FFE0000001FFF807FFE00
00001FFF807FFE0000001FFF807FFE0000001FFF80FFFE0000001FFFC0FFFE0000001FFF
C0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE00
00001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFF
C0FFFE0000001FFFC07FFE0000001FFF807FFE0000001FFF807FFE0000001FFF803FFE00
00001FFF003FFF0000003FFF003FFF0000003FFF001FFF0000003FFE001FFF0000003FFE
000FFF0000003FFC000FFF8000007FFC0007FF8000007FF80003FFC00000FFF00001FFE0
0001FFE00000FFF00003FFC000007FF80007FF8000003FFE001FFF0000000FFF807FFC00
000007FFFFFFF800000000FFFFFFC0000000003FFFFF000000000001FFE00000003A387C
B643>I<007FE003FE00FFFFE00FFF80FFFFE03FFFE0FFFFE07FFFF0FFFFE0FE1FF8FFFF
E1F83FFC03FFE3E03FFE00FFE3C07FFE00FFE7807FFE00FFEF807FFE00FFEF007FFE00FF
EE007FFE00FFFE003FFC00FFFC003FFC00FFFC001FF800FFFC000FF000FFF800000000FF
F800000000FFF800000000FFF800000000FFF800000000FFF000000000FFF000000000FF
F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF
F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF
F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF
F000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FF
F000000000FFF0000000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFFFFFC0000FFFF
FFFC00002F367CB537>114 D<0003FFF00F00003FFFFE1F0000FFFFFFFF0003FFFFFFFF
0007FF003FFF000FF80007FF001FE00001FF003FC00000FF003F8000007F007F8000007F
007F0000003F007F0000003F00FF0000001F00FF0000001F00FF8000001F00FF8000001F
00FFC000001F00FFF000000000FFFC00000000FFFFC00000007FFFFF0000007FFFFFF800
003FFFFFFF00003FFFFFFFC0001FFFFFFFF0000FFFFFFFF80007FFFFFFFC0003FFFFFFFE
0000FFFFFFFF00003FFFFFFF80000FFFFFFFC00000FFFFFFC0000007FFFFE00000003FFF
E000000007FFF000000001FFF0780000007FF0F80000003FF0F80000001FF0FC0000001F
F0FC0000000FF0FC0000000FF0FE0000000FF0FE0000000FE0FF0000000FE0FF8000001F
E0FF8000001FC0FFC000001FC0FFE000003F80FFF800007F00FFFE0001FE00FFFFC00FFC
00FF7FFFFFF800FC1FFFFFE000F807FFFF8000F000FFF800002C387CB635>I<00003E00
000000003E00000000003E00000000003E00000000003E00000000003E00000000007E00
000000007E00000000007E00000000007E0000000000FE0000000000FE0000000001FE00
00000001FE0000000001FE0000000003FE0000000007FE0000000007FE000000000FFE00
0000001FFE000000003FFE00000000FFFE00000001FFFE0000000FFFFFFFFF00FFFFFFFF
FF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00003FFE000000003FFE000000003FFE00
0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00
0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00
0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00
0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00
0000003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE00
07C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0001FFE00
0F80001FFF000F80001FFF000F80000FFF001F00000FFF801F000007FFC03E000003FFF0
FC000001FFFFF80000007FFFF00000001FFFE000000003FF80002A4D7ECB34>I<003FF8
000001FFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF8
0007FFFFC000FFFFF80007FFFFC00003FFF800001FFFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8
000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF800000FFFC00000FFF8
00000FFFC00000FFF800000FFFC00000FFF800001FFFC00000FFF800001FFFC000007FF8
00003FFFC000007FF800003BFFC000007FF800007BFFC000003FFC0000F3FFC000003FFC
0001E3FFF000001FFE0007C3FFFFC0000FFFC03F83FFFFC00007FFFFFF03FFFFC00001FF
FFFE03FFFFC000007FFFF803FFFFC0000007FFE003FF000042377BB54B>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: Letter
%%EndSetup
%%Page: 1 1
1 0 bop 1006 100 a Fc(BA)l(CI)44 b(Pro)7 b(ject)46 b(for)f(an)g(OS)g
(Course)146 628 y Fb(The)f(Bak)m(er's)h(Problem:)61 b
Fa(Supp)s(ose)42 b(y)m(ou)g(are)g(the)g(o)m(wner)g(of)f(a)g(bak)m(ery)i
(that)e(just)g(b)s(ecame)h(ex-)0 748 y(tremely)28 b(p)s(opular.)41
b(In)29 b(the)h(past,)g(y)m(ou)f(w)m(aited)g(on)g(customers)g(as)g(so)s
(on)g(as)g(they)g(came)g(in)m(to)f(y)m(our)h(store.)0
869 y(No)m(w,)43 b(ho)m(w)m(ev)m(er,)i(almost)39 b(ev)m(ery)j(customer)
f(has)g(to)f(w)m(ait)g(for)g(service!)69 b(Y)-8 b(ou)40
b(are)h(thrilled)d(with)i(y)m(our)0 989 y(success,)35
b(but)e(are)g(w)m(orried)f(ab)s(out)g(fairness.)146 1230
y(One)37 b(da)m(y)-8 b(,)38 b(after)d(the)i(store)g(has)f(closed,)h(y)m
(ou)g(decide)g(to)f(install)d(a)j(tic)m(k)m(et)h(system)g(in)f(order)g
(to)g(b)s(e)0 1350 y(sure)41 b(to)e(serv)m(e)i(customers)g(in)d(turn.)
65 b(Since)40 b(y)m(ou)g(are)g(a)f(computer)h(exp)s(ert,)i(in)d
(addition)f(to)h(b)s(eing)g(a)0 1471 y(great)34 b(bak)m(er,)h(y)m(ou)f
(decide)h(to)e(use)i(y)m(our)f(new)h(computer)f(to)f(implemen)m(t)f
(this)i(tic)m(k)m(et)g(system.)48 b(Should)0 1591 y(y)m(ou)34
b(use)h(semaphores)f(or)f(monitors)f(in)h(y)m(our)h(implemen)m(tation?)
43 b(Mak)m(e)34 b(a)g(decision)e(and)i(then)g(do)g(the)0
1711 y(implemen)m(tation)29 b(in)j(BA)m(CI.)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF

29
projects/bakery.tex Normal file
View File

@ -0,0 +1,29 @@
% HOMEWORK #2
% re: processes
%
\documentstyle[12pt,fullpage]{article}
\pagestyle{empty}
\begin{document}
\begin{center}
{\large\bf BACI Project for an OS Course}
\end{center}
\vspace*{0.5in}
{\small\bf The Baker's Problem:} Suppose you are the owner of a bakery
that just became extremely popular. In the past, you waited on
customers as soon as they came into your store. Now, however,
almost every customer
has to wait for service! You are thrilled with your success, but are
worried about fairness. \\
One day, after the store has closed,
you decide to install a ticket system in order to be sure to serve
customers in turn. Since you are a computer expert, in
addition to being a great baker, you decide to use your new computer to
implement this ticket system. Should you use semaphores or monitors in
your implementation? Make a decision and then do the implementation in
BACI.
\end{document}

167
projects/dine.cm Normal file
View File

@ -0,0 +1,167 @@
//**************************************************************//
// //
// Program: Dining Philosopher Problem //
// Filename: dine.cm //
// Original author: Neil Bergmann //
// Modification: Tracy Camp //
// //
// This program implements the dining philosopher problem. //
// This version occasionally results in deadlock. //
// //
//**************************************************************//
//**************************************************************//
// GLOBAL DECLARATIONS //
const int number= 5; //number of diners//
const int true = 1; // logical true
const int false= 0; // logical false
const int none = -1; // indicates nobody has a fork
semaphore fork[number];
//fork provides mutual exclusion on forks - only one diner can //
//grab a fork at a time//
int hasfork[number];
//hasfork keeps a record of which diner currently has a particular fork//
int dinerseaten[number];
//records which diners have eaten so far//
//YOU CAN ADD DECLARATIONS HERE//
//**************************************************************//
int left (int diner)
//returns index of fork to the left of 'diner'//
//DO NOT CHANGE THIS FUNCTION//
{
return diner;
} //left//
int right (int diner)
//returns index of fork to the right of 'diner'//
//DO NOT CHANGE THIS FUNCTION//
{
if (diner < number-1 )
return (diner+1);
else return 0; //fork to right of last diner is #0//
} //right//
//**************************************************************//
void initialize ()
//YOU CAN ADD ANY INITIALIZATIONS HERE//
{
int count;
for (count=0; count<number; count++)
{
dinerseaten[count] = false; //no diners have eaten yet//
hasfork[count] = none; //nobody has forks yet//
initialsem(fork[count],1); //only one diner per fork at once//
}
} //initialize//
//**************************************************************//
void takefork(int forknum, int diner)
//diner tries to take a fork, blocking until it is available//
//mark which diner has the fork//
//DO NOT CHANGE THIS PROCEDURE//
{
p(fork[forknum]);
hasfork[forknum] = diner;
} //takefork//
//**************************************************************//
void replacefork(int forknum, int diner)
//diner replaces a fork after eating//
//DO NOT CHANGE THIS PROCEDURE//
{
//check if this diner really had this fork, if not complain//
if (hasfork[forknum] == diner)
{
hasfork[forknum] = none; //nobody has this fork now//
v(fork[forknum]); //signal that fork is available//
} else
cout << "ERROR: Diner # " << diner <<
" did not have fork number" << forknum << endl;
} //replacefork//
//**************************************************************//
void eat(int diner)
// Checks that diner has correct forks to left and right //
// Prints out message and sets 'dinerseaten' flag //
// DO NOT CHANGE THIS PROGRAM EXCEPT TO CHANGE OUTPUT //
{
//now check diner has correct forks, and let him or her eat//
if ((hasfork[left(diner)] == diner) &&
(hasfork[right(diner)] == diner) )
{
cout << "Diner # " << diner << "has eaten "<< endl;
dinerseaten[diner] = true;
} else
cout << "Diner # " << diner << " did not have correct forks" << endl;
} //eat//
//**************************************************************//
void success ()
//This procedure checks that all diners have eaten//
// DO NOT CHANGE THIS PROGRAM EXCEPT TO CHANGE OUTPUT //
{
int alldone;
int count;
alldone = true;
for (count=0; count<number; count++)
alldone = alldone && dinerseaten[count];
if (alldone)
cout << "SUCCESS" << endl;
else
cout << "FAILURE" << endl;
} //success//
//**************************************************************//
void dine(int diner)
//This procedure is started concurrently for each diner //
//This version of program occaisionally deadlocks //
{
takefork (left(diner), diner);
takefork(right(diner), diner);
eat(diner);
replacefork(left(diner), diner);
replacefork(right(diner), diner);
} //dine//
//**************************************************************//
// main program //
// DO NOT CHANGE THIS PROGRAM EXCEPT TO CHANGE NUMBER OF DINERS //
main ()
{
initialize();
cobegin
{ dine(0);
dine(1);
dine(2);
dine(3);
dine(number-1);
//add/delete more lines if number of diners changes...//
//note baci can only handle about 10 threads at a time//
}
success();
}

70
projects/diners.html Normal file
View File

@ -0,0 +1,70 @@
<HTML>
<HEAD>
<BR>
Neil Bergmann at Queensland University of Technology, Australia
created this project. Thanks Neil!
<BR>
<BR>
<BR>
<B>The Dining Philosophers </B>
<p>
This assignment deals with one of the famous problems in
resource allocation, deadlock and synchronization.
Copy a proposed solution to the Dining Philosopher's
problem, <tt>dine.cm</tt> (BACI C-- syntax)
from the common directory of larkspur.
Execute the program 50 times and record how often the
philosophers eat and how often they deadlock.
(BACI prints out system diagnostics when it detects deadlock,
i.e. when all threads in the system are blocked.)
Identify the problem that exists in this solution to the
Dining Philosophers, and fix the problem such
that your solution is independent
of the number of philosophers. Execute the program at least
50 times and confirm that deadlock doesn't occur in
your solution.
<p>
Written deliverables:
<OL>
<LI> A listing of your revised code; highlight the parts of
your revised code that are different from the original.
<LI> A brief explanation of why the original program deadlocks, and also an
explanation of how the diners sometime do manage to
eat in this program.
<LI> A brief explanation of how your solution corrects the
problem discussed in 2., emphasizing why
your solution <i>never</i> deadlocks.
<LI> An illustration of the results from 50 executions (in a compact
format!),
which shows that your solution never deadlocks. (You can add a
for-loop to the main program outside the cobegin to help make this data
collection easier.)
<LI> Show the results from your compact 50-executions
when you change your program to four
dining philosophers and then to three dining philosophers.
The only parts of the code that should change for these different
executions is the number of calls to <tt>dine()</tt> in the cobegin/coend
block.
<LI> A brief explanation to the following three questions:
<OL type=a>
<LI> Is your algorithm robust against deadlock when the number of diners
change? Explain.
<LI> Is your algorithm fair in the sense that every diner has a chance
to be the first to eat? Explain.
<LI> If diners took an hour to eat their spaghetti, what is
the longest and shortest time that five diners would take to
eat using your algorithm? Explain.
</OL>
</OL>
</BODY>
</HTML>

102
projects/reader-writer.html Normal file
View File

@ -0,0 +1,102 @@
<HTML>
<HEAD>
<B>Reader/Writer Problem with Writer Priority: </B>
<p>
Using <I>general</I> semaphores, create a solution to the
reader/writer problem such that writers have priority over
readers. When writers have priority, the following rules
exist:
<UL>
<LI> A reader can read the shared file (e.g., database)
only when there are NO active or waiting writers.
<LI> A writer can only write to the shared file when the
writer is given mutually exclusive access to the file.
<LI> Multiple readers can read the shared file concurrently,
if the above rules are followed.
</UL>
<p>
Your BACI program should consist of the following three procedures:
<OL>
<LI> Coordinator: This procedure should be executed before any readers or
writers are executed, and should be used to initialize the semaphores
and any other global variables that require initialization.
<LI> Reader(int reader): Multiple copies of this procedure may be executed
from the cobegin/coend block; reader is the id of this particular reader.
<LI> Writer(int writer): Multiple copies of this
procedure may also be executed from the cobegin/coend block; writer
is the id of this particular writer.
</OL>
<P>
Use two global declarations to declare the number of readers/writers
in the system:
<center>
const int Rnumber= 5; //number of readers// <BR>
const int Wnumber= 3; //number of writers//
</center>
If the above number of readers/writers are defined, then main() will
be: <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
main() { <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Coordinator; <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
cobegin { <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Reader(0); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Reader(1); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Reader(2); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Reader(3); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Reader(Rnumber-1); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Writer(0); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Writer(1); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Writer(Wnumber-1); <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
//add-delete lines when the number of readers or writers change. <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
//NOTE: BACI can only handle about 10 threads at a time <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} <BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} <BR>
<p>
In both the Reader and Writer procedures, during the actual
reading/writing phase of the shared file, have a for loop of length
three that prints to stdout "... reading is performed by process I ..." (or
"... writing is performed by process J ..."), where I/J is the id value
of the reader/writer.
In addition, both the Reader and Writer procedures should print a
message to stdout just before they perform a P() or V() operation on
any of the semaphores. In the message, each thread must identify itself
as a reader or a writer, the id of the reader/writer, the name of
the semaphore variable upon which it is operating, and the value
of the semaphore variable at that time.
<P>
Written deliverables:
<OL>
<LI> A listing of your code (*.lst).
<LI> The results from executing your program with the following
number of readers/writers:
<OL type=a>
<LI> Rnumber= 5 and Wnumber= 3
<LI> Rnumber= 6 and Wnumber= 1
<LI> Rnumber= 1 and Wnumber= 6
</OL>
<LI> A brief explanation of how your solution gives writer
priority.
</OL>
</BODY>
</HTML>

1451
projects/synch-prims.ps Normal file

File diff suppressed because it is too large Load Diff

76
projects/synch-prims.tex Normal file
View File

@ -0,0 +1,76 @@
% HOMEWORK #2
% re: processes
%
\documentstyle[11pt,fullpage]{article}
\pagestyle{empty}
\begin{document}
\begin{center}
{\large\bf BACI Projects for an OS Course}
\end{center}
\begin{enumerate}
\item {\small\bf Implementation of Machine Instructions:}
Implement the exchange instruction in the text.
The implementation of this instruction should be
based on an ATOMIC function which returns a BOOLEAN value. You
should test your implementation of the machine instruction by building
a mutual exclusion protocol on top of your low-level operation.
\item {\small\bf Implementation of Fair Semaphores (FIFO):}
The default semaphore in BACI is implemented with
a random wake up order. For non-terminating processes,
this random behavior allows the possibility of starvation.
A fair semaphore implementation, on the other hand,
has a FIFO wake up order. Implement semaphores with this FIFO wake up
order. Allow users to define a semaphore as a CONST value in the range
[1..13]. This CONST value should be used as a tag for access to a
semaphore and its corresponding variables.
At least four procedures will be required in your
implementation:
\begin{itemize}
\item PROCEDURE {\tt Create\_Semaphores}(); \\
You should place your initialization code here.
\item PROCEDURE {\tt Init\_Semaphore}({\it sem\_index} : INTEGER;
{\it val} : INTEGER); \\
In this procedure, you should initialize the semaphore represented by {\it
sem\_index}. As in the given
BACI semaphore implementation,
your FIFO semaphore implementation should not allow the use of a
semaphore unless it has been initialized.
\item PROCEDURE {\tt FIFO\_P}({\it sem\_index} : INTEGER); \\
This procedure should include the ATOMIC compare-and-swap
operation implemented above. If a calling process needs to be put to
sleep, use the SUSPEND operation. The WHICH\_PROC command
helps keep track of sleeping processes.
\item PROCEDURE {\tt FIFO\_V}({\it sem\_index} : INTEGER); \\
This procedure should REVIVE a process waiting on the
semaphore represented by {\it sem\_index}
in a FIFO basis. If no such semaphore exists, this procedure should
increment the value associated with the semaphore. Again, use the
ATOMIC compare-and-swap operation to obtain mutual exclusive access to
variables associated with this semaphore.
\end{itemize}
Bear in mind that this code should be written as a system
implementation
and, as such, should handle all possible errors. You are
responsible for producing code which is robust in the presence of
ignorant, stupid, or even malicious use by the user community.
Lastly, full credit will not be received if your solution has
non-required waiting.
\item {\small\bf Implementation of Unfair Semaphores:}
Assume that the semaphore operation given in BACI does not exist.
Implement semaphores based on Dijkstra's original proposal by
randomly choosing which process to wake up when a signal occurs
(E. Dijkstra, ``Hierarchical ordering of sequential
processes,'' {\em
Acta Informatica}, vol. 1, no. 2, pp. 115--138, 1971.)
The RANDOM(INTEGER) command returns a random
number in the range [0..(INTEGER-1)].
Follow the information in the fair semaphores implementation project on the
minimal number of
procedures required for this implementation.
\end{enumerate}
\end{document}

37
projects/threads.html Normal file
View File

@ -0,0 +1,37 @@
<HTML>
<HEAD>
<BR>
Neil Bergmann at Queensland University of Technology, Australia
created this project. Thanks Neil!
<BR>
<BR>
<BR>
<B>Concurrent threads:</B>
<p>
See the program <tt>add.cm</tt> (BACI C-- syntax).
This program
is a concurrent BACI program to add the first 100
integers using 10 concurrent threads. Using BACI, execute
this program 20 times and record the results. Identify the
problem(s) that exists in this example BACI program, and
correct the problem by adding appropriate additional code.
(You are not allowed to delete, replace, or modify existing
code in the example program.)
<p>
Written deliverables:
<OL>
<LI> A listing of your revised code; highlight the parts of
your revised code that are different from the original.
<LI> A brief explanation of why the original program
gives incorrect results.
<LI> A brief explanation of how your solution corrects this. (What is the
correct answer?)
</OL>
</BODY>
</HTML>

1303
projects/timeticks.ps Normal file

File diff suppressed because it is too large Load Diff

54
projects/timeticks.tex Normal file
View File

@ -0,0 +1,54 @@
% HOMEWORK #2
% re: processes
%
\documentstyle[12pt,fullpage]{article}
\pagestyle{empty}
\begin{document}
\begin{center}
{\large\bf BACI Project for an OS Course}
\end{center}
\vspace*{0.3in}
This is problem 6.16 on page 213 of the textbook, made specific
to Ben-Ari Concurrent Pascal. Write a program containing a monitor
{\bf AlarmClock}. The monitor must have an integer variable {\bf
theClock} (initialization to zero) and two procedures:
\begin{itemize}
\item PROCEDURE {\bf Tick}; \\
increments {\bf theClock} each time that it is called. It can do other
things, like SIGNALC, if needed, but no WAITCs.
\item PROCEDURE {\bf Alarm}({\bf id} : INTEGER; {\bf delta} : INTEGER); \\
blocks caller having identifier {\bf id} for at least {\bf delta}
ticks of {\bf theClock}.
\end{itemize}
You may endow the monitor with any other variables that it needs. The
monitor should be able to accommodate up to 5 simultaneous alarms.
The main program should have two procedures outside of the monitor:
\begin{itemize}
\item PROCEDURE {\bf Ticker}; \\
calls {\bf Tick} in a repeat-forever loop.
\item PROCEDURE {\bf Thread}({\bf id} : INTEGER; {\bf myDelta} : INTEGER); \\
calls {\bf Alarm} in a repeat-forever loop.
\end{itemize}
The main program cannot have any variables. The main program should
start 4 concurrent threads: {\bf Thread(100,3)},
{\bf Thread(200,7)},
{\bf Thread(300,10)}, and
{\bf Ticker}. Output should occur for each of the following events:
\begin{enumerate}
\item At each clock tick, show the values of {\bf theClock}.
\item When any thread either waits or reawakens from a wait, show the
id of the thread, the name of the condition on which it is waiting,
and the time ({\bf theClock}) at which the wait occurs.
\item When a condition is signalled, show the name of the condition
being signalled and the time at which the signal occurs.
\end{enumerate}
Hand in a listing of the program and output showing each
{\bf Thread} copy enduring at least one alarm cycle. You may find the
{\bf tee} command helpful in this regard.
\end{document}