DIRECTORY Basics USING [RawChars]; UnixTypes: CEDAR DEFINITIONS ~ { bitsPerUnitMustBeEight: CARD[8..8] ~ BITS[UNIT]; CHARPtr: TYPE ~ POINTER TO Basics.RawChars ฌ NIL; INTPtr: TYPE ~ POINTER TO INT; Flag: TYPE ~ MACHINE DEPENDENT {false(0), true(1)}; UID: TYPE ~ INT16; GID: TYPE ~ INT16; PIDPtr: TYPE ~ POINTER TO PID; PID: TYPE ~ INT; PGRPPtr: TYPE ~ POINTER TO PGRP; PGRP: TYPE ~ INT; Time: TYPE ~ INT32; Dev: TYPE ~ INT16; Offset: TYPE ~ INT32; INum: TYPE ~ CARD32; RES: TYPE ~ SysCallResult; SysCallResult: TYPE ~ MACHINE DEPENDENT { success(0), failure(CARD32.LAST) }; RawVM: TYPE ~ POINTER; GIDsPtr: TYPE ~ POINTER TO GIDs; GIDs: TYPE ~ RECORD [ gids: PACKED SEQUENCE COMPUTED CARD OF GID ]; FD: TYPE ~ FileDescriptor; FileDescriptor: TYPE ~ MACHINE DEPENDENT { pseudostdin(0), pseudostdout(1), pseudostderr(2), stdtrc(LOOPHOLE[-4]), stdout(LOOPHOLE[-3]), stdin(LOOPHOLE[-2]), error(CARD32.LAST) }; FileFlags: TYPE ~ MACHINE DEPENDENT RECORD [ fill0: [0..3777777B] ฌ 0, excl: Flag ฌ false, -- error if already created trunc: Flag ฌ false, -- truncate to zero length creat: Flag ฌ false, -- create if nonexistant [sic] fill1: [0..3] ฌ 0, async: Flag ฌ false, -- signal pgrp when data ready fill2: [0..3] ฌ 0, append: Flag ฌ false, -- append on each write ndelay: Flag ฌ false, -- non-blocking reads access: MACHINE DEPENDENT {RDONLY(0), WRONLY(1), RDWR(2), (3)} ]; LockOp: TYPE ~ MACHINE DEPENDENT RECORD [ fill: [0..0fffffffH] ฌ 0, un: Flag ฌ false, -- unlock nb: Flag ฌ false, -- don't block when locking ex: Flag ฌ false, -- exclusive lock sh: Flag ฌ false -- shared lock ]; Whence: TYPE ~ MACHINE DEPENDENT { set(0), -- absolute offset incr(1), -- relative to current offset xtnd(2), -- relative to end of file (CARD32.LAST) }; Protections: TYPE ~ MACHINE DEPENDENT RECORD [ fill: PACKED ARRAY [0..BITS[WORD]-4) OF BOOL ฌ ALL[FALSE], user: BOOL ฌ FALSE, -- kernel only exec: BOOL ฌ FALSE, write: BOOL ฌ FALSE, read: BOOL ฌ FALSE ]; MMapFlags: TYPE ~ MACHINE DEPENDENT RECORD [ fill: PACKED ARRAY [0..BITS[WORD]-8) OF BOOL ฌ ALL[FALSE], inherit: BOOL ฌ FALSE, noreserve: BOOL ฌ FALSE, rename: BOOL ฌ FALSE, fixed: BOOL ฌ TRUE, pad: PACKED ARRAY [0..1) OF BOOL ฌ ALL[FALSE], private: BOOL ฌ FALSE, shared: BOOL ฌ TRUE ]; MSyncFlags: TYPE ~ MACHINE DEPENDENT RECORD [ fill: PACKED ARRAY [0..BITS[WORD]-2) OF BOOL ฌ ALL[FALSE], invalidate: BOOL ฌ FALSE, -- Invalidate mappings async: BOOL ฌ FALSE -- Return immediately ]; PollFD: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ fd(0): FileDescriptor, events(2): PollEvents, revents(3): PollEvents ]; PollEvents: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ spare (0: 0..9): PACKED ARRAY[0..10) OF Flag ฌ ALL[false], nval (0: 10..10): Flag ฌ false, -- invalid pollfd entry hup (0: 11..11): Flag ฌ false, -- fd has been hung up on err (0: 12..12): Flag ฌ false, -- fd has error condition out (0: 13..13): Flag ฌ false, -- fd is writeable (won't block) pri (0: 14..14): Flag ฌ false, -- priority info at fd in (0:15..15): Flag ฌ false -- fd is readable ]; IpcPerm: TYPE = MACHINE DEPENDENT RECORD [--common IPC access structure uid: UID, -- (owner's) user id gid: GID, -- (owner's) group id cuid: UID, -- creator's user id cgid: GID, -- creator's group id mode: CARD16, -- access modes; r/w permission; (set op sets only low 9 bits) seq: CARD16, -- slot usage sequence number key: CARD -- key ]; ShmIdDs: TYPE = MACHINE DEPENDENT RECORD [ ipcPerm: IpcPerm, -- operation permission struct segsz: INT, -- size of segment in bytes lpid: UID, -- process ID of last shmop cpid: UID, -- process ID of creator nAttch: CARD16, -- number of current attaches unused1: CARD16, -- depending on C compiler's padding algorithm ! aTime: Time, -- last shmat time dTime: Time, -- last shmdt time cTime: Time, -- last change time amp: POINTER -- segment anonฌmap pointer ]; SharedMemoryIdentifier: TYPE = RECORD [val: CARD]; errorSharedMemoryIdentifier: SharedMemoryIdentifier = [CARD.LAST]; SharedMemoryKey: TYPE = RECORD [val: CARD]; ipcPRIVATE: SharedMemoryKey = [0]; --private key to create new SharedMemoryIdentifier ShmGetFlags: TYPE = RECORD [val: CARD]; ipcALLOC: ShmGetFlags = [0100000B]; -- entry currently allocated ipcCREAT: ShmGetFlags = [0001000B]; -- create entry if key doesn't exist ipcEXCL: ShmGetFlags = [0002000B]; -- fail if key exists allPerms: ShmGetFlags = [0000777B]; -- (not in found ipc.h) IPCCtlCmd: TYPE = RECORD [val: CARD]; ipcRMID: IPCCtlCmd = [0]; -- remove identifier ipcSET: IPCCtlCmd = [1]; -- set options ipcSTAT: IPCCtlCmd = [2]; -- get options ShmAtFlags: TYPE = RECORD [CARD]; shmNoFlags: ShmAtFlags = [000000]; shmRDOnly: ShmAtFlags = [010000]; -- attach read-only (else read-write) shmRnd: ShmAtFlags = [020000]; -- round attach address to SHMBA Signal: TYPE ~ MACHINE DEPENDENT { SIGHUP(1), -- hangup SIGINT(2), -- interrupt SIGQUIT(3), -- quit SIGILL(4), -- illegal instruction (not reset when caught) SIGTRAP(5), -- trace trap (not reset when caught) SIGABRT(6), -- used by abort SIGEMT(7), -- EMT instruction SIGFPE(8), -- floating point exception SIGKILL(9), -- kill (cannot be caught or ignored) SIGBUS(10), -- bus error SIGSEGV(11), -- segmentation violation SIGSYS(12), -- bad argument to system call SIGPIPE(13), -- write on a pipe with no one to read it SIGALRM(14), -- alarm clock SIGTERM(15), -- software termination signal from kill SIGURG(16), -- urgent condition on IO channel SIGSTOP(17), -- sendable stop signal not from tty SIGTSTP(18), -- stop signal from tty SIGCONT(19), -- continue a stopped process SIGCHLD(20), -- to parent on child stop or exit SIGTTIN(21), -- to readers pgrp upon background tty read SIGTTOU(22), -- like TTIN for output if (tp->tฌlocal<OSTOP) SIGIO(23), -- input/output possible signal SIGXCPU(24), -- exceeded CPU time limit SIGXFSZ(25), -- exceeded file size limit SIGVTALRM(26), -- virtual time alarm SIGPROF(27), -- profiling time alarm SIGWINCH(28), -- window changed SIGLOST(29), -- resource lost (eg, record-lock lost) SIGUSR1(30), -- user defined signal 1 SIGUSR2(31) -- user defined signal 2 }; SocketType: TYPE ~ MACHINE DEPENDENT { stream(1), -- stream socket dgram(2), -- datagram socket raw(3), -- raw-protocol interface rdm(4), -- reliably-delivered message seqPacket(5), -- sequenced packet stream (CARD16.LAST) }; AddressFamily: TYPE ~ MACHINE DEPENDENT { unspec(0), -- unspecified unix(1), -- local to host (pipes, portals) inet(2), -- internetwork: UDP, TCP, etc. impLink(3), -- arpanet imp addresses pup(4), -- pup protocols: e.g. BSP chaos(5), -- mit CHAOS protocols ns(6), -- XEROX NS protocols nbs(7), -- nbs protocols ecma(8), -- european computer manufacturers datakit(9), -- datakit protocols ccitt(10), -- CCITT protocols, X.25 etc. sna(11), -- IBM SNA decNet(12), -- DECnet dli(13), -- Direct data link interface lat(14), -- LAT hyLink(15), -- NSC Hyperchannel appleTalk(16), -- Apple Talk nit(17), -- Network Interface Tap ieee802(18), -- IEEE 802.2, also ISO 8802 osi(19), -- umbrella for all families used by OSI (e.g. protosw lookup) x25(20), -- CCITT X.25 in particular osinet(21), -- AFI = 47, IDI = 4 gosip(22), -- U.S. Government OSI (CARD16.LAST) }; SockAddrPtr: TYPE ~ POINTER TO SockAddr; SockAddr: TYPE ~ WORD16 MACHINE DEPENDENT RECORD [ family(0): AddressFamily, data(1): PACKED ARRAY[0..14) OF CHAR -- up to 14 bytes of direct address ]; ProtocolFamily: TYPE ~ MACHINE DEPENDENT { -- same as address families for now unspec(0), -- unspecified unix(1), -- local to host (pipes, portals) inet(2), -- internetwork: UDP, TCP, etc. impLink(3), -- arpanet imp addresses pup(4), -- pup protocols: e.g. BSP chaos(5), -- mit CHAOS protocols ns(6), -- XEROX NS protocols nbs(7), -- nbs protocols ecma(8), -- european computer manufacturers datakit(9), -- datakit protocols ccitt(10), -- CCITT protocols, X.25 etc. sna(11), -- IBM SNA decNet(12), -- DECnet dli(13), -- Direct data link interface lat(14), -- LAT hyLink(15), -- NSC Hyperchannel appleTalk(16), -- Apple Talk nit(17), -- Network Interface Tap ieee802(18), -- IEEE 802.2, also ISO 8802 osi(19), -- umbrella for all families used by OSI (e.g. protosw lookup) x25(20), -- CCITT X.25 in particular osinet(21), -- AFI = 47, IDI = 4 gosip(22), -- U.S. Government OSI (CARD16.LAST) }; MsgFlags: TYPE ~ MACHINE DEPENDENT RECORD [ spare: [0..01fffffffH] ฌ 0, dontRoute: Flag ฌ false, -- send without using routing tables peek: Flag ฌ false, -- peek at incoming message oob: Flag ฌ false -- process out-of-band data ]; SDHow: TYPE ~ MACHINE DEPENDENT { noRecv(0), -- disable receives on the socket noSend(1), -- disable sends on the socket noSendOrRecv(2) -- disable both sends and receives }; Fmt: TYPE ~ MACHINE DEPENDENT { fifo(01B), -- fifo special chr(02B), -- character special dir(04B), -- directory blk(06B), -- block special reg(10B), -- regular file lnk(12B), -- symbolic link sock(14B), -- socket (17B) }; Permission: TYPE ~ MACHINE DEPENDENT RECORD [ read: Flag, write: Flag, exec: Flag ]; Mode: TYPE ~ MACHINE DEPENDENT RECORD [ fmt: Fmt ฌ LOOPHOLE[0], -- type of file suid: Flag ฌ false, -- set user id on execution sgid: Flag ฌ false, -- set group id on execution svtx: Flag ฌ false, -- save swapped text even after use owner: Permission ฌ [false, false, false], group: Permission ฌ [false, false, false], others: Permission ฌ [false, false, false] ]; StatPtr: TYPE ~ POINTER TO Stat; Stat: TYPE ~ MACHINE DEPENDENT RECORD [ dev: Dev, -- device inode resides on pad0: INT16, ino: INum, -- this inode's number mode: Mode, -- protection nlink: INT16, -- number of hard links to the file uid: UID, -- user ID of owner gid: GID, -- group ID of owner rdev: Dev, -- the device type, for inode that is device pad1: INT16, size: CARD32, -- total size of file, in bytes atime: Time, -- file last access time spare1: INT32, mtime: Time, -- file last modify time spare2: INT32, ctime: Time, -- file last status change time spare3: INT32, blksize: CARD32, -- optimal blocksize for file system i/o ops blocks: CARD32, -- actual number of blocks allocated spare4: ARRAY [0..2) OF INT32 ]; StrBufPtr: TYPE ~ POINTER TO StrBuf; StrBuf: TYPE ~ MACHINE DEPENDENT RECORD [ maxLen: INT, len: INT, buf: CHARPtr ]; RSFlags: TYPE = MACHINE DEPENDENT { none(0), hiPri(1), (CARD32.LAST) }; GetResult: TYPE = MACHINE DEPENDENT { success(0), moreCtl(1), moreData(2), moreCtlAndData(3), failure(CARD32.LAST) }; Who: TYPE ~ INT; children: Who = -1; self: Who = 0; RUsage: TYPE ~ RECORD [ utime: TimeVal, -- user time used stime: TimeVal, -- system time used maxrss: INT, -- max resident set size ixrss: INT, -- integral shared memory size idrss: INT, -- integral unshared data isrss: INT, -- integral unshared stack minflt: INT, -- page reclaims majflt: INT, -- page faults nswap: INT, -- swaps inblock: INT, -- block input operations oublock: INT, -- block output operations msgsnd: INT, -- messages sent msgrcv: INT, -- messages received nsignals: INT, -- signals received nvcsw: INT, -- voluntary context switches nivcsw: INT -- involuntary ]; TimeZonePtr: TYPE ~ POINTER TO TimeZone; TimeZone: TYPE = MACHINE DEPENDENT RECORD [ minutesWest: INT, dstTime: INT -- non-zero == dst applies at this location ]; TimeValPtr: TYPE ~ POINTER TO TimeVal; TimeVal: TYPE = MACHINE DEPENDENT RECORD [ sec: CARD, -- seconds since Jan 1, 1970 usec: CARD -- plus this many microseconds ]; FileTimesPtr: TYPE ~ POINTER TO AccModTimes; AccModTimes: TYPE ~ MACHINE DEPENDENT RECORD [ accessTime: TimeVal, modTime: TimeVal ]; IOVecPtr: TYPE ~ POINTER TO IOVec; IOVec: TYPE ~ MACHINE DEPENDENT RECORD [ base: CHARPtr, len: INT ]; FileSystemID: TYPE ~ MACHINE DEPENDENT RECORD [ val: ARRAY [0..2) OF CARD32 ]; StatFSPtr: TYPE ~ POINTER TO StatFS; StatFS: TYPE ~ MACHINE DEPENDENT RECORD [ type: CARD32, -- type of info, zero for now bsize: CARD32, -- fundamental file system block size blocks: CARD32, -- total blocks in file system bfree: CARD32, -- free blocks in file system bavail: CARD32, -- free blocks available to non-superuser files: CARD32, -- total file nodes in file system ffree: CARD32, -- free file nodes in file system fsid: FileSystemID, -- file system id spare: ARRAY [0..7) OF CARD32 ]; }. า UnixTypes.mesa Copyright ำ 1988, 1989, 1991, 1992 by Xerox Corporation. All rights reserved. Christian Jacobi, January 24, 1991 5:30 pm PST Demers, November 9, 1988 5:02:04 pm PST Carl Hauser, November 22, 1988 5:22:21 pm PST Michael Plass, August 12, 1991 5:21 pm PDT Types and structures from and from whole cloth. there is no guarantee that the chars pointed to will be word aligned Enumerations and structures from and its included header files. flags argument for open. op argument for FLock. whence argument to lseek. Described types found in . Structures and flags from . Non-testable poll events (may not be specified in events field, but may be returned in revents field). Testable select events Types to access the Unix shared memory features: and --shared memory descriptor structure --low order 9 bits for permission stuff Constants from Types describing sockets Structures and flags from . Structure filled in by fstat. Structures and flags for GetMsg/PutMsg Structures for GetRUsage Unix time structures from . IOVec type for ReadV/WriteV Structure declarations from . Michael Plass, August 12, 1991 5:17:16 pm PDT: Merged UnixFile, UnixPoll, UnixSignal, UnixSocket, UnixStat, UnixStrOpts, UnixTime, UnixUIO, UnixVFS into this interface; some types needed to be renamed to disambiguate: UnixFile.Flags => FileFlags, UnixStrOpts.Flags => RSFlags สท•NewlineDelimiter –(cedarcode) style™codešœ™Kšœ ฯeœC™NJ™.K™'K™-K™*K˜—šฯk œžœ ˜"K˜—šฯn œžœž ˜K˜—head™=K˜šœžœ žœžœ˜0K˜—š œ žœžœžœžœ˜1K™DK˜—Kš œžœžœžœžœ˜K˜šœžœžœž œ˜3K˜—Kšžœžœžœ˜K˜Kšžœžœžœ˜K˜Kš œžœžœžœžœ˜Kšžœžœžœ˜K˜Kš œ žœžœžœžœ˜ Kšžœžœžœ˜K˜Kšœžœžœ˜K˜Kšœžœžœ˜K˜Kšœžœžœ˜K˜Kšœžœžœ˜K˜Kšžœžœ˜šœžœžœž œ˜)Kšœ ˜ Kšœžœžœ˜Kšœ˜—K˜šœžœžœ˜K˜—Kšœ žœžœžœ˜ šœžœžœ˜Kš œžœžœžœžœžœž˜*Kšœ˜——™LKšžœžœ˜šœžœžœž œ˜*Kšœ˜Kšœ˜Kšœ˜Kšœžœ˜Kšœžœ˜Kšœžœ˜Kšœžœžœ˜Kšœ˜K˜—š œ žœžœž œžœ˜,Kšœ˜Kšœฯc˜/Kšœ ˜/Kšœ ˜3Kšœ˜Kšœ ˜3Kšœ˜Kšœ ˜-Kšœ ˜+Kš œžœž œžœžœžœ ˜>Kšœ˜Kšœ™K˜—š œžœžœž œžœ˜)Kšœ˜Kšœ  ˜Kšœ ˜-Kšœ ˜#Kšœ ˜K˜Kšœ™K˜—šœžœžœž œ˜"Kšœ ˜Kšœ  ˜&Kšœ  ˜#Kšœžœžœ˜ K˜Kšœ™——™&š œ žœžœž œžœ˜.Kšœžœžœžœžœžœžœžœžœ˜:Kšœžœžœ ˜"Kšœžœžœ˜Kšœžœžœ˜Kšœžœž˜Kšœ˜K˜—š œ žœžœž œžœ˜,Kšœžœžœžœžœžœžœžœžœ˜:Kšœ žœžœ˜Kšœ žœžœ˜Kšœžœžœ˜Kšœžœžœ˜Kš œžœžœžœžœžœžœ˜.Kšœ žœžœ˜Kšœžœž˜Kšœ˜K˜—š œ žœžœž œžœ˜-Kšœžœžœžœžœžœžœžœžœ˜:Kšœ žœžœ ˜0Kšœžœžœ ˜)Kšœ˜—K™—™#š œžœžœžœž œžœ˜0K˜K˜K˜K˜K˜—š œ žœžœžœž œžœ˜4Kš œžœžœžœžœ˜:J™fKšœ  ˜7Kšœ ˜9Kšœ! ˜:J™Kšœ!  ˜AKšœ! ˜7Kšœ ˜/K˜——šœL™Lš œ žœžœž œžœ ˜GKšœžœ ˜Kšœžœ ˜Kšœžœ ˜Kšœžœ ˜ Kšœžœ >˜QKšœžœ ˜/Kšœžœ ˜K˜K˜—š œ žœžœž œžœ˜*Kšœ$™$Kšœ ˜1Kšœžœ ˜(Kšœžœ ˜'Kšœžœ ˜$Kšœžœ ˜.Kšœ žœ 0˜BKšœ ˜ Kšœ  ˜Kšœ  ˜ Kšœžœ ˜.K˜K˜—šœžœžœžœ˜3Kšœ7žœžœ˜BK˜—šœžœžœžœ˜+Kšœ$ 2˜V—K˜šœ žœžœžœ˜'K™'Kšœ$ ˜@Kšœ$ $˜HKšœ& ˜;Kšœ% ˜˜HKšœ  ˜%Kšœ  ˜!Kšœ  ˜"Kšœžœžœ˜ Kšœ˜K˜—Kšœ žœžœžœ ˜(š œ žœžœžœž œžœ˜2K˜Kš œ žœžœžœžœ #˜HKšœ˜K˜—šœžœžœž œ #˜NKšœ  ˜Kšœ  !˜+Kšœ  ˜)Kšœ  ˜%Kšœ  ˜#Kšœ  ˜!Kšœ ˜Kšœ  ˜Kšœ  "˜,Kšœ  ˜!Kšœ  ˜)Kšœ   ˜Kšœ   ˜Kšœ  ˜'Kšœ  ˜Kšœ  ˜ Kšœ  ˜Kšœ  ˜"Kšœ ˜*Kšœ  >˜HKšœ  ˜%Kšœ  ˜!Kšœ  ˜"Kšœžœžœ˜ Kšœ˜K˜—š œ žœžœž œžœ˜+K˜Kšœ $˜=Kšœ ˜/Kšœ ˜-Kšœ˜K˜—šœžœžœž œ˜!Kšœ  !˜-Kšœ  ˜*Kšœ "˜2Kšœ˜K˜——™'šœžœžœž œ˜Kšœ  ˜Kšœ  ˜Kšœ   ˜Kšœ  ˜Kšœ  ˜Kšœ  ˜Kšœ   ˜Kšœ˜Kšœ˜K™—š œ žœžœž œžœ˜-Kšœ ˜ Kšœ ˜ Kšœ ˜ Kšœ˜K˜—š œžœžœž œžœ˜'Kšœ žœ ˜'Kšœ ˜/Kšœ ˜0Kšœ #˜7K˜*K˜*K˜*K˜K˜—Kšœ žœžœžœ˜ š œžœžœž œžœ˜'Kšœ  ˜%Kšœžœ˜Kšœ  ˜"Kšœ   ˜Kšœžœ #˜1Kšœžœ ˜Kšœžœ ˜Kšœ  ,˜8Kšœžœ˜ Kšœžœ ˜-Kšœ ˜&Kšœžœ ˜Kšœ  ˜%Kšœžœ˜Kšœ ˜-Kšœžœ˜Kšœ žœ ,˜=Kšœžœ $˜4Kšœžœžœž˜Kšœ˜K™——šœ&™&Kšœ žœžœžœ˜$š œžœžœž œžœ˜)Kšœžœ˜ Kšœžœ˜ Kšœ ˜ Kšœ˜K˜—šœ žœžœž œ˜#Kšœžœžœ˜ K˜K˜—šœ žœžœž œ˜%Kšœ@žœžœ˜LK˜K˜——šœ™šœžœžœ˜Kšœ˜Kšœ˜K˜—šœžœžœ˜Kšœ ˜"Kšœ ˜$Kšœžœ ˜'Kšœžœ ˜,Kšœžœ ˜'Kšœžœ ˜(Kšœžœ ˜Kšœžœ ˜Kšœžœ  ˜Kšœ žœ ˜)Kšœ žœ ˜*Kšœžœ ˜Kšœžœ ˜#Kšœ žœ ˜$Kšœžœ ˜+Kšœžœ ˜K˜K˜——™'Kšœ žœžœžœ ˜(š œ žœžœž œžœ˜+Kšœ žœ˜Kšœ žœ +˜9K˜K˜—Kšœ žœžœžœ ˜&š œ žœžœž œžœ˜*Kšœžœ ˜(Kšœžœ ˜*Kšœ˜K˜—Kšœžœžœžœ ˜,š œ žœžœž œžœ˜.Kšœ˜Kšœ˜Kšœ˜—K˜—šœ™Kšœ žœžœžœ˜"K˜š œžœžœž œžœ˜(K˜Kšœž˜Kšœ˜K˜——™(š œžœžœž œžœ˜/Kšœžœžœž˜K˜K˜—Kšœ žœžœžœ˜$š œžœžœž œžœ˜)Kšœžœ ˜+Kšœžœ %˜4Kšœžœ ˜.Kšœžœ ˜,Kšœžœ )˜9Kšœžœ "˜1Kšœžœ !˜0Kšœ ˜%Kšœžœžœž˜K˜K˜—K˜K˜—Kšœ“™“—…—0H‘